Skip to content

Commit

Permalink
feature: 최초 진입 시 위치정보 공유 요청
Browse files Browse the repository at this point in the history
  • Loading branch information
raymondanythings committed Mar 30, 2023
1 parent f47c921 commit 56a06fe
Show file tree
Hide file tree
Showing 9 changed files with 213 additions and 26 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
"devDependencies": {
"@graphql-codegen/cli": "^3.2.2",
"@graphql-codegen/client-preset": "^2.1.1",
"@graphql-codegen/fragment-matcher": "^4.0.1",
"@graphql-codegen/typescript-apollo-client-helpers": "^2.2.6",
"@graphql-codegen/typescript-operations": "^3.0.2",
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
Expand Down
3 changes: 1 addition & 2 deletions src/GlobalStyle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const GlobalStyle = createGlobalStyle`
html {
font-size: 62.5%; // 1rem = 10px 로 변경
width: 100%;
height: calc(var(--var,1vh) * 100);
max-height: calc(var(--var,1vh) * 100);
}
body {
background-color: #f9f9f9;
Expand Down Expand Up @@ -38,7 +38,6 @@ const GlobalStyle = createGlobalStyle`
word-break: break-word;
tab-size: 4;
}
html,
body,
#root {
height: 100%;
Expand Down
9 changes: 7 additions & 2 deletions src/api/gql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* Therefore it is highly recommended to use the babel or swc plugin for production.
*/
const documents = {
"\n query test {\n places {\n address\n }\n }\n ": types.TestDocument,
"\n fragment PlaceInfo on Place {\n parkingAvailable\n parkingCount\n wheelChairRentable\n elevatorAvailable\n toiletAvailable\n pathExists\n pathDescription\n latitude\n longitude\n etc\n basicInfo\n category\n id\n }\n": types.PlaceInfoFragmentDoc,
"\n query getPlace {\n places {\n ...PlaceInfo\n __typename\n }\n }\n \n": types.GetPlaceDocument,
};

/**
Expand All @@ -33,7 +34,11 @@ export function graphql(source: string): unknown;
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query test {\n places {\n address\n }\n }\n "): (typeof documents)["\n query test {\n places {\n address\n }\n }\n "];
export function graphql(source: "\n fragment PlaceInfo on Place {\n parkingAvailable\n parkingCount\n wheelChairRentable\n elevatorAvailable\n toiletAvailable\n pathExists\n pathDescription\n latitude\n longitude\n etc\n basicInfo\n category\n id\n }\n"): (typeof documents)["\n fragment PlaceInfo on Place {\n parkingAvailable\n parkingCount\n wheelChairRentable\n elevatorAvailable\n toiletAvailable\n pathExists\n pathDescription\n latitude\n longitude\n etc\n basicInfo\n category\n id\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query getPlace {\n places {\n ...PlaceInfo\n __typename\n }\n }\n \n"): (typeof documents)["\n query getPlace {\n places {\n ...PlaceInfo\n __typename\n }\n }\n \n"];

export function graphql(source: string) {
return (documents as any)[source] ?? {};
Expand Down
68 changes: 63 additions & 5 deletions src/api/graphql.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/* eslint-disable */
import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
import { FieldPolicy, FieldReadFunction, TypePolicies, TypePolicy } from '@apollo/client/cache';
export type Maybe<T> = T | null;
export type InputMaybe<T> = Maybe<T>;
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
Expand Down Expand Up @@ -48,13 +49,18 @@ export type Query = {
places: Array<Place>;
};

export type TestQueryVariables = Exact<{ [key: string]: never; }>;
export type PlaceInfoFragment = { __typename?: 'Place', parkingAvailable: boolean, parkingCount: number, wheelChairRentable: boolean, elevatorAvailable: boolean, toiletAvailable: boolean, pathExists: boolean, pathDescription?: string | null, latitude: number, longitude: number, etc?: string | null, basicInfo: string, category: string, id: string } & { ' $fragmentName'?: 'PlaceInfoFragment' };

export type GetPlaceQueryVariables = Exact<{ [key: string]: never; }>;

export type TestQuery = { __typename?: 'Query', places: Array<{ __typename?: 'Place', address: string }> };

export type GetPlaceQuery = { __typename?: 'Query', places: Array<(
{ __typename: 'Place' }
& { ' $fragmentRefs'?: { 'PlaceInfoFragment': PlaceInfoFragment } }
)> };

export const TestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"test"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"places"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"address"}}]}}]}}]} as unknown as DocumentNode<TestQuery, TestQueryVariables>;
export const PlaceInfoFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PlaceInfo"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Place"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"parkingAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"parkingCount"}},{"kind":"Field","name":{"kind":"Name","value":"wheelChairRentable"}},{"kind":"Field","name":{"kind":"Name","value":"elevatorAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"toiletAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"pathExists"}},{"kind":"Field","name":{"kind":"Name","value":"pathDescription"}},{"kind":"Field","name":{"kind":"Name","value":"latitude"}},{"kind":"Field","name":{"kind":"Name","value":"longitude"}},{"kind":"Field","name":{"kind":"Name","value":"etc"}},{"kind":"Field","name":{"kind":"Name","value":"basicInfo"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode<PlaceInfoFragment, unknown>;
export const GetPlaceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getPlace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"places"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PlaceInfo"}},{"kind":"Field","name":{"kind":"Name","value":"__typename"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PlaceInfo"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Place"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"parkingAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"parkingCount"}},{"kind":"Field","name":{"kind":"Name","value":"wheelChairRentable"}},{"kind":"Field","name":{"kind":"Name","value":"elevatorAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"toiletAvailable"}},{"kind":"Field","name":{"kind":"Name","value":"pathExists"}},{"kind":"Field","name":{"kind":"Name","value":"pathDescription"}},{"kind":"Field","name":{"kind":"Name","value":"latitude"}},{"kind":"Field","name":{"kind":"Name","value":"longitude"}},{"kind":"Field","name":{"kind":"Name","value":"etc"}},{"kind":"Field","name":{"kind":"Name","value":"basicInfo"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode<GetPlaceQuery, GetPlaceQueryVariables>;
/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
ID: string;
Expand Down Expand Up @@ -98,7 +104,59 @@ export type Query = {
places: Array<Place>;
};

export type TestQueryVariables = Exact<{ [key: string]: never; }>;
export type PlaceInfoFragment = { __typename?: 'Place', parkingAvailable: boolean, parkingCount: number, wheelChairRentable: boolean, elevatorAvailable: boolean, toiletAvailable: boolean, pathExists: boolean, pathDescription?: string | null, latitude: number, longitude: number, etc?: string | null, basicInfo: string, category: string, id: string } & { ' $fragmentName'?: 'PlaceInfoFragment' };

export type GetPlaceQueryVariables = Exact<{ [key: string]: never; }>;

export type TestQuery = { __typename?: 'Query', places: Array<{ __typename?: 'Place', address: string }> };

export type GetPlaceQuery = { __typename?: 'Query', places: Array<(
{ __typename: 'Place' }
& { ' $fragmentRefs'?: { 'PlaceInfoFragment': PlaceInfoFragment } }
)> };

export type MetadataKeySpecifier = ('id' | 'key' | 'value' | MetadataKeySpecifier)[];
export type MetadataFieldPolicy = {
id?: FieldPolicy<any> | FieldReadFunction<any>,
key?: FieldPolicy<any> | FieldReadFunction<any>,
value?: FieldPolicy<any> | FieldReadFunction<any>
};
export type PlaceKeySpecifier = ('address' | 'basicInfo' | 'category' | 'elevatorAvailable' | 'etc' | 'id' | 'images' | 'latitude' | 'longitude' | 'metadata' | 'name' | 'parkingAvailable' | 'parkingCount' | 'pathDescription' | 'pathExists' | 'thumbnails' | 'toiletAvailable' | 'wheelChairRentable' | PlaceKeySpecifier)[];
export type PlaceFieldPolicy = {
address?: FieldPolicy<any> | FieldReadFunction<any>,
basicInfo?: FieldPolicy<any> | FieldReadFunction<any>,
category?: FieldPolicy<any> | FieldReadFunction<any>,
elevatorAvailable?: FieldPolicy<any> | FieldReadFunction<any>,
etc?: FieldPolicy<any> | FieldReadFunction<any>,
id?: FieldPolicy<any> | FieldReadFunction<any>,
images?: FieldPolicy<any> | FieldReadFunction<any>,
latitude?: FieldPolicy<any> | FieldReadFunction<any>,
longitude?: FieldPolicy<any> | FieldReadFunction<any>,
metadata?: FieldPolicy<any> | FieldReadFunction<any>,
name?: FieldPolicy<any> | FieldReadFunction<any>,
parkingAvailable?: FieldPolicy<any> | FieldReadFunction<any>,
parkingCount?: FieldPolicy<any> | FieldReadFunction<any>,
pathDescription?: FieldPolicy<any> | FieldReadFunction<any>,
pathExists?: FieldPolicy<any> | FieldReadFunction<any>,
thumbnails?: FieldPolicy<any> | FieldReadFunction<any>,
toiletAvailable?: FieldPolicy<any> | FieldReadFunction<any>,
wheelChairRentable?: FieldPolicy<any> | FieldReadFunction<any>
};
export type QueryKeySpecifier = ('places' | QueryKeySpecifier)[];
export type QueryFieldPolicy = {
places?: FieldPolicy<any> | FieldReadFunction<any>
};
export type StrictTypedTypePolicies = {
Metadata?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | MetadataKeySpecifier | (() => undefined | MetadataKeySpecifier),
fields?: MetadataFieldPolicy,
},
Place?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | PlaceKeySpecifier | (() => undefined | PlaceKeySpecifier),
fields?: PlaceFieldPolicy,
},
Query?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | QueryKeySpecifier | (() => undefined | QueryKeySpecifier),
fields?: QueryFieldPolicy,
}
};
export type TypedTypePolicies = StrictTypedTypePolicies & TypePolicies;
4 changes: 2 additions & 2 deletions src/codegen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import type { CodegenConfig } from '@graphql-codegen/cli'
const config: CodegenConfig = {
overwrite: true,
schema: 'http://k8s-uhdregam-alb-9c0f3da497-731869144.ap-northeast-2.elb.amazonaws.com/graphql',
documents: ['src/**/*.tsx'],
documents: ['src/**/*.tsx', 'src/fragments.ts'],
ignoreNoDocuments: true,
generates: {
'./src/api/': {
plugins: ['typescript', 'typescript-operations'],
plugins: ['typescript', 'typescript-operations', 'typescript-apollo-client-helpers'],
preset: 'client',
},
},
Expand Down
19 changes: 19 additions & 0 deletions src/fragments.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { gql } from '@apollo/client'

export const placeInfoFragment = gql`
fragment PlaceInfo on Place {
parkingAvailable
parkingCount
wheelChairRentable
elevatorAvailable
toiletAvailable
pathExists
pathDescription
latitude
longitude
etc
basicInfo
category
id
}
`
55 changes: 40 additions & 15 deletions src/layout/Default.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,60 @@ import { Outlet } from 'react-router-dom'
import styled from 'styled-components'
import { ReactComponent as Baby } from 'assets/baby.svg'
import store from 'store/index'
import { useQuery } from '@apollo/client'
import { graphql } from 'api/gql'
import { TestQuery } from 'api/graphql'
import { gql, useQuery } from '@apollo/client'

const q = graphql(
/** Graph QL */
`
query test {
places {
address
}
import { GetPlaceQuery } from 'api/graphql'
import { placeInfoFragment } from '../fragments'

const q = gql`
query getPlace {
places {
...PlaceInfo
__typename
}
`,
)
}
${placeInfoFragment}
`

const Default = () => {
const { data } = useQuery<TestQuery>(q)
const { data } = useQuery<GetPlaceQuery>(q)
const setPosition = store((state) => state.setPosition)
const po = store((state) => state.position)
const isMobile = store((state) => state.isMobile)
function setScreenSize() {
const setScreenSize = () => {
let vh = window.innerHeight * 0.01
document.documentElement.style.setProperty('--vh', `${vh}px`)
}

setScreenSize()
const cleanUp = (watchId: number) => {
window.removeEventListener('resize', setScreenSize)
window.navigator.geolocation.clearWatch(watchId)
}
useEffect(() => {
window.addEventListener('resize', setScreenSize)

const watchId = window.navigator.geolocation.watchPosition(
(position) => {
setPosition(position)
},
(error) => {
console.error(error, 'watchPositon error')
},
{
enableHighAccuracy: false,
maximumAge: 1000 * 60,
},
)

if (!isMobile) {
document.body.style.backgroundColor = '#f4b03e'
}
return () => window.removeEventListener('resize', setScreenSize)
return () => {
cleanUp(watchId)
}
}, [])

// return isMobile ? (
// <Main>
// <Outlet />
Expand Down
4 changes: 4 additions & 0 deletions src/store/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ import { persist, createJSONStorage } from 'zustand/middleware'
interface IStore {
isMobile: boolean
toggle: boolean
position?: GeolocationPosition | null
setToggle: () => void
setPosition: (p: GeolocationPosition) => void
}

const store = create<IStore>()(
persist(
(set) => ({
isMobile: getIsMobile(),
toggle: true,
position: null,
setPosition: (position: GeolocationPosition) => set((state) => ({ ...state, position })),
setToggle: () => {
set((state) => ({ ...state, toggle: !state.toggle }))
},
Expand Down
75 changes: 75 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -788,6 +788,14 @@
"@graphql-tools/utils" "^9.1.1"
tslib "~2.5.0"

"@graphql-codegen/fragment-matcher@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@graphql-codegen/fragment-matcher/-/fragment-matcher-4.0.1.tgz#56f53759f1c1428e60eca18bdbda071fd8b858f5"
integrity sha512-m1jjCBppB+QXupYu8eVM1BZM36APPArHEVB8R0v29Vj2Kz/35+pe682PyQaf7iyxTkemW759h2KIvWFtXdLCJQ==
dependencies:
"@graphql-codegen/plugin-helpers" "^4.1.0"
tslib "~2.5.0"

"@graphql-codegen/[email protected]":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-2.0.2.tgz#6fb693ede76d9ac67c1d7755aa0fc01c42b2be82"
Expand All @@ -799,6 +807,18 @@
auto-bind "~4.0.0"
tslib "~2.5.0"

"@graphql-codegen/plugin-helpers@^2.7.2":
version "2.7.2"
resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.2.tgz#6544f739d725441c826a8af6a49519f588ff9bed"
integrity sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==
dependencies:
"@graphql-tools/utils" "^8.8.0"
change-case-all "1.0.14"
common-tags "1.8.2"
import-from "4.0.0"
lodash "~4.17.0"
tslib "~2.4.0"

"@graphql-codegen/plugin-helpers@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-4.1.0.tgz#4b193c12d6bb458f1f2af48c200bc86617884f60"
Expand Down Expand Up @@ -831,6 +851,17 @@
change-case-all "1.0.15"
tslib "~2.5.0"

"@graphql-codegen/typescript-apollo-client-helpers@^2.2.6":
version "2.2.6"
resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-apollo-client-helpers/-/typescript-apollo-client-helpers-2.2.6.tgz#a5a7595fe426bbede4a3946dcac564280c6b641b"
integrity sha512-WEWtjg2D/Clmep7fflKmt6o70rZj/Mqf4ywIO5jF/PI91OHpKhLFM2aWm1ythkqALwQ6wJIFlAjdYqz/EOVYdQ==
dependencies:
"@graphql-codegen/plugin-helpers" "^2.7.2"
"@graphql-codegen/visitor-plugin-common" "2.13.1"
auto-bind "~4.0.0"
change-case-all "1.0.14"
tslib "~2.4.0"

"@graphql-codegen/typescript-operations@^3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-3.0.2.tgz#41793f996b3f89f4fc348bce6ee509aefb2e4515"
Expand All @@ -853,6 +884,22 @@
auto-bind "~4.0.0"
tslib "~2.5.0"

"@graphql-codegen/[email protected]":
version "2.13.1"
resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.13.1.tgz#2228660f6692bcdb96b1f6d91a0661624266b76b"
integrity sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==
dependencies:
"@graphql-codegen/plugin-helpers" "^2.7.2"
"@graphql-tools/optimize" "^1.3.0"
"@graphql-tools/relay-operation-optimizer" "^6.5.0"
"@graphql-tools/utils" "^8.8.0"
auto-bind "~4.0.0"
change-case-all "1.0.14"
dependency-graph "^0.11.0"
graphql-tag "^2.11.0"
parse-filepath "^1.0.2"
tslib "~2.4.0"

"@graphql-codegen/[email protected]", "@graphql-codegen/visitor-plugin-common@^3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-3.0.2.tgz#784c0faaa7e0773072ea5de464fdcae8d7765564"
Expand Down Expand Up @@ -1130,6 +1177,13 @@
"@graphql-typed-document-node/core" "^3.1.1"
tslib "^2.4.0"

"@graphql-tools/utils@^8.8.0":
version "8.13.1"
resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.13.1.tgz#b247607e400365c2cd87ff54654d4ad25a7ac491"
integrity sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==
dependencies:
tslib "^2.4.0"

"@graphql-tools/wrap@^9.3.8":
version "9.3.8"
resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.3.8.tgz#c6f53b7bc98cf3fa3d91e41be3b99254ae99b409"
Expand Down Expand Up @@ -1788,6 +1842,22 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
ansi-styles "^4.1.0"
supports-color "^7.1.0"

[email protected]:
version "1.0.14"
resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.14.tgz#bac04da08ad143278d0ac3dda7eccd39280bfba1"
integrity sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==
dependencies:
change-case "^4.1.2"
is-lower-case "^2.0.2"
is-upper-case "^2.0.2"
lower-case "^2.0.2"
lower-case-first "^2.0.2"
sponge-case "^1.0.1"
swap-case "^2.0.2"
title-case "^3.0.3"
upper-case "^2.0.2"
upper-case-first "^2.0.2"

[email protected]:
version "1.0.15"
resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.15.tgz#de29393167fc101d646cd76b0ef23e27d09756ad"
Expand Down Expand Up @@ -3771,6 +3841,11 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==

tslib@~2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==

type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
Expand Down

0 comments on commit 56a06fe

Please sign in to comment.