diff --git a/README.md b/README.md index 58ece70..a486a0a 100644 --- a/README.md +++ b/README.md @@ -126,17 +126,47 @@ For more details, see [live examples]. ## Options -| Name | Data type | Default value | Description | -| ------------------ | ------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `header` | `boolean` | `true` | Whether to show header or not. | -| `source` | `boolean` | `true` | Whether to show source(usage) or not. | -| `wrapperComponent` | `Component` | [default wrapper](src/components/Wrapper/index.vue) | Override inline docs component. | -| `previewClassName` | `string` | `undefined` | Class name passed down to preview container. | -| `previewStyle` | Style object | `undefined` | Style passed down to preview container. | -| `summary` | `string` | `''` | Summary for the story. Accepts Markdown. | -| `components` | `{ [name: string]: Component }\|null` | `null` | Display info for these components. Same type as component's `components` property. | -| `docsInPanel` | `boolean` | `true` | Whether to show docs in addon panel. | -| `useDocgen` | `boolean` | `true` | Whether to use result of vue-docgen-api. | +| Name | Data type | Default value | Description | +| ------------------ | --------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `header` | `boolean` | `true` | Whether to show header or not. | +| `source` | `boolean` | `true` | Whether to show source(usage) or not. | +| `wrapperComponent` | `Component` | [default wrapper](src/components/Wrapper/index.vue) | Override inline docs component. | +| `previewClassName` | `string` | `undefined` | Class name passed down to preview container. | +| `previewStyle` | Style object | `undefined` | Style passed down to preview container. | +| `summary` | `string` | `''` | Summary for the story. Accepts Markdown. | +| `components` | `{ [name: string]: Component }\|null` | `null` | Display info for these components. Same type as component's `components` property. | +| `docsInPanel` | `boolean` | `true` | Whether to show docs in addon panel. | +| `useDocgen` | `boolean` | `true` | Whether to use result of vue-docgen-api. | +| `casing` | `"kebab" \| "camel" \| "pascal" \| undefined` | `undefined` | Which case to use. For detailed usage, see below. | + +### Valid `casing` options + +```js +{ + // Don't convert names + casing: undefined +} + +{ + // Show names in kebab-case + casing 'kebab' +} + +{ + // Show prop names in camelCase and + // Show component names in PascalCase + casing: 'camel' // or 'pascal' +} + +{ + // Show prop names in camelCase and + // Show component names in kebab-case + casing: { + props: 'camel', + component: 'kebab' + } +} +``` In addition to addon options, we have a component option. diff --git a/example/.storybook/config.js b/example/.storybook/config.js index c72f5e7..f64b5cc 100644 --- a/example/.storybook/config.js +++ b/example/.storybook/config.js @@ -13,10 +13,4 @@ Vue.use(VueI18n) addDecorator(withInfo) -const req = require.context('../stories', true, /\.stories\.js$/) - -function loadStories() { - req.keys().forEach(req) -} - -configure(loadStories, module) +configure(require.context('../stories', true, /\.stories\.js$/), module) diff --git a/example/stories/issues/122/camel.vue b/example/stories/issues/122/camel.vue new file mode 100644 index 0000000..4d1fbe6 --- /dev/null +++ b/example/stories/issues/122/camel.vue @@ -0,0 +1,14 @@ + + + diff --git a/example/stories/issues/122/index.stories.js b/example/stories/issues/122/index.stories.js new file mode 100644 index 0000000..a0c6c85 --- /dev/null +++ b/example/stories/issues/122/index.stories.js @@ -0,0 +1,80 @@ +import CamelComponent from './camel.vue' +import KebabComponent from './kebab.vue' +import MixedComponent from './mixed.vue' + +export default { + title: 'Issues/#122' +} + +export const camelToKebab = () => { + return { + components: { CamelComponent }, + template: '' + } +} +camelToKebab.story = { + title: 'Convert camelCase to kebab-case', + parameters: { + info: { + casing: 'kebab' + } + } +} + +export const kebabToCamel = () => { + return { + components: { KebabComponent }, + template: '' + } +} +kebabToCamel.story = { + title: 'Convert kebab-case to camelCase', + parameters: { + info: { + casing: 'camel' + } + } +} + +export const mixedToKebab = () => { + return { + components: { MixedComponent }, + template: '' + } +} +mixedToKebab.story = { + title: 'Convert to kebab-case (mixed)', + parameters: { + info: { + casing: 'kebab' + } + } +} + +export const mixedToCamel = () => { + return { + components: { MixedComponent }, + template: '' + } +} +mixedToCamel.story = { + title: 'Convert to camelCase (mixed)', + parameters: { + info: { + casing: 'camel' + } + } +} + +export const preserve = () => { + return { + components: { MixedComponent }, + template: '' + } +} +preserve.story = { + title: 'Preserve casing when undefined', + parameters: { + info: {} + } +} diff --git a/example/stories/issues/122/kebab.vue b/example/stories/issues/122/kebab.vue new file mode 100644 index 0000000..5193fc9 --- /dev/null +++ b/example/stories/issues/122/kebab.vue @@ -0,0 +1,14 @@ + + + diff --git a/example/stories/issues/122/mixed.vue b/example/stories/issues/122/mixed.vue new file mode 100644 index 0000000..627c69d --- /dev/null +++ b/example/stories/issues/122/mixed.vue @@ -0,0 +1,18 @@ + + + diff --git a/package.json b/package.json index 1f3e0b3..9e2ea6b 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ ] }, "dependencies": { + "change-case": "^4.1.0", "clone": "^2.1.2", "dedent-tabs": "^0.8.0", "highlight.js": "^9.12.0", diff --git a/rollup.config.js b/rollup.config.js index bfcb146..bed09ca 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -38,6 +38,7 @@ const commonConfig = { }) ], external: [ + 'change-case', 'vue', 'dedent', 'marked', diff --git a/src/components/Component/index.vue b/src/components/Component/index.vue index 34f6c78..1da7247 100644 --- a/src/components/Component/index.vue +++ b/src/components/Component/index.vue @@ -1,4 +1,5 @@ @@ -51,7 +65,12 @@ export default { :lang="info.jsxStory ? 'jsx' : 'html'" /> - + diff --git a/src/extract/decideTargets.ts b/src/extract/decideTargets.ts index 749a8bf..ff9d70c 100644 --- a/src/extract/decideTargets.ts +++ b/src/extract/decideTargets.ts @@ -1,9 +1,9 @@ -import Vue, { AsyncComponent, Component, ComponentOptions } from 'vue' +import { paramCase } from 'change-case' +import Vue, { ComponentOptions } from 'vue' import { InfoAddonOptions } from '../options' import { ComponentRegistory } from '../types/vue' import * as getTagNames from '../utils/getTagNames' -import { hyphenate } from '../utils/hyphenate' import { lookupGlobalComponent, LookupResult } from './lookup' @@ -29,7 +29,7 @@ export function decideTargets( } const tagNames = story.template - ? getTagNames.fromTemplate(story.template).map(hyphenate) + ? getTagNames.fromTemplate(story.template).map(s => paramCase(s)) : getTagNames.fromJSX(story.render!) const components = tagNames diff --git a/src/extract/index.ts b/src/extract/index.ts index a158f01..be70fef 100644 --- a/src/extract/index.ts +++ b/src/extract/index.ts @@ -1,3 +1,4 @@ +import { paramCase } from 'change-case' import dedent from 'dedent-tabs' import hljs from 'highlight.js' import marked from 'marked' @@ -5,9 +6,7 @@ import Vue, { ComponentOptions } from 'vue' import { InfoAddonOptions } from '../options' import { ComponentInfo, StoryInfo } from '../types/info' -import { AnyComponent } from '../types/vue' import { getJSXFromRenderFn } from '../utils/getJSXFromRenderFn' -import { hyphenate } from '../utils/hyphenate' import { decideTargets } from './decideTargets' import { extractDocgenInfo } from './extractDocgenInfo' @@ -26,7 +25,7 @@ export function extract( const components = Object.keys(targets).map(name => { const component = targets[name] - const kebabName = hyphenate(name) + const kebabName = paramCase(name) const propDescriptions = (descriptions[kebabName] && descriptions[kebabName].props) || {} @@ -143,7 +142,7 @@ const getDescriptionsFromStory = (story: any): Descriptions | null => { const ret: Descriptions = {} for (const component of Object.keys(story.description)) { - ret[hyphenate(component)] = story.description[component] + ret[paramCase(component)] = story.description[component] } return ret @@ -161,7 +160,7 @@ const formatPropsDescription = (story: any): Descriptions => { const components: Descriptions = {} for (const component of Object.keys(story.propsDescription)) { - components[hyphenate(component)] = { + components[paramCase(component)] = { props: story.propsDescription[component] } } diff --git a/src/extract/lookup.ts b/src/extract/lookup.ts index 424d706..8f897c5 100644 --- a/src/extract/lookup.ts +++ b/src/extract/lookup.ts @@ -1,7 +1,6 @@ +import { paramCase } from 'change-case' import Vue from 'vue' -import hyphenate from '../utils/hyphenate' - import { AnyComponent } from '../types/vue' export interface LookupResult { @@ -15,7 +14,7 @@ export interface LookupResult { */ export function lookupGlobalComponent(name: string): LookupResult | null { for (const componentName in (Vue as any).options.components) { - if (hyphenate(componentName) === name) { + if (paramCase(componentName) === name) { const target = (Vue as any).options.components[componentName] return { diff --git a/src/options.ts b/src/options.ts index 9864d70..6b3f3a9 100644 --- a/src/options.ts +++ b/src/options.ts @@ -9,9 +9,19 @@ export const defaultOptions: InfoAddonOptions = { components: null, wrapperComponent: DefaultWrapper, docsInPanel: true, - useDocgen: true + useDocgen: true, + casing: undefined } +type Casing = + | undefined + | 'camel' + | 'camelCase' + | 'kebab' + | 'kebab-case' + | 'pascal' + | 'PascalCase' + /** * Addon options */ @@ -53,4 +63,11 @@ export interface InfoAddonOptions { * Whether to use component infomation generated by vue-docgen-api */ useDocgen: boolean + + casing: + | Casing + | { + props: Casing + component: Casing + } } diff --git a/src/utils/hyphenate.spec.ts b/src/utils/hyphenate.spec.ts deleted file mode 100644 index 3f467d8..0000000 --- a/src/utils/hyphenate.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import hyphenate from './hyphenate' - -it('Turns PascalCase into kebab-case', () => { - expect(hyphenate('FooBar')).toBe('foo-bar') - - expect(hyphenate('FOOBAR')).toBe('f-o-o-b-a-r') - - expect(hyphenate('Foobar')).toBe('foobar') -}) diff --git a/src/utils/hyphenate.ts b/src/utils/hyphenate.ts deleted file mode 100644 index a66f81d..0000000 --- a/src/utils/hyphenate.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Convert string to kebab-case - */ -export function hyphenate(input: string): string { - return input.replace(/\B([A-Z])/g, '-$1').toLowerCase() -} - -export default hyphenate diff --git a/yarn.lock b/yarn.lock index f403cc2..b86ddbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2634,6 +2634,14 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" +camel-case@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.0.tgz#bdfcea5134eb8dc928e13c1ee84fd5635ba65e25" + integrity sha512-vmHTVppun53Le+K8wHxA0f4oI192u2i6eL9qHrqByibpxRbdkvI1o1fAA6ozxpLGEnsDS3MBjPJAi7ArJU9ZDg== + dependencies: + pascal-case "^3.1.0" + tslib "^1.10.0" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -2664,6 +2672,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000957, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz#a5039577806fccee80a04aaafb2c0890b1ee2f73" integrity sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ== +capital-case@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.2.tgz#d82a7b3430c521ce700b397bd21b979843a731db" + integrity sha512-7dF2q6pv+qqMkFG+AS0c6/UnYAL5ldR2rUbjKoJrHz9S0bn14jOLIpXxwabIeyakcRWNeGguWzNxJRPAGe4lFA== + dependencies: + no-case "^3.0.2" + tslib "^1.10.0" + upper-case-first "^2.0.1" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2709,6 +2726,24 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +change-case@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.0.tgz#3db027d8655ee11b0eaf2adf14c1c9449572a857" + integrity sha512-jz4NjT8d6J9ggFuGHJ860Trta1IXjtnG+T3HGKdN/9ihDefiN241SQhJlD/fbNdiH4YUwPAp00X030vqc/LRcw== + dependencies: + camel-case "^4.1.0" + capital-case "^1.0.2" + constant-case "^3.0.2" + dot-case "^3.0.2" + header-case "^2.0.2" + no-case "^3.0.2" + param-case "^3.0.2" + pascal-case "^3.1.0" + path-case "^3.0.2" + sentence-case "^3.0.2" + snake-case "^3.0.2" + tslib "^1.10.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -3046,6 +3081,15 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" +constant-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.2.tgz#e05225ae43e872b208b72de655bcb88143db3ec2" + integrity sha512-VxthHv7/VKSXl9kToCoulqM5hH6KpLdAdBCRMFj1SzaHTHMZkQYbRlMwEiLHYJfMN7xE8UiUtyBAJjPXOtbjjA== + dependencies: + no-case "^3.0.2" + tslib "^1.10.0" + upper-case "^2.0.1" + constantinople@^3.0.1: version "3.1.2" resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" @@ -3735,6 +3779,14 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +dot-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.2.tgz#6758d86d3e7b69adc0fcfad23a845676c329f7d9" + integrity sha512-z3vMZEW2o3btKlM9I6FQF0pIWTzBuW+udrAaJr+A6JA3+p62ADZjeFthKxqxKHZlUxQmkKeEWvaKLJdwpc5u6g== + dependencies: + no-case "^3.0.2" + tslib "^1.10.0" + dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -4875,6 +4927,14 @@ he@1.2.x, he@^1.1.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.2.tgz#0e4105f6a2489afdf40cfb65c6b24728d1d02ab2" + integrity sha512-DkrKDkNEXG3ZC3urlbt+O9j9qbwFvJwDB1PSKBQqZLVbh2wr7PKpfjGWo/Dw9cpG1IqZM6QTsnVsB3FwdCuEkg== + dependencies: + capital-case "^1.0.2" + tslib "^1.10.0" + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -6376,6 +6436,13 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + lowlight@~1.9.1: version "1.9.2" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" @@ -6786,6 +6853,14 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +no-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.2.tgz#2b03928510318591854c0423e504d13b21234263" + integrity sha512-Yber3mEOA3T9+as7Z70TJUQCUPRmmq6s8NmsZX5aSB1qk+Mt+3a5JVPpnAnONUShLTkMDF4PJY3h0GKlXdRTNA== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -7237,6 +7312,14 @@ param-case@2.1.x: dependencies: no-case "^2.2.0" +param-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.2.tgz#2518860c89ef22add388c7293c26e48c4fe90c62" + integrity sha512-9UF3HbbJwzBVJlFFOvfBpWUpGFMX01q3dKavdRyv+71HI3GO4UTQIiuG51pckuqPlHzx1jmUijim8J282goaLg== + dependencies: + dot-case "^3.0.2" + tslib "^1.10.0" + parse-asn1@^5.0.0: version "5.1.4" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" @@ -7279,6 +7362,14 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.0.tgz#b3cc1273a957ceb0c37c029d2580ed59f585e4df" + integrity sha512-7cINxTsRAFym4dLVMdObWx2wr/FjVz8BfCdLPC069kAFLal/5dZhxObpAIM40GwZ/Xik1J37z+Nw6/TVy5fmIg== + dependencies: + no-case "^3.0.2" + tslib "^1.10.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -7289,6 +7380,14 @@ path-browserify@0.0.0: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= +path-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.2.tgz#ea7cf681e33e4fa5a8ec31ea91e5f02e22544ecc" + integrity sha512-vTXKSmzkegC4tBZTogrHleuSEhdMgtY3+vxqN0wFM8TmVs8+0xy+oh1+07SuxYzDlXl/FO8jwEtRfAQ7G+jxCg== + dependencies: + dot-case "^3.0.2" + tslib "^1.10.0" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -9095,6 +9194,15 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" +sentence-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.2.tgz#c0274245ea0eeb9cce54268101ffbd7b98277b08" + integrity sha512-15UhaONq0mYjSpFHbrO2VoPjzy/3mo8nAy8/2rr32IjsUg4hCeapON4aS84YEtOL5SOccaAaopThdSPCnndFFQ== + dependencies: + no-case "^3.0.2" + tslib "^1.10.0" + upper-case-first "^2.0.1" + serialize-javascript@^1.4.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" @@ -9244,6 +9352,14 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +snake-case@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.2.tgz#2cc0eacf4edaab998f21af579b5a72b0766f91dd" + integrity sha512-1fRJdasXJTcsrGnUkDsnKNjHoP9NGclbIkYyY6Vv0vBVgz32rqhPFPg/Y0yIP4hwOd41Dh8rocCRHjNIuK4EZg== + dependencies: + dot-case "^3.0.2" + tslib "^1.10.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -9939,6 +10055,11 @@ tslib@1.9.3, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + tslint-config-prettier@^1.13.0: version "1.18.0" resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" @@ -10138,11 +10259,25 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== +upper-case-first@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.1.tgz#32ab436747d891cc20ab1e43d601cb4d0a7fbf4a" + integrity sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w== + dependencies: + tslib "^1.10.0" + upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= +upper-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" + integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== + dependencies: + tslib "^1.10.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"