├── .circleci
└── config.yml
├── .gitignore
├── .npmignore
├── LICENSE
├── README.md
├── package.json
├── renovate.json
├── src
├── index.ts
└── prepare.ts
├── tsconfig.json
└── yarn.lock
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | jobs:
3 | build:
4 | working_directory: ~/graphql-cli-prepare
5 | docker:
6 | - image: circleci/node:latest
7 | steps:
8 | - checkout
9 | - run: sudo npm install -g yarn semantic-release
10 | - run: yarn install
11 | - run: yarn test
12 | - run: semantic-release
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src
2 | .circleci
3 | renovate.json
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 SuperGraph
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 | # graphql-cli-prepare [](https://www.npmjs.com/package/graphql-cli-prepare)
2 | [](https://github.com/semantic-release/semantic-release)[](https://circleci.com/gh/supergraphql/graphql-cli-prepare)[](https://renovateapp.com/)[](https://codeclimate.com/github/supergraphql/graphql-cli-prepare)
3 | Plugin for [`graphql-cli`](https://github.com/graphql-cli/graphql-cli) to bundle schemas using [`graphql-import`](https://github.com/graphcool/graphql-import) and generate bindings using [`graphql-static-binding`](https://github.com/supergraphql/graphql-static-binding).
4 |
5 | ## Installation
6 |
7 | The `graphql-cli-prepare` plugin is shipped with `graphql-cli`.
8 |
9 | ## Usage
10 | ```
11 | graphql prepare
12 |
13 | Bundle schemas and generate bindings
14 |
15 | Options:
16 | --dotenv Path to .env file [string]
17 | -p, --project Project name [string]
18 | --output, -o Output folder [string]
19 | --save, -s Save settings to config file [boolean] [default: "false"]
20 | --bundle Process schema imports [boolean] [default: "false"]
21 | --bindings Generate bindings [boolean] [default: "false"]
22 | --generator, -g Generator used to generate bindings [string]
23 | --verbose Show verbose output messages [boolean] [default: "false"]
24 | -h, --help Show help [boolean]
25 | -v, --version Show version number [boolean]
26 | ```
27 |
28 | ### Schema bundling
29 | Schema bundling is the processing of `import` statements in a GraphQL schema. For more information, see [`graphql-import`](https://github.com/graphcool/graphql-import).
30 | The first time you use schema bundling on a project, you need to provide the output folder where the processed schema will be stored:
31 | ```shell
32 | $ graphql prepare -p app -o src/generated --bundle --save
33 | √ Bundled schema for project app written to src/generated/app.graphql
34 | ```
35 | This will also save the configuration in your `.graphqlconfig` file (see below).
36 |
37 | ### Binding generation
38 | Binding generation is a code generation process. A binding file will be generated for use with [`graphql-yoga`](https://github.com/graphcool/graphql-yoga/). This binding provides type safe delegation of GraphQL queries and mutations in your resolvers. See [`graphcool-binding`](https://github.com/graphcool/graphcool-binding) for more information.
39 | The first time you use binding generation in your project, you need to provide an output folder for your generated binding files, and the generator you want to use:
40 | ```shell
41 | $ graphql prepare -p database -o src/generated -g graphcool-ts --bindings --save
42 | √ Bindings for project database written to src/generated/database.ts
43 | ```
44 | This will also save the configuration in your `.graphqlconfig` file (see below).
45 |
46 | ### Automating `graphql prepare`
47 | After you have set up bundling and binding generation for all projects, you can simply run `graphql prepare` without any parameters to process all projects:
48 | ```shell
49 | $ graphql prepare
50 | √ Bundled schema for project app written to src/generated/app.graphql
51 | √ Bindings for project database written to src/generated/database.ts
52 | ```
53 | ## Advanced topics
54 |
55 | ### Available generators
56 | Out of the box, the following generators are provided by [`graphql-static-binding`](https://github.com/supergraphql/graphql-static-binding):
57 |
58 | | Generator | Purpose |
59 | | ------------ | -------------------------------------------- |
60 | | prisma-ts | Typescript bindings for Prisma endpoints |
61 | | prisma-js | Javascript bindings for Prisma endpoints |
62 | | binding-ts | Typescript bindings for any GraphQL endpoint |
63 | | binding-js | Javascript bindings for any GraphQL endpoint |
64 |
65 | ### Using your own generator
66 | You can also use your own generator. To do so, you can pass a file path to the `--generator` parameter:
67 | ```shell
68 | $ graphql prepare -p database --bindings -g ./myGenerator.js
69 | ```
70 | >More instructions for creating your own generator are coming soon in [`graphql-static-binding`](https://github.com/supergraphql/graphql-static-binding).
71 |
72 | ### `graphql-config` extensions
73 |
74 | To store the project configuration for bundling and bindings, `graphql-cli-prepare` uses two extension keys in the `graphql-config` configuration file. These keys can be set manually, or using the `--save` parameter.
75 | ```diff
76 | # ./.graphqlconfig.yml
77 | projects:
78 | app:
79 | schemaPath: src/schema.graphql
80 | extensions:
81 | endpoints:
82 | default: 'http://localhost:4000'
83 | + prepare-bundle: src/generated/app.graphql
84 | database:
85 | schemaPath: src/generated/prisma.graphql
86 | extensions:
87 | prisma: prisma.yml
88 | + prepare-binding:
89 | + output: src/generated/prisma.ts
90 | + generator: prisma-ts
91 |
92 | ```
93 |
94 |
95 |
96 | 
97 |
98 |
99 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "graphql-cli-prepare",
3 | "version": "0.0.0-development",
4 | "description": "Plugin for graphql-cli to bundle schemas and generate bindings",
5 | "main": "dist/index.js",
6 | "typings": "dist/index.d.ts",
7 | "scripts": {
8 | "prepublish": "npm run build",
9 | "build": "tsc -d",
10 | "pretest": "npm run build",
11 | "test": "tslint src/**/*.ts"
12 | },
13 | "repository": {
14 | "type": "git",
15 | "url": "https://github.com/graphql-cli/graphql-cli-prepare.git"
16 | },
17 | "keywords": [
18 | "graphql",
19 | "graphql-cli"
20 | ],
21 | "author": "Kim Brandwijk ",
22 | "license": "MIT",
23 | "bugs": {
24 | "url": "https://github.com/graphql-cli/graphql-cli-prepare/issues"
25 | },
26 | "homepage": "https://github.com/graphql-cli/graphql-cli-prepare#readme",
27 | "devDependencies": {
28 | "@types/fs-extra": "5.0.1",
29 | "@types/inquirer": "0.0.36",
30 | "@types/node": "9.4.6",
31 | "@types/yargs": "11.0.0",
32 | "graphql": "0.13.1",
33 | "graphql-config": "2.0.1",
34 | "tslint": "5.9.1",
35 | "typescript": "2.7.2"
36 | },
37 | "release": {
38 | "branch": "master"
39 | },
40 | "dependencies": {
41 | "chalk": "2.3.1",
42 | "fs-extra": "5.0.0",
43 | "graphql-import": "0.4.5",
44 | "graphql-static-binding": "0.9.3",
45 | "lodash": "4.17.5"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "semanticCommits": true,
3 | "automerge": true,
4 | "extends": [
5 | "config:base"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { Prepare } from './prepare'
2 | import { CommandBuilder } from 'yargs'
3 |
4 | const command: {
5 | command: string
6 | describe?: string
7 | handler: (context: any, argv: any) => any
8 | builder?: CommandBuilder
9 | } = {
10 | command: 'prepare',
11 | describe: 'Bundle schemas and generate bindings',
12 |
13 | builder: {
14 | output: {
15 | alias: 'o',
16 | describe: 'Output folder',
17 | type: 'string'
18 | },
19 | save: {
20 | alias: 's',
21 | describe: 'Save settings to config file',
22 | type: 'boolean',
23 | default: 'false'
24 | },
25 | bundle: {
26 | describe: 'Process schema imports',
27 | type: 'boolean',
28 | default: 'false'
29 | },
30 | bindings: {
31 | describe: 'Generate bindings',
32 | type: 'boolean',
33 | default: 'false'
34 | },
35 | generator: {
36 | alias: 'g',
37 | describe: 'Generator used to generate bindings',
38 | type: 'string'
39 | },
40 | verbose: {
41 | describe: 'Show verbose output messages',
42 | type: 'boolean',
43 | default: 'false'
44 | }
45 | },
46 |
47 | handler: async (context: any, argv) => {
48 | if (!argv.bundle && !argv.bindings) {
49 | argv.bundle = argv.bindings = true
50 | }
51 |
52 | const prepare = new Prepare(context, argv)
53 | await prepare.handle()
54 | }
55 | }
56 |
57 | export = command
58 |
--------------------------------------------------------------------------------
/src/prepare.ts:
--------------------------------------------------------------------------------
1 | import chalk from 'chalk'
2 | import * as fs from 'fs-extra'
3 | import { GraphQLConfig, GraphQLProjectConfig } from 'graphql-config'
4 | import { importSchema } from 'graphql-import'
5 | import { generateCode } from 'graphql-static-binding'
6 | import { get, has, merge } from 'lodash'
7 | import * as path from 'path'
8 | import { Arguments } from 'yargs'
9 |
10 | export class Prepare {
11 | private config: GraphQLConfig
12 | private bundleExtensionConfig: { 'prepare-bundle': string } | undefined
13 | private projectName: string
14 | private project: GraphQLProjectConfig
15 |
16 | constructor(private context: any, private argv: Arguments) {}
17 |
18 | public async handle() {
19 | this.config = await this.context.getConfig()
20 |
21 | // Get projects
22 | const projects: { [name: string]: GraphQLProjectConfig } = this.getProjectConfig()
23 |
24 | // Process each project
25 | for (const projectName of Object.keys(projects)) {
26 | const project: GraphQLProjectConfig = projects[projectName]
27 |
28 | this.setCurrentProject(project, projectName)
29 | if (this.argv.bundle) {
30 | this.bundle()
31 | }
32 | if (this.argv.bindings) {
33 | this.bindings()
34 | }
35 | this.save()
36 | }
37 | }
38 |
39 | private setCurrentProject(project: GraphQLProjectConfig, projectName: string): void {
40 | this.project = project
41 | this.projectName = projectName
42 | this.bundleExtensionConfig = undefined
43 | }
44 |
45 | private bindings() {
46 | let bindingExtensionConfig: { 'prepare-binding': { output: string; generator: string } } | undefined
47 |
48 | if (
49 | this.argv.project ||
50 | (!this.argv.project &&
51 | (has(this.project.config, 'extensions.prepare-binding') ||
52 | has(this.project.config, 'extensions.binding')))
53 | ) {
54 | this.context.spinner.start(`Generating bindings for project ${this.projectDisplayName()}...`)
55 | bindingExtensionConfig = this.processBindings(
56 | this.bundleExtensionConfig ? this.bundleExtensionConfig['prepare-bundle'] : undefined
57 | )
58 | merge(this.project.extensions, bindingExtensionConfig)
59 | this.context.spinner.succeed(
60 | `Bindings for project ${this.projectDisplayName()} written to ${chalk.green(
61 | bindingExtensionConfig['prepare-binding'].output
62 | )}`
63 | )
64 | } else if (this.argv.verbose) {
65 | this.context.spinner.info(
66 | `Binding not configured for project ${this.projectDisplayName()}. Skipping`
67 | )
68 | }
69 | }
70 |
71 | private bundle() {
72 | if (
73 | this.argv.project ||
74 | (!this.argv.project &&
75 | (has(this.project.config, 'extensions.prepare-bundle') ||
76 | has(this.project.config, 'extensions.bundle')))
77 | ) {
78 | this.context.spinner.start(`Processing schema imports for project ${this.projectDisplayName()}...`)
79 | this.bundleExtensionConfig = this.processBundle()
80 | merge(this.project.extensions, this.bundleExtensionConfig)
81 | this.context.spinner.succeed(
82 | `Bundled schema for project ${this.projectDisplayName()} written to ${chalk.green(
83 | this.bundleExtensionConfig['prepare-bundle']
84 | )}`
85 | )
86 | } else if (this.argv.verbose) {
87 | this.context.spinner.info(
88 | `Bundling not configured for project ${this.projectDisplayName()}. Skipping`
89 | )
90 | }
91 | }
92 |
93 | private save() {
94 | if (this.argv.save) {
95 | const configFile = path.basename(this.config.configPath)
96 | this.context.spinner.start(
97 | `Saving configuration for project ${this.projectDisplayName()} to ${chalk.green(configFile)}...`
98 | )
99 | this.saveConfig()
100 | this.context.spinner.succeed(
101 | `Configuration for project ${this.projectDisplayName()} saved to ${chalk.green(configFile)}`
102 | )
103 | }
104 | }
105 |
106 | private getProjectConfig(): { [name: string]: GraphQLProjectConfig } {
107 | let projects: { [name: string]: GraphQLProjectConfig } | undefined
108 | if (this.argv.project) {
109 | if (Array.isArray(this.argv.project)) {
110 | projects = {}
111 | this.argv.project.map((p: string) => merge(projects, { [p]: this.config.getProjectConfig(p) }))
112 | } else {
113 | // Single project mode
114 | projects = { [this.argv.project]: this.config.getProjectConfig(this.argv.project) }
115 | }
116 | } else {
117 | // Process all projects
118 | projects = this.config.getProjects()
119 | }
120 |
121 | if (!projects) {
122 | throw new Error('No projects defined in config file')
123 | }
124 |
125 | return projects
126 | }
127 |
128 | private processBundle(): { 'prepare-bundle': string } {
129 | const outputPath: string = this.determineBundleOutputPath()
130 | const schemaPath: string = this.determineSchemaPath()
131 |
132 | const finalSchema = importSchema(schemaPath)
133 |
134 | fs.writeFileSync(outputPath, finalSchema, { flag: 'w' })
135 |
136 | return { 'prepare-bundle': outputPath }
137 | }
138 |
139 | private processBindings(
140 | schemaPath: string | undefined
141 | ): { 'prepare-binding': { output: string; generator: string } } {
142 | const generator: string = this.determineGenerator()
143 | // TODO: This does not support custom generators
144 | const extension = generator.endsWith('ts') ? 'ts' : 'js'
145 | const outputPath: string = this.determineBindingOutputPath(extension)
146 | const schema: string = this.determineInputSchema(schemaPath)
147 |
148 | const schemaContents: string = importSchema(schema)
149 | const finalSchema: string = generateCode(schemaContents, generator)
150 | fs.writeFileSync(outputPath, finalSchema, { flag: 'w' })
151 |
152 | return { 'prepare-binding': { output: outputPath, generator: generator } }
153 | }
154 |
155 | private saveConfig() {
156 | if (has(this.project.config, 'extensions.bundle')) {
157 | delete this.project.config.extensions!.bundle
158 | }
159 | if (has(this.project.config, 'extensions.binding')) {
160 | delete this.project.config.extensions!.binding
161 | }
162 | this.config.saveConfig(this.project.config, this.projectName)
163 | }
164 |
165 | /**
166 | * Determine input schema path for binding. It uses the resulting schema from bundling (if available),
167 | * then looks at bundle extension (in case bundling ran before), then takes the project schemaPath.
168 | * Also checks if the file exists, otherwise it throws and error.
169 | *
170 | * @param {(string | undefined)} schemaPath Schema path from bundling
171 | * @returns {string} Input schema path to be used for binding generatio.
172 | */
173 | private determineInputSchema(schemaPath: string | undefined): string {
174 | const bundleDefined = has(this.project.config, 'extensions.prepare-bundle.output')
175 | const oldBundleDefined = has(this.project.config, 'extensions.bundle.output')
176 | // schemaPath is only set when bundle ran
177 | if (!schemaPath) {
178 | if (bundleDefined) {
179 | // Otherwise, use bundle output schema if defined
180 | schemaPath = get(this.project.config, 'extensions.prepare-bundle.output')
181 | } else if (oldBundleDefined) {
182 | schemaPath = get(this.project.config, 'extensions.bundle.output')
183 | } else if (this.project.schemaPath) {
184 | // Otherwise, use project schemaPath
185 | schemaPath = this.project.schemaPath
186 | } else {
187 | throw new Error(`Input schema cannot be determined.`)
188 | }
189 | }
190 |
191 | if (fs.existsSync(schemaPath!)) {
192 | return schemaPath!
193 | } else {
194 | throw new Error(
195 | `Schema '${schemaPath!}' not found.${bundleDefined ? ' Did you run bundle first?' : ''}`
196 | )
197 | }
198 | }
199 |
200 | /**
201 | * Determine input schema path for bundling.
202 | *
203 | * @returns {string} Input schema path for bundling
204 | */
205 | private determineSchemaPath(): string {
206 | if (this.project.schemaPath) {
207 | return this.project.schemaPath
208 | }
209 | throw new Error(`No schemaPath defined for project '${this.projectName}' in config file.`)
210 | }
211 |
212 | /**
213 | * Determine generator. Provided generator takes precedence over value from config
214 | *
215 | * @param {string} generator Command line parameter for generator
216 | * @returns {string} Generator to be used
217 | */
218 | private determineGenerator(): string {
219 | if (this.argv.generator) {
220 | return this.argv.generator
221 | }
222 | if (has(this.project.config, 'extensions.binding.generator')) {
223 | if (!this.argv.save) {
224 | this.context.spinner.warn(
225 | `Deprecated extension key 'binding.generator' found in config file. Use '--save' to update to 'prepare-binding.generator'.`
226 | )
227 | }
228 | return get(this.project.config, 'extensions.binding.generator')
229 | }
230 | if (has(this.project.config, 'extensions.prepare-binding.generator')) {
231 | return get(this.project.config, 'extensions.prepare-binding.generator')
232 | }
233 | throw new Error(
234 | 'Generator cannot be determined. No existing configuration found and no generator parameter specified.'
235 | )
236 | }
237 |
238 | /**
239 | * Determine output path for binding. Provided path takes precedence over value from config
240 | *
241 | * @param {string} extension File extension for output file
242 | * @returns Output path
243 | */
244 | private determineBindingOutputPath(extension: string) {
245 | let outputPath: string
246 | if (this.argv.output) {
247 | outputPath = path.join(this.argv.output, `${this.projectName}.${extension}`)
248 | } else if (has(this.project.config, `extensions.binding.output`)) {
249 | if (!this.argv.save) {
250 | this.context.spinner.warn(
251 | `Deprecated extension key 'binding.output' found in config file. Use '--save' to update to 'prepare-binding.output'.`
252 | )
253 | }
254 | outputPath = get(this.project.config, `extensions.binding.output`)
255 | } else if (has(this.project.config, `extensions.prepare-binding.output`)) {
256 | outputPath = get(this.project.config, `extensions.prepare-binding.output`)
257 | } else {
258 | throw new Error(
259 | 'Output path cannot be determined. No existing configuration found and no output parameter specified.'
260 | )
261 | }
262 |
263 | fs.ensureDirSync(path.dirname(outputPath))
264 | return outputPath
265 | }
266 |
267 | /**
268 | * Determine output path for bundle. Provided path takes precedence over value from config
269 | *
270 | * @returns Output path
271 | */
272 | private determineBundleOutputPath() {
273 | let outputPath: string
274 | if (this.argv.output) {
275 | outputPath = path.join(this.argv.output, `${this.projectName}.graphql`)
276 | } else if (has(this.project.config, `extensions.bundle`)) {
277 | if (!this.argv.save) {
278 | this.context.spinner.warn(
279 | `Deprecated extension key 'bundle' found in config file. Use '--save' to update to 'prepare-bundle'.`
280 | )
281 | }
282 | outputPath = get(this.project.config, `extensions.bundle`)
283 | } else if (has(this.project.config, `extensions.prepare-bundle`)) {
284 | outputPath = get(this.project.config, `extensions.prepare-bundle`)
285 | } else {
286 | throw new Error(
287 | 'Output path cannot be determined. No existing configuration found and no output parameter specified.'
288 | )
289 | }
290 |
291 | fs.ensureDirSync(path.dirname(outputPath))
292 | return outputPath
293 | }
294 |
295 | private projectDisplayName = () => chalk.green(this.projectName)
296 | }
297 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "preserveConstEnums": true,
4 | "strictNullChecks": true,
5 | "sourceMap": true,
6 | "target": "es5",
7 | "outDir": "dist",
8 | "moduleResolution": "node",
9 | "lib": [
10 | "es2017",
11 | "esnext.asynciterable",
12 | "dom"
13 | ]
14 | },
15 | "exclude": [
16 | "node_modules",
17 | "dist"
18 | ],
19 | "include": [
20 | "./src/**/*.ts"
21 | ]
22 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/fs-extra@5.0.1":
6 | version "5.0.1"
7 | resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.1.tgz#cd856fbbdd6af2c11f26f8928fd8644c9e9616c9"
8 | dependencies:
9 | "@types/node" "*"
10 |
11 | "@types/inquirer@0.0.36":
12 | version "0.0.36"
13 | resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-0.0.36.tgz#d27aae262b127ffc2e6dbf8e14e8caf7f7c059a3"
14 | dependencies:
15 | "@types/rx" "*"
16 | "@types/through" "*"
17 |
18 | "@types/node@*":
19 | version "8.5.2"
20 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5"
21 |
22 | "@types/node@9.4.6":
23 | version "9.4.6"
24 | resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e"
25 |
26 | "@types/rx-core-binding@*":
27 | version "4.0.4"
28 | resolved "https://registry.yarnpkg.com/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz#d969d32f15a62b89e2862c17b3ee78fe329818d3"
29 | dependencies:
30 | "@types/rx-core" "*"
31 |
32 | "@types/rx-core@*":
33 | version "4.0.3"
34 | resolved "https://registry.yarnpkg.com/@types/rx-core/-/rx-core-4.0.3.tgz#0b3354b1238cedbe2b74f6326f139dbc7a591d60"
35 |
36 | "@types/rx-lite-aggregates@*":
37 | version "4.0.3"
38 | resolved "https://registry.yarnpkg.com/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz#6efb2b7f3d5f07183a1cb2bd4b1371d7073384c2"
39 | dependencies:
40 | "@types/rx-lite" "*"
41 |
42 | "@types/rx-lite-async@*":
43 | version "4.0.2"
44 | resolved "https://registry.yarnpkg.com/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz#27fbf0caeff029f41e2d2aae638b05e91ceb600c"
45 | dependencies:
46 | "@types/rx-lite" "*"
47 |
48 | "@types/rx-lite-backpressure@*":
49 | version "4.0.3"
50 | resolved "https://registry.yarnpkg.com/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz#05abb19bdf87cc740196c355e5d0b37bb50b5d56"
51 | dependencies:
52 | "@types/rx-lite" "*"
53 |
54 | "@types/rx-lite-coincidence@*":
55 | version "4.0.3"
56 | resolved "https://registry.yarnpkg.com/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz#80bd69acc4054a15cdc1638e2dc8843498cd85c0"
57 | dependencies:
58 | "@types/rx-lite" "*"
59 |
60 | "@types/rx-lite-experimental@*":
61 | version "4.0.1"
62 | resolved "https://registry.yarnpkg.com/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz#c532f5cbdf3f2c15da16ded8930d1b2984023cbd"
63 | dependencies:
64 | "@types/rx-lite" "*"
65 |
66 | "@types/rx-lite-joinpatterns@*":
67 | version "4.0.1"
68 | resolved "https://registry.yarnpkg.com/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz#f70fe370518a8432f29158cc92ffb56b4e4afc3e"
69 | dependencies:
70 | "@types/rx-lite" "*"
71 |
72 | "@types/rx-lite-testing@*":
73 | version "4.0.1"
74 | resolved "https://registry.yarnpkg.com/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz#21b19d11f4dfd6ffef5a9d1648e9c8879bfe21e9"
75 | dependencies:
76 | "@types/rx-lite-virtualtime" "*"
77 |
78 | "@types/rx-lite-time@*":
79 | version "4.0.3"
80 | resolved "https://registry.yarnpkg.com/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz#0eda65474570237598f3448b845d2696f2dbb1c4"
81 | dependencies:
82 | "@types/rx-lite" "*"
83 |
84 | "@types/rx-lite-virtualtime@*":
85 | version "4.0.3"
86 | resolved "https://registry.yarnpkg.com/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz#4b30cacd0fe2e53af29f04f7438584c7d3959537"
87 | dependencies:
88 | "@types/rx-lite" "*"
89 |
90 | "@types/rx-lite@*":
91 | version "4.0.5"
92 | resolved "https://registry.yarnpkg.com/@types/rx-lite/-/rx-lite-4.0.5.tgz#b3581525dff69423798daa9a0d33c1e66a5e8c4c"
93 | dependencies:
94 | "@types/rx-core" "*"
95 | "@types/rx-core-binding" "*"
96 |
97 | "@types/rx@*":
98 | version "4.1.1"
99 | resolved "https://registry.yarnpkg.com/@types/rx/-/rx-4.1.1.tgz#598fc94a56baed975f194574e0f572fd8e627a48"
100 | dependencies:
101 | "@types/rx-core" "*"
102 | "@types/rx-core-binding" "*"
103 | "@types/rx-lite" "*"
104 | "@types/rx-lite-aggregates" "*"
105 | "@types/rx-lite-async" "*"
106 | "@types/rx-lite-backpressure" "*"
107 | "@types/rx-lite-coincidence" "*"
108 | "@types/rx-lite-experimental" "*"
109 | "@types/rx-lite-joinpatterns" "*"
110 | "@types/rx-lite-testing" "*"
111 | "@types/rx-lite-time" "*"
112 | "@types/rx-lite-virtualtime" "*"
113 |
114 | "@types/through@*":
115 | version "0.0.29"
116 | resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93"
117 | dependencies:
118 | "@types/node" "*"
119 |
120 | "@types/yargs@11.0.0":
121 | version "11.0.0"
122 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.0.0.tgz#124b9ed9c65b7091cc36da59ae12cbd47d8745ea"
123 |
124 | ansi-regex@^2.0.0:
125 | version "2.1.1"
126 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
127 |
128 | ansi-styles@^2.2.1:
129 | version "2.2.1"
130 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
131 |
132 | ansi-styles@^3.1.0, ansi-styles@^3.2.0:
133 | version "3.2.0"
134 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
135 | dependencies:
136 | color-convert "^1.9.0"
137 |
138 | argparse@^1.0.7:
139 | version "1.0.9"
140 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
141 | dependencies:
142 | sprintf-js "~1.0.2"
143 |
144 | babel-code-frame@^6.22.0:
145 | version "6.26.0"
146 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
147 | dependencies:
148 | chalk "^1.1.3"
149 | esutils "^2.0.2"
150 | js-tokens "^3.0.2"
151 |
152 | balanced-match@^1.0.0:
153 | version "1.0.0"
154 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
155 |
156 | brace-expansion@^1.1.7:
157 | version "1.1.8"
158 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
159 | dependencies:
160 | balanced-match "^1.0.0"
161 | concat-map "0.0.1"
162 |
163 | builtin-modules@^1.1.1:
164 | version "1.1.1"
165 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
166 |
167 | chalk@2.3.1:
168 | version "2.3.1"
169 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
170 | dependencies:
171 | ansi-styles "^3.2.0"
172 | escape-string-regexp "^1.0.5"
173 | supports-color "^5.2.0"
174 |
175 | chalk@^1.1.3:
176 | version "1.1.3"
177 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
178 | dependencies:
179 | ansi-styles "^2.2.1"
180 | escape-string-regexp "^1.0.2"
181 | has-ansi "^2.0.0"
182 | strip-ansi "^3.0.0"
183 | supports-color "^2.0.0"
184 |
185 | chalk@^2.3.0:
186 | version "2.3.0"
187 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
188 | dependencies:
189 | ansi-styles "^3.1.0"
190 | escape-string-regexp "^1.0.5"
191 | supports-color "^4.0.0"
192 |
193 | color-convert@^1.9.0:
194 | version "1.9.1"
195 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
196 | dependencies:
197 | color-name "^1.1.1"
198 |
199 | color-name@^1.1.1:
200 | version "1.1.3"
201 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
202 |
203 | commander@^2.12.1:
204 | version "2.12.2"
205 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
206 |
207 | concat-map@0.0.1:
208 | version "0.0.1"
209 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
210 |
211 | cross-fetch@2.0.0:
212 | version "2.0.0"
213 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.0.0.tgz#a17475449561e0f325146cea636a8619efb9b382"
214 | dependencies:
215 | node-fetch "2.0.0"
216 | whatwg-fetch "2.0.3"
217 |
218 | cucumber-html-reporter@^3.0.4:
219 | version "3.0.4"
220 | resolved "https://registry.yarnpkg.com/cucumber-html-reporter/-/cucumber-html-reporter-3.0.4.tgz#1be0dee83f30a2f4719207859a5440ce082ffadd"
221 | dependencies:
222 | find "^0.2.7"
223 | fs-extra "^3.0.1"
224 | js-base64 "^2.3.2"
225 | jsonfile "^3.0.0"
226 | lodash "^4.17.2"
227 | open "0.0.5"
228 |
229 | diff@^3.2.0:
230 | version "3.4.0"
231 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
232 |
233 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
234 | version "1.0.5"
235 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
236 |
237 | esprima@^4.0.0:
238 | version "4.0.0"
239 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
240 |
241 | esutils@^2.0.2:
242 | version "2.0.2"
243 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
244 |
245 | find@^0.2.7:
246 | version "0.2.7"
247 | resolved "https://registry.yarnpkg.com/find/-/find-0.2.7.tgz#7afbd00f8f08c5b622f97cda6f714173d547bb3f"
248 | dependencies:
249 | traverse-chain "~0.1.0"
250 |
251 | fs-extra@5.0.0:
252 | version "5.0.0"
253 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
254 | dependencies:
255 | graceful-fs "^4.1.2"
256 | jsonfile "^4.0.0"
257 | universalify "^0.1.0"
258 |
259 | fs-extra@^3.0.1:
260 | version "3.0.1"
261 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
262 | dependencies:
263 | graceful-fs "^4.1.2"
264 | jsonfile "^3.0.0"
265 | universalify "^0.1.0"
266 |
267 | fs.realpath@^1.0.0:
268 | version "1.0.0"
269 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
270 |
271 | glob@^7.1.1:
272 | version "7.1.2"
273 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
274 | dependencies:
275 | fs.realpath "^1.0.0"
276 | inflight "^1.0.4"
277 | inherits "2"
278 | minimatch "^3.0.4"
279 | once "^1.3.0"
280 | path-is-absolute "^1.0.0"
281 |
282 | graceful-fs@^4.1.2, graceful-fs@^4.1.6:
283 | version "4.1.11"
284 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
285 |
286 | graphql-config@2.0.1:
287 | version "2.0.1"
288 | resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.0.1.tgz#d34a9bdf1d7360af7b01db9b20260a342ddc7390"
289 | dependencies:
290 | graphql-import "^0.4.4"
291 | graphql-request "^1.5.0"
292 | js-yaml "^3.10.0"
293 | lodash "^4.17.4"
294 | minimatch "^3.0.4"
295 |
296 | graphql-import@0.4.5, graphql-import@^0.4.4:
297 | version "0.4.5"
298 | resolved "https://registry.yarnpkg.com/graphql-import/-/graphql-import-0.4.5.tgz#e2f18c28d335733f46df8e0733d8deb1c6e2a645"
299 | dependencies:
300 | lodash "^4.17.4"
301 |
302 | graphql-request@^1.5.0:
303 | version "1.5.1"
304 | resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.5.1.tgz#cccdf5cce6432ca062b90f7b63793c77c821ff9a"
305 | dependencies:
306 | cross-fetch "2.0.0"
307 |
308 | graphql-static-binding@0.9.3:
309 | version "0.9.3"
310 | resolved "https://registry.yarnpkg.com/graphql-static-binding/-/graphql-static-binding-0.9.3.tgz#67a51ed2e720edda5a250898af037ebf9dac57cf"
311 | dependencies:
312 | cucumber-html-reporter "^3.0.4"
313 |
314 | graphql@0.13.1:
315 | version "0.13.1"
316 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.1.tgz#9b3db3d8e40d1827e4172404bfdd2e4e17a58b55"
317 | dependencies:
318 | iterall "^1.2.0"
319 |
320 | has-ansi@^2.0.0:
321 | version "2.0.0"
322 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
323 | dependencies:
324 | ansi-regex "^2.0.0"
325 |
326 | has-flag@^2.0.0:
327 | version "2.0.0"
328 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
329 |
330 | has-flag@^3.0.0:
331 | version "3.0.0"
332 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
333 |
334 | inflight@^1.0.4:
335 | version "1.0.6"
336 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
337 | dependencies:
338 | once "^1.3.0"
339 | wrappy "1"
340 |
341 | inherits@2:
342 | version "2.0.3"
343 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
344 |
345 | iterall@^1.2.0:
346 | version "1.2.2"
347 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
348 |
349 | js-base64@^2.3.2:
350 | version "2.4.0"
351 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa"
352 |
353 | js-tokens@^3.0.2:
354 | version "3.0.2"
355 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
356 |
357 | js-yaml@^3.10.0, js-yaml@^3.7.0:
358 | version "3.10.0"
359 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
360 | dependencies:
361 | argparse "^1.0.7"
362 | esprima "^4.0.0"
363 |
364 | jsonfile@^3.0.0:
365 | version "3.0.1"
366 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
367 | optionalDependencies:
368 | graceful-fs "^4.1.6"
369 |
370 | jsonfile@^4.0.0:
371 | version "4.0.0"
372 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
373 | optionalDependencies:
374 | graceful-fs "^4.1.6"
375 |
376 | lodash@4.17.5:
377 | version "4.17.5"
378 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
379 |
380 | lodash@^4.17.2, lodash@^4.17.4:
381 | version "4.17.4"
382 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
383 |
384 | minimatch@^3.0.4:
385 | version "3.0.4"
386 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
387 | dependencies:
388 | brace-expansion "^1.1.7"
389 |
390 | node-fetch@2.0.0:
391 | version "2.0.0"
392 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.0.0.tgz#982bba43ecd4f2922a29cc186a6bbb0bb73fcba6"
393 |
394 | once@^1.3.0:
395 | version "1.4.0"
396 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
397 | dependencies:
398 | wrappy "1"
399 |
400 | open@0.0.5:
401 | version "0.0.5"
402 | resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
403 |
404 | path-is-absolute@^1.0.0:
405 | version "1.0.1"
406 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
407 |
408 | path-parse@^1.0.5:
409 | version "1.0.5"
410 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
411 |
412 | resolve@^1.3.2:
413 | version "1.5.0"
414 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
415 | dependencies:
416 | path-parse "^1.0.5"
417 |
418 | semver@^5.3.0:
419 | version "5.4.1"
420 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
421 |
422 | sprintf-js@~1.0.2:
423 | version "1.0.3"
424 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
425 |
426 | strip-ansi@^3.0.0:
427 | version "3.0.1"
428 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
429 | dependencies:
430 | ansi-regex "^2.0.0"
431 |
432 | supports-color@^2.0.0:
433 | version "2.0.0"
434 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
435 |
436 | supports-color@^4.0.0:
437 | version "4.5.0"
438 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
439 | dependencies:
440 | has-flag "^2.0.0"
441 |
442 | supports-color@^5.2.0:
443 | version "5.2.0"
444 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a"
445 | dependencies:
446 | has-flag "^3.0.0"
447 |
448 | traverse-chain@~0.1.0:
449 | version "0.1.0"
450 | resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1"
451 |
452 | tslib@^1.8.0:
453 | version "1.8.1"
454 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac"
455 |
456 | tslint@5.9.1:
457 | version "5.9.1"
458 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae"
459 | dependencies:
460 | babel-code-frame "^6.22.0"
461 | builtin-modules "^1.1.1"
462 | chalk "^2.3.0"
463 | commander "^2.12.1"
464 | diff "^3.2.0"
465 | glob "^7.1.1"
466 | js-yaml "^3.7.0"
467 | minimatch "^3.0.4"
468 | resolve "^1.3.2"
469 | semver "^5.3.0"
470 | tslib "^1.8.0"
471 | tsutils "^2.12.1"
472 |
473 | tsutils@^2.12.1:
474 | version "2.14.0"
475 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.14.0.tgz#bc5291622aa2448c1baffc544bcc14ecfa528fb7"
476 | dependencies:
477 | tslib "^1.8.0"
478 |
479 | typescript@2.7.2:
480 | version "2.7.2"
481 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836"
482 |
483 | universalify@^0.1.0:
484 | version "0.1.1"
485 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
486 |
487 | whatwg-fetch@2.0.3:
488 | version "2.0.3"
489 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
490 |
491 | wrappy@1:
492 | version "1.0.2"
493 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
494 |
--------------------------------------------------------------------------------