From 03f0f622cf2ee660e3bb783351ef7d361d469d12 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 00:33:37 +0100
Subject: [PATCH 01/18] fix: a lot of stuff related to prettier auto formatting

---
 .eslintrc.js                              |    6 +-
 package.json                              |    2 +-
 src/helpers.ts                            |  158 --
 src/helpers/extensionConfig.ts            |   19 +
 src/helpers/formatters.ts                 |   22 +
 src/{ => helpers}/generateSnippets.ts     |   49 +-
 src/helpers/getPrettierConfig.ts          |   23 +
 src/helpers/parseSnippetToBody.ts         |   56 +
 src/helpers/replaceOrRemoveReactImport.ts |   16 +
 src/helpers/revertSnippetPlaceholders.ts  |    0
 src/helpers/snippetPlaceholders.ts        |   45 +
 src/{ => helpers}/snippetSearch.ts        |    5 +-
 src/index.ts                              |    4 +-
 src/snippets/generated.json               | 1888 +--------------------
 src/sourceSnippets/imports.ts             |   32 +-
 src/sourceSnippets/others.ts              |   84 +-
 src/sourceSnippets/reactNative.ts         |   23 +-
 src/sourceSnippets/redux.ts               |    4 +-
 src/sourceSnippets/sharedSnippets.ts      |   25 +-
 src/sourceSnippets/tests.ts               |    9 -
 src/sourceSnippets/typescript.ts          |   11 +-
 tsconfig.json                             |    5 -
 22 files changed, 279 insertions(+), 2207 deletions(-)
 delete mode 100644 src/helpers.ts
 create mode 100644 src/helpers/extensionConfig.ts
 create mode 100644 src/helpers/formatters.ts
 rename src/{ => helpers}/generateSnippets.ts (59%)
 create mode 100644 src/helpers/getPrettierConfig.ts
 create mode 100644 src/helpers/parseSnippetToBody.ts
 create mode 100644 src/helpers/replaceOrRemoveReactImport.ts
 create mode 100644 src/helpers/revertSnippetPlaceholders.ts
 create mode 100644 src/helpers/snippetPlaceholders.ts
 rename src/{ => helpers}/snippetSearch.ts (89%)

diff --git a/.eslintrc.js b/.eslintrc.js
index 9ad9f12..10b3143 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -125,10 +125,7 @@ module.exports = {
 
     'import/no-unresolved': [
       'error',
-      {
-        caseSensitive: false,
-        ignore: ['vscode'],
-      },
+      { caseSensitive: false, ignore: ['vscode'] },
     ],
     'prettier/prettier': [
       'error',
@@ -203,7 +200,6 @@ module.exports = {
         '@typescript-eslint/prefer-optional-chain': 'error',
         '@typescript-eslint/triple-slash-reference': 'error',
         '@typescript-eslint/unified-signatures': 'error',
-
         'default-case': 'off',
         'no-dupe-class-members': 'off',
         'no-undef': 'off',
diff --git a/package.json b/package.json
index 4892d71..904f013 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
         "reactSnippets.settings.semiColons": {
           "type": "boolean",
           "markdownDescription": "Controls if snippets should use semi colons.\nOnly applies when `#reactSnippets.settings.prettierEnabled#` is disabled",
-          "default": true
+          "default": false
         },
         "reactSnippets.settings.singleQuote": {
           "type": "boolean",
diff --git a/src/helpers.ts b/src/helpers.ts
deleted file mode 100644
index cb55ac9..0000000
--- a/src/helpers.ts
+++ /dev/null
@@ -1,158 +0,0 @@
-import prettier, { Options } from 'prettier';
-import { workspace } from 'vscode';
-
-import { Snippet } from './generateSnippets';
-import { Mappings, Placeholders } from './types';
-
-export type ExtensionSettings = {
-  languageScopes: string;
-  prettierEnabled: boolean;
-  semiColons: boolean;
-  importReactOnTop: boolean;
-  singleQuote: boolean;
-  typescript: boolean;
-  tabWidth: number;
-  typescriptPropsStatePrefix: 'type' | 'interface';
-};
-
-let prettierConfig: prettier.Options | null;
-prettier
-  .resolveConfig('', { editorconfig: true })
-  .then((config) => (prettierConfig = config));
-
-export const extensionConfig = () =>
-  workspace.getConfiguration(
-    'reactSnippets.settings',
-  ) as unknown as ExtensionSettings;
-
-const getPrettierConfig = (): Options => {
-  const { semiColons, singleQuote, tabWidth, prettierEnabled } =
-    extensionConfig();
-
-  return {
-    parser: 'typescript',
-    semi: semiColons,
-    singleQuote,
-    tabWidth,
-    ...(prettierEnabled && prettierConfig),
-  };
-};
-
-const formatSnippet = (string: string) => {
-  const prettierConfig = getPrettierConfig();
-  return prettier.format(string, prettierConfig);
-};
-
-export const replaceSnippetPlaceholders = (snippetString: string) => {
-  const { typescriptPropsStatePrefix } = extensionConfig();
-  const propsPlaceholder =
-    typescriptPropsStatePrefix === 'type'
-      ? Mappings.TypeProps
-      : Mappings.InterfaceProps;
-  const statePlaceholder =
-    typescriptPropsStatePrefix === 'type'
-      ? Mappings.TypeState
-      : Mappings.InterfaceState;
-
-  return String(snippetString)
-    .replace(new RegExp(Placeholders.FileName, 'g'), '${1:${TM_FILENAME_BASE}}')
-    .replace(new RegExp(Placeholders.FirstTab, 'g'), '${1:first}')
-    .replace(new RegExp(Placeholders.SecondTab, 'g'), '${2:second}')
-    .replace(new RegExp(Placeholders.ThirdTab, 'g'), '${3:third}')
-    .replace(new RegExp(Placeholders.LastTab, 'g'), '$0')
-    .replace(
-      new RegExp(Placeholders.Capitalize, 'g'),
-      '${1/(.*)/${1:/capitalize}/}',
-    )
-    .replace(new RegExp(Placeholders.TypeProps, 'g'), propsPlaceholder)
-    .replace(new RegExp(Placeholders.TypeState, 'g'), statePlaceholder);
-};
-
-export const revertSnippetPlaceholders = (snippetString: string) => {
-  return String(snippetString)
-    .replace(
-      new RegExp(/\${1:\${TM_FILENAME_BASE}}/, 'g'),
-      Placeholders.FileName,
-    )
-    .replace(new RegExp(/\${1:first}/, 'g'), Placeholders.FirstTab)
-    .replace(new RegExp(/\${2:second}/, 'g'), Placeholders.SecondTab)
-    .replace(new RegExp(/\${3:third}/, 'g'), Placeholders.ThirdTab)
-    .replace(new RegExp(/\$0/, 'g'), Placeholders.LastTab)
-    .replace(
-      new RegExp(/\${1\/(.*)\/${1:\/capitalize}\/}/, 'g'),
-      Placeholders.Capitalize,
-    );
-};
-
-export const parseSnippet = (body: string | string[]) => {
-  const snippetBody = typeof body === 'string' ? body : body.join('\n');
-
-  return replaceSnippetPlaceholders(
-    formatSnippet(revertSnippetPlaceholders(snippetBody)),
-  );
-};
-
-// This is array of prefixes which are currently skipped because of syntax format issues
-const skippedSnippets = [
-  'pge',
-  'pse',
-  'gdsfp',
-  'gsbu',
-  'scu',
-  'cwun',
-  'cdm',
-  'cdup',
-  'rconst',
-];
-
-const withReactImport = [
-  'rfce',
-  'rfc',
-  'rfcp',
-  'rafce',
-  'rafc',
-  'rafcp',
-  'rnfe',
-  'rnfes',
-  'rnf',
-  'rnfs',
-  'stest',
-  'sntest',
-  'srtest',
-  'snrtest',
-  'hocredux',
-  'hoc',
-];
-
-const replaceOrRemoveReactImport = (snippetBody: string[]) => {
-  const reactImportIndex = snippetBody.findIndex((line) =>
-    line.match(new RegExp(/import React/, 'g')),
-  );
-
-  if (reactImportIndex !== -1) {
-    const line = snippetBody[reactImportIndex];
-    snippetBody[reactImportIndex] = line
-      .replace(new RegExp(/^import React .*$/, 'g'), '')
-      .replace(new RegExp(/^import React, /, 'g'), 'import ');
-  }
-
-  return snippetBody.join('\n');
-};
-
-export const parseSnippetToBody = (snippet: Snippet) => {
-  const { importReactOnTop } = extensionConfig();
-  const body =
-    typeof snippet.body === 'string' ? snippet.body : snippet.body.join('\n');
-
-  const snippetBody = importReactOnTop
-    ? body
-    : withReactImport.includes(snippet.prefix)
-    ? replaceOrRemoveReactImport(snippet.body)
-    : body;
-
-  const formattedSnippet = skippedSnippets.includes(snippet.prefix)
-    ? snippetBody
-    : formatSnippet(snippetBody).split('\n');
-
-  return snippet.body.length === 1 ? formattedSnippet[0] : formattedSnippet;
-};
diff --git a/src/helpers/extensionConfig.ts b/src/helpers/extensionConfig.ts
new file mode 100644
index 0000000..96d0a67
--- /dev/null
+++ b/src/helpers/extensionConfig.ts
@@ -0,0 +1,19 @@
+import { workspace } from 'vscode';
+
+export type ExtensionSettings = {
+  languageScopes: string;
+  prettierEnabled: boolean;
+  semiColons: boolean;
+  importReactOnTop: boolean;
+  singleQuote: boolean;
+  typescript: boolean;
+  tabWidth: number;
+  typescriptPropsStatePrefix: 'type' | 'interface';
+};
+
+const extensionConfig = () =>
+  workspace.getConfiguration(
+    'reactSnippets.settings',
+  ) as unknown as ExtensionSettings;
+
+export default extensionConfig;
diff --git a/src/helpers/formatters.ts b/src/helpers/formatters.ts
new file mode 100644
index 0000000..6188083
--- /dev/null
+++ b/src/helpers/formatters.ts
@@ -0,0 +1,22 @@
+import prettier from 'prettier';
+
+import extensionConfig from './extensionConfig';
+import getPrettierConfig from './getPrettierConfig';
+import {
+  replaceSnippetPlaceholders,
+  revertSnippetPlaceholders,
+} from './snippetPlaceholders';
+
+export const formatSnippet = (snippetString: string) => {
+  return extensionConfig().prettierEnabled
+    ? prettier.format(snippetString, getPrettierConfig())
+    : snippetString;
+};
+
+export const parseSnippet = (body: string | string[]) => {
+  const snippetBody = typeof body === 'string' ? body : body.join('\n');
+
+  return replaceSnippetPlaceholders(
+    formatSnippet(revertSnippetPlaceholders(snippetBody)),
+  );
+};
diff --git a/src/generateSnippets.ts b/src/helpers/generateSnippets.ts
similarity index 59%
rename from src/generateSnippets.ts
rename to src/helpers/generateSnippets.ts
index 6a165b3..579dbde 100644
--- a/src/generateSnippets.ts
+++ b/src/helpers/generateSnippets.ts
@@ -1,28 +1,27 @@
 import { writeFile } from 'fs';
 
-import {
-  extensionConfig,
-  parseSnippetToBody,
-  replaceSnippetPlaceholders,
-} from './helpers';
 import componentsSnippets, {
   ComponentsSnippet,
-} from './sourceSnippets/components';
-import consoleSnippets, { ConsoleSnippet } from './sourceSnippets/console';
-import hooksSnippets, { HooksSnippet } from './sourceSnippets/hooks';
-import importsSnippets, { ImportsSnippet } from './sourceSnippets/imports';
-import othersSnippets, { OthersSnippet } from './sourceSnippets/others';
+} from '../sourceSnippets/components';
+import consoleSnippets, { ConsoleSnippet } from '../sourceSnippets/console';
+import hooksSnippets, { HooksSnippet } from '../sourceSnippets/hooks';
+import importsSnippets, { ImportsSnippet } from '../sourceSnippets/imports';
+import othersSnippets, { OthersSnippet } from '../sourceSnippets/others';
 import propTypesSnippets, {
   PropTypesSnippet,
-} from './sourceSnippets/propTypes';
+} from '../sourceSnippets/propTypes';
 import reactNativeSnippets, {
   ReactNativeSnippet,
-} from './sourceSnippets/reactNative';
-import reduxSnippets, { ReduxSnippet } from './sourceSnippets/redux';
-import testsSnippets, { TestsSnippet } from './sourceSnippets/tests';
+} from '../sourceSnippets/reactNative';
+import reduxSnippets, { ReduxSnippet } from '../sourceSnippets/redux';
+import testsSnippets, { TestsSnippet } from '../sourceSnippets/tests';
 import typescriptSnippets, {
   TypescriptSnippet,
-} from './sourceSnippets/typescript';
+} from '../sourceSnippets/typescript';
+
+import extensionConfig from './extensionConfig';
+import parseSnippetToBody from './parseSnippetToBody';
+import { replaceSnippetPlaceholders } from './snippetPlaceholders';
 
 export type SnippetKeys =
   | OthersSnippet['key']
@@ -77,13 +76,19 @@ const getSnippets = () => {
   return replaceSnippetPlaceholders(JSON.stringify(snippets, null, 2));
 };
 
-export const generateSnippets = () =>
+const generateSnippets = () =>
   new Promise((resolve) => {
     const jsonSnippets = getSnippets();
-    writeFile(__dirname + '/snippets/generated.json', jsonSnippets, (error) => {
-      if (error) {
-        console.error(error);
-      }
-      return resolve(true);
-    });
+    writeFile(
+      __dirname + '/../snippets/generated.json',
+      jsonSnippets,
+      (error) => {
+        if (error) {
+          console.error(error);
+        }
+        return resolve(true);
+      },
+    );
   });
+
+export default generateSnippets;
diff --git a/src/helpers/getPrettierConfig.ts b/src/helpers/getPrettierConfig.ts
new file mode 100644
index 0000000..1b99d72
--- /dev/null
+++ b/src/helpers/getPrettierConfig.ts
@@ -0,0 +1,23 @@
+import prettier, { Options } from 'prettier';
+
+import extensionConfig from './extensionConfig';
+
+let prettierConfig: prettier.Options | null;
+prettier
+  .resolveConfig('', { editorconfig: true })
+  .then((config) => (prettierConfig = config));
+
+const getPrettierConfig = (): Options => {
+  const { semiColons, singleQuote, tabWidth, prettierEnabled } =
+    extensionConfig();
+
+  return {
+    parser: 'typescript',
+    semi: semiColons,
+    singleQuote,
+    tabWidth,
+    ...(prettierEnabled && prettierConfig),
+  };
+};
+
+export default getPrettierConfig;
diff --git a/src/helpers/parseSnippetToBody.ts b/src/helpers/parseSnippetToBody.ts
new file mode 100644
index 0000000..7f99e34
--- /dev/null
+++ b/src/helpers/parseSnippetToBody.ts
@@ -0,0 +1,56 @@
+import extensionConfig from './extensionConfig';
+import { formatSnippet } from './formatters';
+import { Snippet } from './generateSnippets';
+import replaceOrRemoveReactImport from './replaceOrRemoveReactImport';
+
+// This is array of prefixes which are currently skipped because of syntax format issues
+const skippedSnippets = [
+  'pge',
+  'pse',
+  'gdsfp',
+  'gsbu',
+  'scu',
+  'cwun',
+  'cdm',
+  'cdup',
+  'rconst',
+];
+
+const withReactImport = [
+  'rfce',
+  'rfc',
+  'rfcp',
+  'rafce',
+  'rafc',
+  'rafcp',
+  'rnfe',
+  'rnfes',
+  'rnf',
+  'rnfs',
+  'stest',
+  'sntest',
+  'srtest',
+  'snrtest',
+  'hocredux',
+  'hoc',
+];
+
+const parseSnippetToBody = (snippet: Snippet) => {
+  const { importReactOnTop } = extensionConfig();
+  const body =
+    typeof snippet.body === 'string' ? snippet.body : snippet.body.join('\n');
+
+  const snippetBody = importReactOnTop
+    ? body
+    : withReactImport.includes(snippet.prefix)
+    ? replaceOrRemoveReactImport(snippet.body)
+    : body;
+
+  const formattedSnippet = skippedSnippets.includes(snippet.prefix)
+    ? snippetBody
+    : formatSnippet(snippetBody).split('\n');
+
+  return snippet.body.length === 1 ? formattedSnippet[0] : formattedSnippet;
+};
+
+export default parseSnippetToBody;
diff --git a/src/helpers/replaceOrRemoveReactImport.ts b/src/helpers/replaceOrRemoveReactImport.ts
new file mode 100644
index 0000000..b8a699f
--- /dev/null
+++ b/src/helpers/replaceOrRemoveReactImport.ts
@@ -0,0 +1,16 @@
+const replaceOrRemoveReactImport = (snippetBody: string[]) => {
+  const reactImportIndex = snippetBody.findIndex((line) =>
+    line.match(new RegExp(/import React/, 'g')),
+  );
+
+  if (reactImportIndex !== -1) {
+    const line = snippetBody[reactImportIndex];
+    snippetBody[reactImportIndex] = line
+      .replace(new RegExp(/^import React .*$/, 'g'), '')
+      .replace(new RegExp(/^import React, /, 'g'), 'import ');
+  }
+
+  return snippetBody.join('\n');
+};
+
+export default replaceOrRemoveReactImport;
diff --git a/src/helpers/revertSnippetPlaceholders.ts b/src/helpers/revertSnippetPlaceholders.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/helpers/snippetPlaceholders.ts b/src/helpers/snippetPlaceholders.ts
new file mode 100644
index 0000000..72595ff
--- /dev/null
+++ b/src/helpers/snippetPlaceholders.ts
@@ -0,0 +1,45 @@
+import { Mappings, Placeholders } from '../types';
+
+import extensionConfig from './extensionConfig';
+
+export const replaceSnippetPlaceholders = (snippetString: string) => {
+  const { typescriptPropsStatePrefix } = extensionConfig();
+  const propsPlaceholder =
+    typescriptPropsStatePrefix === 'type'
+      ? Mappings.TypeProps
+      : Mappings.InterfaceProps;
+  const statePlaceholder =
+    typescriptPropsStatePrefix === 'type'
+      ? Mappings.TypeState
+      : Mappings.InterfaceState;
+
+  return String(snippetString)
+    .replace(new RegExp(Placeholders.FileName, 'g'), '${1:${TM_FILENAME_BASE}}')
+    .replace(new RegExp(Placeholders.FirstTab, 'g'), '${1:first}')
+    .replace(new RegExp(Placeholders.SecondTab, 'g'), '${2:second}')
+    .replace(new RegExp(Placeholders.ThirdTab, 'g'), '${3:third}')
+    .replace(new RegExp(Placeholders.LastTab, 'g'), '$0')
+    .replace(
+      new RegExp(Placeholders.Capitalize, 'g'),
+      '${1/(.*)/${1:/capitalize}/}',
+    )
+    .replace(new RegExp(Placeholders.TypeProps, 'g'), propsPlaceholder)
+    .replace(new RegExp(Placeholders.TypeState, 'g'), statePlaceholder);
+};
+
+export const revertSnippetPlaceholders = (snippetString: string) => {
+  return String(snippetString)
+    .replace(
+      new RegExp(/\${1:\${TM_FILENAME_BASE}}/, 'g'),
+      Placeholders.FileName,
+    )
+    .replace(new RegExp(/\${1:first}/, 'g'), Placeholders.FirstTab)
+    .replace(new RegExp(/\${2:second}/, 'g'), Placeholders.SecondTab)
+    .replace(new RegExp(/\${3:third}/, 'g'), Placeholders.ThirdTab)
+    .replace(new RegExp(/\$0/, 'g'), Placeholders.LastTab)
+    .replace(
+      new RegExp(/\${1\/(.*)\/${1:\/capitalize}\/}/, 'g'),
+      Placeholders.Capitalize,
+    );
+};
+export default revertSnippetPlaceholders;
diff --git a/src/snippetSearch.ts b/src/helpers/snippetSearch.ts
similarity index 89%
rename from src/snippetSearch.ts
rename to src/helpers/snippetSearch.ts
index aad6db0..95c70df 100644
--- a/src/snippetSearch.ts
+++ b/src/helpers/snippetSearch.ts
@@ -1,8 +1,9 @@
 import { SnippetString, window } from 'vscode';
 
+import snippets from '../snippets/generated.json';
+
+import { parseSnippet } from './formatters';
 import { Snippet } from './generateSnippets';
-import { parseSnippet } from './helpers';
-import snippets from './snippets/generated.json';
 
 const snippetSearch = async () => {
   const { showQuickPick, activeTextEditor } = window;
diff --git a/src/index.ts b/src/index.ts
index 6fe07ab..11a020a 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -6,8 +6,8 @@ import {
   workspace,
 } from 'vscode';
 
-import { generateSnippets } from './generateSnippets';
-import snippetSearch from './snippetSearch';
+import generateSnippets from './helpers/generateSnippets';
+import snippetSearch from './helpers/snippetSearch';
 
 const showRestartMessage = async ({
   affectsConfiguration,
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
index 7be8183..0967ef4 100644
--- a/src/snippets/generated.json
+++ b/src/snippets/generated.json
@@ -1,1887 +1 @@
-{
-  "exportType": {
-    "body": "export type ${1:first} = { $0 };",
-    "key": "exportType",
-    "prefix": "exptp",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportInterface": {
-    "key": "exportInterface",
-    "prefix": "expint",
-    "body": ["export interface ${1:first} {", "  $0;", "}", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponent": {
-    "key": "typescriptReactClassComponent",
-    "prefix": "tsrcc",
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "body": [
-      "import React, { Component } from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "type State = {};",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {};",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportComponent": {
-    "key": "typescriptReactClassExportComponent",
-    "prefix": "tsrce",
-    "body": [
-      "import React, { Component } from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "type State = {};",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {};",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalExportComponent": {
-    "key": "typescriptReactFunctionalExportComponent",
-    "prefix": "tsrfce",
-    "body": [
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return <div>$0</div>;",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalComponent": {
-    "key": "typescriptReactFunctionalComponent",
-    "prefix": "tsrfc",
-    "body": [
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return <div>$0</div>;",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionExportComponent": {
-    "key": "typescriptReactArrowFunctionExportComponent",
-    "prefix": "tsrafce",
-    "body": [
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return <div>$0</div>;",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionComponent": {
-    "key": "typescriptReactArrowFunctionComponent",
-    "prefix": "tsrafc",
-    "body": [
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return <div>$0</div>;",
-      "};",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassPureComponent": {
-    "key": "typescriptReactClassPureComponent",
-    "prefix": "tsrpc",
-    "body": [
-      "import React, { PureComponent } from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportPureComponent": {
-    "key": "typescriptReactClassExportPureComponent",
-    "prefix": "tsrpce",
-    "body": [
-      "import React, { PureComponent } from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponentRedux": {
-    "key": "typescriptReactClassComponentRedux",
-    "prefix": "tsrcredux",
-    "body": [
-      "import { connect } from 'react-redux';",
-      "import React, { Component } from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "type State = {};",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {};",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}});",
-      ""
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponent": {
-    "key": "typescriptReactNativeArrowFunctionComponent",
-    "prefix": "tsrnf",
-    "body": [
-      "import { View, Text } from 'react-native';",
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponentNamedProps": {
-    "key": "typescriptReactNativeArrowFunctionComponentNamedProps",
-    "prefix": "tsrnfi",
-    "body": [
-      "import { View } from 'react-native';",
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}}: React.FC<${1:${TM_FILENAME_BASE}}Props> = (props) => {",
-      "  return <View>$0</View>;",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system and named TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponentWithStyles": {
-    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
-    "prefix": "tsrnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native';",
-      "import React from 'react';",
-      "",
-      "type Props = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      "",
-      "const styles = StyleSheet.create({});",
-      ""
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponent": {
-    "key": "reactArrowFunctionComponent",
-    "prefix": "rafc",
-    "body": [
-      "export const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return <div>$0</div>;",
-      "};",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponentWithPropTypes": {
-    "key": "reactArrowFunctionComponentWithPropTypes",
-    "prefix": "rafcp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return <div>$0</div>;",
-      "};",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionExportComponent": {
-    "key": "reactArrowFunctionExportComponent",
-    "prefix": "rafce",
-    "body": [
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return <div>$0</div>;",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponent": {
-    "key": "reactClassComponent",
-    "prefix": "rcc",
-    "body": [
-      "import React, { Component } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentPropTypes": {
-    "key": "reactClassComponentPropTypes",
-    "prefix": "rccp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React, { Component } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {",
-      "    ${2:second}: ${3:third},",
-      "  };",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with PropTypes and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentRedux": {
-    "key": "reactClassComponentRedux",
-    "prefix": "rcredux",
-    "body": [
-      "import React, { Component } from 'react';",
-      "import { connect } from 'react-redux';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}});",
-      ""
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentReduxPropTypes": {
-    "key": "reactClassComponentReduxPropTypes",
-    "prefix": "rcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React, { Component } from 'react';",
-      "import { connect } from 'react-redux';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {",
-      "    ${2:second}: ${3:third},",
-      "  };",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}});",
-      ""
-    ],
-    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponent": {
-    "key": "reactClassExportComponent",
-    "prefix": "rce",
-    "body": [
-      "import React, { Component } from 'react';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponentWithPropTypes": {
-    "key": "reactClassExportComponentWithPropTypes",
-    "prefix": "rcep",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React, { Component } from 'react';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {};",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportPureComponent": {
-    "key": "reactClassExportPureComponent",
-    "prefix": "rpce",
-    "body": [
-      "import React, { PureComponent } from 'react';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system export",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponent": {
-    "key": "reactClassPureComponent",
-    "prefix": "rpc",
-    "body": [
-      "import React, { PureComponent } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponentWithPropTypes": {
-    "key": "reactClassPureComponentWithPropTypes",
-    "prefix": "rpcp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React, { PureComponent } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  static propTypes = {};",
-      "",
-      "  render() {",
-      "    return <div>$0</div>;",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponent": {
-    "key": "reactFunctionMemoComponent",
-    "prefix": "rmc",
-    "body": [
-      "import React, { memo } from 'react';",
-      "",
-      "export default memo(function ${1:${TM_FILENAME_BASE}}() {",
-      "  return <div>$0</div>;",
-      "});",
-      ""
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponentWithPropTypes": {
-    "key": "reactFunctionMemoComponentWithPropTypes",
-    "prefix": "rmcp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React, { memo } from 'react';",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = memo(function ${1:${TM_FILENAME_BASE}}(props) {",
-      "  return <div>$0</div>;",
-      "});",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponent": {
-    "key": "reactFunctionalComponent",
-    "prefix": "rfc",
-    "body": [
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return <div>$0</div>;",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentRedux": {
-    "key": "reactFunctionalComponentRedux",
-    "prefix": "rfcredux",
-    "body": [
-      "import React from 'react';",
-      "import { connect } from 'react-redux';",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return <div>$0</div>;",
-      "};",
-      "",
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}});",
-      ""
-    ],
-    "description": "Creates a React functional component with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentReduxPropTypes": {
-    "key": "reactFunctionalComponentReduxPropTypes",
-    "prefix": "rfcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "import React from 'react';",
-      "import { connect } from 'react-redux';",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return <div>$0</div>;",
-      "};",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {",
-      "  ${2:second}: PropTypes.${3:third},",
-      "};",
-      "",
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}});",
-      ""
-    ],
-    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentWithPropTypes": {
-    "key": "reactFunctionalComponentWithPropTypes",
-    "prefix": "rfcp",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}(props) {",
-      "  return <div>$0</div>;",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalExportComponent": {
-    "key": "reactFunctionalExportComponent",
-    "prefix": "rfce",
-    "body": [
-      "function ${1:${TM_FILENAME_BASE}}() {",
-      "  return <div>$0</div>;",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleAssert": {
-    "key": "consoleAssert",
-    "prefix": "cas",
-    "body": "console.assert(${1:first}, ${2:second});",
-    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleClear": {
-    "key": "consoleClear",
-    "prefix": "ccl",
-    "body": "console.clear();",
-    "description": "Clears the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleCount": {
-    "key": "consoleCount",
-    "prefix": "cco",
-    "body": "console.count(${1:first});",
-    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleDir": {
-    "key": "consoleDir",
-    "prefix": "cdi",
-    "body": "console.dir(${1:first});",
-    "description": "Prints a JavaScript representation of the specified object",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleError": {
-    "key": "consoleError",
-    "prefix": "cer",
-    "body": "console.error(${1:first});",
-    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroup": {
-    "key": "consoleGroup",
-    "prefix": "cgr",
-    "body": "console.group('${1:first}');",
-    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroupEnd": {
-    "key": "consoleGroupEnd",
-    "prefix": "cge",
-    "body": "console.groupEnd();",
-    "description": "Closes out the corresponding console.group().",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLog": {
-    "key": "consoleLog",
-    "prefix": "clg",
-    "body": "console.log(${1:first});",
-    "description": "Displays a message in the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTrace": {
-    "key": "consoleTrace",
-    "prefix": "ctr",
-    "body": "console.trace(${1:first});",
-    "description": "Prints a stack trace from the point where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogObject": {
-    "key": "consoleLogObject",
-    "prefix": "clo",
-    "body": "console.log('${1:first}', ${1:first});",
-    "description": "Logs property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogJson": {
-    "key": "consoleLogJson",
-    "prefix": "clj",
-    "body": "console.log('${1:first}', JSON.stringify(${1:first}, null, 2));",
-    "description": "Logs stringified JSON property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTime": {
-    "key": "consoleTime",
-    "prefix": "ctm",
-    "body": "console.time('${1:first}');",
-    "description": "Console time wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTimeEnd": {
-    "key": "consoleTimeEnd",
-    "prefix": "cte",
-    "body": "console.timeEnd('${1:first}');",
-    "description": "Console time end wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleWarn": {
-    "key": "consoleWarn",
-    "prefix": "cwa",
-    "body": "console.warn(${1:first});",
-    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleInfo": {
-    "key": "consoleInfo",
-    "prefix": "cin",
-    "body": "console.info(${1:first});",
-    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useCallback": {
-    "key": "useCallback",
-    "prefix": "useCallbackSnippet",
-    "body": ["useCallback(() => {", "  ${1:first};", "}, [${2:second}]);", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useContext": {
-    "key": "useContext",
-    "prefix": "useContextSnippet",
-    "body": "const ${1:first} = useContext(${2:second});",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useEffect": {
-    "key": "useEffect",
-    "prefix": "useEffectSnippet",
-    "body": [
-      "useEffect(() => {",
-      "  ${1:first};",
-      "",
-      "  return () => {",
-      "    ${2:second};",
-      "  };",
-      "}, [${3:third}]);",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useImperativeHandle": {
-    "key": "useImperativeHandle",
-    "prefix": "useImperativeHandleSnippet",
-    "body": [
-      "useImperativeHandle(",
-      "  ${1:first},",
-      "  () => {",
-      "    ${2:second};",
-      "  },",
-      "  [${3:third}]",
-      ");",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useLayoutEffect": {
-    "key": "useLayoutEffect",
-    "prefix": "useLayoutEffectSnippet",
-    "body": [
-      "useLayoutEffect(() => {",
-      "  ${1:first};",
-      "  return () => {",
-      "    ${2:second};",
-      "  };",
-      "}, [${3:third}]);",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useMemo": {
-    "key": "useMemo",
-    "prefix": "useMemoSnippet",
-    "body": "useMemo(() => ${1:first}, ${2:second});",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useReducer": {
-    "key": "useReducer",
-    "prefix": "useReducerSnippet",
-    "body": "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third});",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useRef": {
-    "key": "useRef",
-    "prefix": "useRefSnippet",
-    "body": "const ${1:first} = useRef(${2:second});",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useState": {
-    "key": "useState",
-    "prefix": "useStateSnippet",
-    "body": "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second});",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importAs": {
-    "key": "importAs",
-    "prefix": "ima",
-    "body": [
-      "import { ${2:second} as ${3:third} } from '${1:first}';",
-      "$0;",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouter": {
-    "key": "importBrowserRouter",
-    "prefix": "imbr",
-    "body": ["import { BrowserRouter as Router } from 'react-router-dom';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouterWithRouteAndNavLink": {
-    "key": "importBrowserRouterWithRouteAndNavLink",
-    "prefix": "imrr",
-    "body": [
-      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom';",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importDestructing": {
-    "key": "importDestructing",
-    "prefix": "imd",
-    "body": ["import { ${2:second} } from '${1:first}';", "$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importEverything": {
-    "key": "importEverything",
-    "prefix": "ime",
-    "body": ["import * as ${2:second} from '${1:first}';", "$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importNoModuleName": {
-    "key": "importNoModuleName",
-    "prefix": "imn",
-    "body": ["import '${1:first}';", "$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importPropTypes": {
-    "key": "importPropTypes",
-    "prefix": "impt",
-    "body": ["import PropTypes from 'prop-types';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReact": {
-    "key": "importReact",
-    "prefix": "imr",
-    "body": ["import React from 'react';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactDom": {
-    "key": "importReactDom",
-    "prefix": "imrd",
-    "body": ["import ReactDOM from 'react-dom';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponent": {
-    "key": "importReactWithComponent",
-    "prefix": "imrc",
-    "body": ["import React, { Component } from 'react';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponentAndPropTypes": {
-    "key": "importReactWithComponentAndPropTypes",
-    "prefix": "imrcp",
-    "body": [
-      "import React, { Component } from 'react';",
-      "import PropTypes from 'prop-types';",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemo": {
-    "key": "importReactWithMemo",
-    "prefix": "imrm",
-    "body": ["import React, { memo } from 'react';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemoAndPropTypes": {
-    "key": "importReactWithMemoAndPropTypes",
-    "prefix": "imrmp",
-    "body": [
-      "import React, { memo } from 'react';",
-      "import PropTypes from 'prop-types';",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponent": {
-    "key": "importReactWithPureComponent",
-    "prefix": "imrpc",
-    "body": ["import React, { PureComponent } from 'react';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponentAndPropTypes": {
-    "key": "importReactWithPureComponentAndPropTypes",
-    "prefix": "imrpcp",
-    "body": [
-      "import React, { PureComponent } from 'react';",
-      "import PropTypes from 'prop-types';",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterLink": {
-    "key": "importRouterLink",
-    "prefix": "imbrl",
-    "body": ["import { Link } from 'react-router-dom';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterNavLink": {
-    "key": "importRouterNavLink",
-    "prefix": "imbrnl",
-    "body": ["import { NavLink } from 'react-router-dom';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSetup": {
-    "key": "importRouterSetup",
-    "prefix": "imbrc",
-    "body": [
-      "import { Route, Switch, NavLink, Link } from 'react-router-dom';",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSwitch": {
-    "key": "importRouterSwitch",
-    "prefix": "imbrs",
-    "body": ["import { Switch } from 'react-router-dom';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "import": {
-    "key": "import",
-    "prefix": "imp",
-    "body": ["import ${2:second} from '${1:first}';", "$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArray": {
-    "key": "propTypeArray",
-    "prefix": "pta",
-    "body": "PropTypes.array;",
-    "description": "Array prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayRequired": {
-    "key": "propTypeArrayRequired",
-    "prefix": "ptar",
-    "body": "PropTypes.array.isRequired;",
-    "description": "Array prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBool": {
-    "key": "propTypeBool",
-    "prefix": "ptb",
-    "body": "PropTypes.bool;",
-    "description": "Bool prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBoolRequired": {
-    "key": "propTypeBoolRequired",
-    "prefix": "ptbr",
-    "body": "PropTypes.bool.isRequired;",
-    "description": "Bool prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFunc": {
-    "key": "propTypeFunc",
-    "prefix": "ptf",
-    "body": "PropTypes.func;",
-    "description": "Func prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFuncRequired": {
-    "key": "propTypeFuncRequired",
-    "prefix": "ptfr",
-    "body": "PropTypes.func.isRequired;",
-    "description": "Func prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumber": {
-    "key": "propTypeNumber",
-    "prefix": "ptn",
-    "body": "PropTypes.number;",
-    "description": "Number prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumberRequired": {
-    "key": "propTypeNumberRequired",
-    "prefix": "ptnr",
-    "body": "PropTypes.number.isRequired;",
-    "description": "Number prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObject": {
-    "key": "propTypeObject",
-    "prefix": "pto",
-    "body": "PropTypes.object;",
-    "description": "Object prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectRequired": {
-    "key": "propTypeObjectRequired",
-    "prefix": "ptor",
-    "body": "PropTypes.object.isRequired;",
-    "description": "Object prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeString": {
-    "key": "propTypeString",
-    "prefix": "pts",
-    "body": "PropTypes.string;",
-    "description": "String prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeStringRequired": {
-    "key": "propTypeStringRequired",
-    "prefix": "ptsr",
-    "body": "PropTypes.string.isRequired;",
-    "description": "String prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNode": {
-    "key": "propTypeNode",
-    "prefix": "ptnd",
-    "body": "PropTypes.node;",
-    "description": "Anything that can be rendered: numbers, strings, elements or an array",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNodeRequired": {
-    "key": "propTypeNodeRequired",
-    "prefix": "ptndr",
-    "body": "PropTypes.node.isRequired;",
-    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElement": {
-    "key": "propTypeElement",
-    "prefix": "ptel",
-    "body": "PropTypes.element;",
-    "description": "React element prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElementRequired": {
-    "key": "propTypeElementRequired",
-    "prefix": "ptelr",
-    "body": "PropTypes.element.isRequired;",
-    "description": "React element prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOf": {
-    "key": "propTypeInstanceOf",
-    "prefix": "pti",
-    "body": "PropTypes.instanceOf($0);",
-    "description": "Is an instance of a class prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOfRequired": {
-    "key": "propTypeInstanceOfRequired",
-    "prefix": "ptir",
-    "body": "PropTypes.instanceOf($0).isRequired;",
-    "description": "Is an instance of a class prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnum": {
-    "key": "propTypeEnum",
-    "prefix": "pte",
-    "body": "PropTypes.oneOf(['$0']);",
-    "description": "Prop type limited to specific values by treating it as an enum",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnumRequired": {
-    "key": "propTypeEnumRequired",
-    "prefix": "pter",
-    "body": "PropTypes.oneOf(['$0']).isRequired;",
-    "description": "Prop type limited to specific values by treating it as an enum required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfType": {
-    "key": "propTypeOneOfType",
-    "prefix": "ptet",
-    "body": ["PropTypes.oneOfType([$0]);", ""],
-    "description": "An object that could be one of many types",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfTypeRequired": {
-    "key": "propTypeOneOfTypeRequired",
-    "prefix": "ptetr",
-    "body": ["PropTypes.oneOfType([$0]).isRequired;", ""],
-    "description": "An object that could be one of many types required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOf": {
-    "key": "propTypeArrayOf",
-    "prefix": "ptao",
-    "body": "PropTypes.arrayOf($0);",
-    "description": "An array of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOfRequired": {
-    "key": "propTypeArrayOfRequired",
-    "prefix": "ptaor",
-    "body": "PropTypes.arrayOf($0).isRequired;",
-    "description": "An array of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOf": {
-    "key": "propTypeObjectOf",
-    "prefix": "ptoo",
-    "body": "PropTypes.objectOf($0);",
-    "description": "An object with property values of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOfRequired": {
-    "key": "propTypeObjectOfRequired",
-    "prefix": "ptoor",
-    "body": "PropTypes.objectOf($0).isRequired;",
-    "description": "An object with property values of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShape": {
-    "key": "propTypeShape",
-    "prefix": "ptsh",
-    "body": ["PropTypes.shape({", "  $0,", "});", ""],
-    "description": "An object taking on a particular shape",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShapeRequired": {
-    "key": "propTypeShapeRequired",
-    "prefix": "ptshr",
-    "body": ["PropTypes.shape({", "  $0,", "}).isRequired;", ""],
-    "description": "An object taking on a particular shape required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExact": {
-    "key": "propTypeExact",
-    "prefix": "ptex",
-    "body": ["PropTypes.exact({", "  $0,", "});", ""],
-    "description": "An object with warnings on extra properties",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExactRequired": {
-    "key": "propTypeExactRequired",
-    "prefix": "ptexr",
-    "body": ["PropTypes.exact({", "  $0,", "}).isRequired;", ""],
-    "description": "An object with warnings on extra properties required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeAny": {
-    "key": "propTypeAny",
-    "prefix": "ptany",
-    "body": "PropTypes.any;",
-    "description": "Any prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponent": {
-    "key": "reactNativeComponent",
-    "prefix": "rnc",
-    "body": [
-      "import { Text, View } from 'react-native';",
-      "import React, { Component } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>$0</Text>",
-      "      </View>",
-      "    );",
-      "  }",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentExport": {
-    "key": "reactNativeComponentExport",
-    "prefix": "rnce",
-    "body": [
-      "import { Text, View } from 'react-native';",
-      "import React, { Component } from 'react';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>$0</Text>",
-      "      </View>",
-      "    );",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentWithStyles": {
-    "key": "reactNativeComponentWithStyles",
-    "prefix": "rncs",
-    "body": [
-      "import { Text, StyleSheet, View } from 'react-native';",
-      "import React, { Component } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>$0</Text>",
-      "      </View>",
-      "    );",
-      "  }",
-      "}",
-      "",
-      "const styles = StyleSheet.create({});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponent": {
-    "key": "reactNativeFunctionalComponent",
-    "prefix": "rnf",
-    "body": [
-      "import { View, Text } from 'react-native';",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponentWithStyles": {
-    "key": "reactNativeFunctionalComponentWithStyles",
-    "prefix": "rnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native';",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "}",
-      "",
-      "const styles = StyleSheet.create({});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponent": {
-    "key": "reactNativeFunctionalExportComponent",
-    "prefix": "rnfe",
-    "body": [
-      "import { View, Text } from 'react-native';",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponentWithStyles": {
-    "key": "reactNativeFunctionalExportComponentWithStyles",
-    "prefix": "rnfes",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native';",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>$0</Text>",
-      "    </View>",
-      "  );",
-      "};",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      "",
-      "const styles = StyleSheet.create({});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeImport": {
-    "key": "reactNativeImport",
-    "prefix": "imrn",
-    "body": ["import { $0 } from 'react-native';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponent": {
-    "key": "reactNativePureComponent",
-    "prefix": "rnpc",
-    "body": [
-      "import { Text, View } from 'react-native';",
-      "import React, { PureComponent } from 'react';",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>$0</Text>",
-      "      </View>",
-      "    );",
-      "  }",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponentExport": {
-    "key": "reactNativePureComponentExport",
-    "prefix": "rnpce",
-    "body": [
-      "import { Text, View } from 'react-native';",
-      "import React, { PureComponent } from 'react';",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>$0</Text>",
-      "      </View>",
-      "    );",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeStyles": {
-    "key": "reactNativeStyles",
-    "prefix": "rnstyle",
-    "body": ["const styles = StyleSheet.create({", "  $0,", "});", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReduxConnect": {
-    "key": "importReduxConnect",
-    "prefix": "redux",
-    "body": ["import { connect } from 'react-redux';", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxAction": {
-    "key": "reduxAction",
-    "prefix": "rxaction",
-    "body": [
-      "export const ${1:first} = (payload) => ({",
-      "  type: ${2:second},",
-      "  payload,",
-      "});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxConst": {
-    "key": "reduxConst",
-    "prefix": "rxconst",
-    "body": "export const ${1:first} = '${1:first}';",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxReducer": {
-    "key": "reduxReducer",
-    "prefix": "rxreducer",
-    "body": [
-      "const initialState = {};",
-      "",
-      "export default (state = initialState, { type, payload }) => {",
-      "  switch (type) {",
-      "    case ${1:first}:",
-      "      return { ...state, ...payload };",
-      "",
-      "    default:",
-      "      return state;",
-      "  }",
-      "};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSelector": {
-    "key": "reduxSelector",
-    "prefix": "rxselect",
-    "body": [
-      "import { createSelector } from 'reselect';",
-      "",
-      "export const ${1:first} = (state) => state.${2:second};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSlice": {
-    "key": "reduxSlice",
-    "prefix": "rxslice",
-    "body": [
-      "import { createSlice } from '@reduxjs/toolkit';",
-      "",
-      "const initialState = {};",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
-      "  name: ${2:second},",
-      "  initialState,",
-      "  reducers: {},",
-      "});",
-      "",
-      "export const {} = ${1:${TM_FILENAME_BASE}}.actions;",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}.reducer;",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "mappingToProps": {
-    "key": "mappingToProps",
-    "prefix": "reduxmap",
-    "body": [
-      "const mapStateToProps = (state) => ({});",
-      "",
-      "const mapDispatchToProps = {};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "describeBlock": {
-    "key": "describeBlock",
-    "prefix": "desc",
-    "body": ["describe('${1:first}', () => {", "  $0;", "});", ""],
-    "description": "Testing `describe` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itAsyncBlock": {
-    "key": "itAsyncBlock",
-    "prefix": "tita",
-    "body": ["it('should ${1:first}', async () => {", "  $0;", "});", ""],
-    "description": "Testing asynchronous `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itBlock": {
-    "key": "itBlock",
-    "prefix": "tit",
-    "body": ["it('should ${1:first}', () => {", "  $0;", "});", ""],
-    "description": "Testing `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactComponentTestWithRedux": {
-    "key": "setupReactComponentTestWithRedux",
-    "prefix": "srtest",
-    "body": [
-      "import renderer from 'react-test-renderer';",
-      "import { Provider } from 'react-redux';",
-      "",
-      "import store from '~/store';",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}';",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {};",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>",
-      "  );",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot();",
-      "  });",
-      "});",
-      ""
-    ],
-    "description": "Create test component",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTest": {
-    "key": "setupReactNativeTest",
-    "prefix": "sntest",
-    "body": [
-      "import 'react-native';",
-      "",
-      "import renderer from 'react-test-renderer';",
-      "",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}';",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {};",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />);",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot();",
-      "  });",
-      "});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTestWithRedux": {
-    "key": "setupReactNativeTestWithRedux",
-    "prefix": "snrtest",
-    "body": [
-      "import 'react-native';",
-      "",
-      "import renderer from 'react-test-renderer';",
-      "import { Provider } from 'react-redux';",
-      "",
-      "import store from '~/store';",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}';",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {};",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>",
-      "  );",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot();",
-      "  });",
-      "});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactTest": {
-    "key": "setupReactTest",
-    "prefix": "stest",
-    "body": [
-      "import renderer from 'react-test-renderer';",
-      "",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}';",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {};",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />);",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot();",
-      "  });",
-      "});",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testAsyncBlock": {
-    "key": "testAsyncBlock",
-    "prefix": "testa",
-    "body": ["test('should ${1:first}', async () => {", "  $0;", "});", ""],
-    "description": "Testing `asynchronous test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testBlock": {
-    "key": "testBlock",
-    "prefix": "test",
-    "body": ["test('should ${1:first}', () => {", "  $0;", "});", ""],
-    "description": "Testing `test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefault": {
-    "key": "exportDefault",
-    "prefix": "exp",
-    "body": ["export default $0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDestructing": {
-    "key": "exportDestructing",
-    "prefix": "exd",
-    "body": ["export { ${2:second} } from '${1:first}';", "$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportAs": {
-    "key": "exportAs",
-    "prefix": "exa",
-    "body": [
-      "export { ${2:second} as ${3:third} } from '${1:first}';",
-      "$0;",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportNamedFunction": {
-    "key": "exportNamedFunction",
-    "prefix": "enf",
-    "body": ["export const ${1:first} = (${2:second}) => {", "  $0;", "};", ""],
-    "description": "Export named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultFunction": {
-    "key": "exportDefaultFunction",
-    "prefix": "edf",
-    "body": ["export default (${1:first}) => {", "  $0;", "};", ""],
-    "description": "Export default function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultNamedFunction": {
-    "key": "exportDefaultNamedFunction",
-    "prefix": "ednf",
-    "body": [
-      "export default function ${1:first}(${2:second}) {",
-      "  $0;",
-      "}",
-      ""
-    ],
-    "description": "Export default named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "method": {
-    "key": "method",
-    "prefix": "met",
-    "body": ["${1:first} = (${2:second}) => {", "  $0;", "};", ""],
-    "description": "Creates a method inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertyGet": {
-    "key": "propertyGet",
-    "prefix": "pge",
-    "body": "get ${1:first}() {\n  return this.$0\n}\n",
-    "description": "Creates a getter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertySet": {
-    "key": "propertySet",
-    "prefix": "pse",
-    "body": "set ${1:first}(${2:second}) {$0}\n",
-    "description": "Creates a setter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forEach": {
-    "key": "forEach",
-    "prefix": "fre",
-    "body": ["${1:first}.forEach((${2:second}) => {", "  $0;", "});", ""],
-    "description": "Creates a forEach statement",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forOf": {
-    "key": "forOf",
-    "prefix": "fof",
-    "body": ["for (let ${1:first} of ${2:second}) {", "  $0;", "}", ""],
-    "description": "Iterating over property names of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forIn": {
-    "key": "forIn",
-    "prefix": "fin",
-    "body": ["for (let ${1:first} in ${2:second}) {", "  $0;", "}", ""],
-    "description": "Iterating over property values of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "anonymousFunction": {
-    "key": "anonymousFunction",
-    "prefix": "anfn",
-    "body": ["(${1:first}) => {", "  ${2:second};", "};", ""],
-    "description": "Creates an anonymous function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "namedFunction": {
-    "key": "namedFunction",
-    "prefix": "nfn",
-    "body": [
-      "const ${1:first} = (${2:second}) => {",
-      "  ${3:third};",
-      "};",
-      ""
-    ],
-    "description": "Creates a named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingObject": {
-    "key": "destructingObject",
-    "prefix": "dob",
-    "body": ["const { ${2:second} } = ${1:first};", ""],
-    "description": "Creates and assigns a local variable using object destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingArray": {
-    "key": "destructingArray",
-    "prefix": "dar",
-    "body": ["const [${2:second}] = ${1:first};", ""],
-    "description": "Creates and assigns a local variable using array destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setInterval": {
-    "key": "setInterval",
-    "prefix": "sti",
-    "body": ["setInterval(() => {", "  ${2:second};", "}, $0);", ""],
-    "description": "Executes the given function at specified intervals",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setTimeOut": {
-    "key": "setTimeOut",
-    "prefix": "sto",
-    "body": ["setTimeout(() => {", "  ${2:second};", "}, ${1:first});", ""],
-    "description": "Executes the given function after the specified delay",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "promise": {
-    "key": "promise",
-    "prefix": "prom",
-    "body": ["return new Promise((resolve, reject) => {", "  $0;", "});", ""],
-    "description": "Creates and returns a new Promise in the standard ES7 syntax",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructProps": {
-    "key": "destructProps",
-    "prefix": "cp",
-    "body": ["const { $0 } = this.props;", ""],
-    "description": "Creates and assigns a local variable using props destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructState": {
-    "key": "destructState",
-    "prefix": "cs",
-    "body": ["const { $0 } = this.state;", ""],
-    "description": "Creates and assigns a local variable using state destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "classConstructor": {
-    "key": "classConstructor",
-    "prefix": "rconst",
-    "body": "constructor(props) {\n  super(props)\n\n  this.state = {\n     $0\n  }\n}\n",
-    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "emptyState": {
-    "key": "emptyState",
-    "prefix": "est",
-    "body": ["state = {", "  $0,", "};", ""],
-    "description": "Creates empty state object. To be used in a constructor.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidMount": {
-    "key": "componentDidMount",
-    "prefix": "cdm",
-    "body": "componentDidMount() {\n  $0\n}\n",
-    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "shouldComponentUpdate": {
-    "key": "shouldComponentUpdate",
-    "prefix": "scu",
-    "body": "shouldComponentUpdate(nextProps, nextState) {\n  $0\n}\n",
-    "description": "Invoked before rendering when new props or state are being received. ",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidUpdate": {
-    "key": "componentDidUpdate",
-    "prefix": "cdup",
-    "body": "componentDidUpdate(prevProps, prevState) {\n  $0\n}\n",
-    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentWillUnmount": {
-    "key": "componentWillUnmount",
-    "prefix": "cwun",
-    "body": "componentWillUnmount() {\n  $0\n}\n",
-    "description": "Invoked immediately before a component is unmounted from the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getDerivedStateFromProps": {
-    "key": "getDerivedStateFromProps",
-    "prefix": "gdsfp",
-    "body": "static getDerivedStateFromProps(props, state) {\n  $0\n}",
-    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getSnapshotBeforeUpdate": {
-    "key": "getSnapshotBeforeUpdate",
-    "prefix": "gsbu",
-    "body": "getSnapshotBeforeUpdate = (prevProps, prevState) => {\n  $0\n}\n",
-    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createContext": {
-    "key": "createContext",
-    "prefix": "rcontext",
-    "body": ["const $0 = React.createContext();", ""],
-    "description": "Create React context",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createRef": {
-    "key": "createRef",
-    "prefix": "cref",
-    "body": ["this.$0Ref = React.createRef();", ""],
-    "description": "Create ref statement used inside constructor",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateObject": {
-    "key": "componentSetStateObject",
-    "prefix": "sst",
-    "body": ["this.setState({ $0 });", ""],
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateFunc": {
-    "key": "componentSetStateFunc",
-    "prefix": "ssf",
-    "body": [
-      "this.setState((state, props) => {",
-      "  return { $0 };",
-      "});",
-      ""
-    ],
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentProps": {
-    "key": "componentProps",
-    "prefix": "props",
-    "body": ["this.props.$0;", ""],
-    "description": "Access component's props",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentState": {
-    "key": "componentState",
-    "prefix": "state",
-    "body": ["this.state.$0;", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "bindThis": {
-    "key": "bindThis",
-    "prefix": "bnd",
-    "body": ["this.${1:first} = this.${1:first}.bind(this);", ""],
-    "description": "Binds this to a method",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "commentBigBlock": {
-    "key": "commentBigBlock",
-    "prefix": "cmmb",
-    "body": ["/**", " * $0", " */", ""],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponentWithRedux": {
-    "key": "hocComponentWithRedux",
-    "prefix": "hocredux",
-    "body": [
-      "import { connect } from 'react-redux';",
-      "import PropTypes from 'prop-types';",
-      "",
-      "export const mapStateToProps = (state) => ({});",
-      "",
-      "export const mapDispatchToProps = {};",
-      "",
-      "export const ${1:first} = (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />;",
-      "",
-      "  hocComponent.propTypes = {};",
-      "",
-      "  return hocComponent;",
-      "};",
-      "",
-      "export default (WrapperComponent) =>",
-      "  connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent));",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponent": {
-    "key": "hocComponent",
-    "prefix": "hoc",
-    "body": [
-      "import PropTypes from 'prop-types';",
-      "",
-      "export default (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />;",
-      "",
-      "  hocComponent.propTypes = {};",
-      "",
-      "  return hocComponent;",
-      "};",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typeofSnippet": {
-    "key": "typeofSnippet",
-    "prefix": "tpf",
-    "body": "typeof $0;",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  }
-}
+{}
diff --git a/src/sourceSnippets/imports.ts b/src/sourceSnippets/imports.ts
index ba042ca..ea2c116 100644
--- a/src/sourceSnippets/imports.ts
+++ b/src/sourceSnippets/imports.ts
@@ -32,19 +32,19 @@ export type ImportsSnippet = SnippetMapping<ImportsMappings>;
 const importReact: ImportsSnippet = {
   key: 'importReact',
   prefix: 'imr',
-  body: ["import React from 'react'", ''],
+  body: ["import React from 'react'"],
 };
 
 const importReactDom: ImportsSnippet = {
   key: 'importReactDom',
   prefix: 'imrd',
-  body: ["import ReactDOM from 'react-dom'", ''],
+  body: ["import ReactDOM from 'react-dom'"],
 };
 
 const importReactWithComponent: ImportsSnippet = {
   key: 'importReactWithComponent',
   prefix: 'imrc',
-  body: ["import React, { Component } from 'react'", ''],
+  body: ["import React, { Component } from 'react'"],
 };
 
 const importReactWithComponentAndPropTypes: ImportsSnippet = {
@@ -60,7 +60,7 @@ const importReactWithComponentAndPropTypes: ImportsSnippet = {
 const importReactWithPureComponent: ImportsSnippet = {
   key: 'importReactWithPureComponent',
   prefix: 'imrpc',
-  body: ["import React, { PureComponent } from 'react'", ''],
+  body: ["import React, { PureComponent } from 'react'"],
 };
 
 const importReactWithPureComponentAndPropTypes: ImportsSnippet = {
@@ -76,7 +76,7 @@ const importReactWithPureComponentAndPropTypes: ImportsSnippet = {
 const importReactWithMemo: ImportsSnippet = {
   key: 'importReactWithMemo',
   prefix: 'imrm',
-  body: ["import React, { memo } from 'react'", ''],
+  body: ["import React, { memo } from 'react'"],
 };
 
 const importReactWithMemoAndPropTypes: ImportsSnippet = {
@@ -92,7 +92,7 @@ const importReactWithMemoAndPropTypes: ImportsSnippet = {
 const importPropTypes: ImportsSnippet = {
   key: 'importPropTypes',
   prefix: 'impt',
-  body: ["import PropTypes from 'prop-types'", ''],
+  body: ["import PropTypes from 'prop-types'"],
 };
 
 /**
@@ -102,7 +102,7 @@ const importPropTypes: ImportsSnippet = {
 const importBrowserRouter: ImportsSnippet = {
   key: 'importBrowserRouter',
   prefix: 'imbr',
-  body: ["import { BrowserRouter as Router } from 'react-router-dom'", ''],
+  body: ["import { BrowserRouter as Router } from 'react-router-dom'"],
 };
 
 const importBrowserRouterWithRouteAndNavLink: ImportsSnippet = {
@@ -117,25 +117,25 @@ const importBrowserRouterWithRouteAndNavLink: ImportsSnippet = {
 const importRouterSetup: ImportsSnippet = {
   key: 'importRouterSetup',
   prefix: 'imbrc',
-  body: ["import { Route, Switch, NavLink, Link } from 'react-router-dom'", ''],
+  body: ["import { Route, Switch, NavLink, Link } from 'react-router-dom'"],
 };
 
 const importRouterSwitch: ImportsSnippet = {
   key: 'importRouterSwitch',
   prefix: 'imbrs',
-  body: ["import { Switch } from 'react-router-dom'", ''],
+  body: ["import { Switch } from 'react-router-dom'"],
 };
 
 const importRouterLink: ImportsSnippet = {
   key: 'importRouterLink',
   prefix: 'imbrl',
-  body: ["import { Link } from 'react-router-dom'", ''],
+  body: ["import { Link } from 'react-router-dom'"],
 };
 
 const importRouterNavLink: ImportsSnippet = {
   key: 'importRouterNavLink',
   prefix: 'imbrnl',
-  body: ["import { NavLink } from 'react-router-dom'", ''],
+  body: ["import { NavLink } from 'react-router-dom'"],
 };
 
 /**
@@ -145,16 +145,13 @@ const importRouterNavLink: ImportsSnippet = {
 const importSnippet: ImportsSnippet = {
   key: 'import',
   prefix: 'imp',
-  body: [
-    `import ${Placeholders.SecondTab} from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
-  ],
+  body: [`import ${Placeholders.SecondTab} from '${Placeholders.FirstTab}'`],
 };
 
 const importNoModuleName: ImportsSnippet = {
   key: 'importNoModuleName',
   prefix: 'imn',
-  body: [`import '${Placeholders.FirstTab}'`, Placeholders.LastTab],
+  body: [`import '${Placeholders.FirstTab}'`],
 };
 
 const importDestructing: ImportsSnippet = {
@@ -162,7 +159,6 @@ const importDestructing: ImportsSnippet = {
   prefix: 'imd',
   body: [
     `import { ${Placeholders.SecondTab} } from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
   ],
 };
 
@@ -171,7 +167,6 @@ const importEverything: ImportsSnippet = {
   prefix: 'ime',
   body: [
     `import * as ${Placeholders.SecondTab} from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
   ],
 };
 
@@ -180,7 +175,6 @@ const importAs: ImportsSnippet = {
   prefix: 'ima',
   body: [
     `import { ${Placeholders.SecondTab} as ${Placeholders.ThirdTab} } from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
   ],
 };
 
diff --git a/src/sourceSnippets/others.ts b/src/sourceSnippets/others.ts
index 04acde8..e9e035e 100644
--- a/src/sourceSnippets/others.ts
+++ b/src/sourceSnippets/others.ts
@@ -48,7 +48,7 @@ export type OthersSnippet = SnippetMapping<OthersMapping>;
 const exportDefault: OthersSnippet = {
   key: 'exportDefault',
   prefix: 'exp',
-  body: [`export default ${Placeholders.LastTab}`, ''],
+  body: [`export default ${Placeholders.FirstTab}`],
 };
 
 const exportDestructing: OthersSnippet = {
@@ -56,7 +56,6 @@ const exportDestructing: OthersSnippet = {
   prefix: 'exd',
   body: [
     `export { ${Placeholders.SecondTab} } from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
   ],
 };
 
@@ -65,7 +64,6 @@ const exportAs: OthersSnippet = {
   prefix: 'exa',
   body: [
     `export { ${Placeholders.SecondTab} as ${Placeholders.ThirdTab} } from '${Placeholders.FirstTab}'`,
-    Placeholders.LastTab,
   ],
 };
 
@@ -73,8 +71,7 @@ const exportNamedFunction: OthersSnippet = {
   key: 'exportNamedFunction',
   prefix: 'enf',
   body: [
-    `export const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.LastTab}}`,
-    '',
+    `export const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.ThirdTab}}`,
   ],
   description: 'Export named function',
 };
@@ -83,8 +80,7 @@ const exportDefaultFunction: OthersSnippet = {
   key: 'exportDefaultFunction',
   prefix: 'edf',
   body: [
-    `export default (${Placeholders.FirstTab}) => {${Placeholders.LastTab}}`,
-    '',
+    `export default (${Placeholders.FirstTab}) => {${Placeholders.SecondTab}}`,
   ],
   description: 'Export default function',
 };
@@ -93,8 +89,7 @@ const exportDefaultNamedFunction: OthersSnippet = {
   key: 'exportDefaultNamedFunction',
   prefix: 'ednf',
   body: [
-    `export default function ${Placeholders.FirstTab}(${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
-    '',
+    `export default function ${Placeholders.FirstTab}(${Placeholders.SecondTab}) {${Placeholders.ThirdTab}}`,
   ],
   description: 'Export default named function',
 };
@@ -103,8 +98,7 @@ const method: OthersSnippet = {
   key: 'method',
   prefix: 'met',
   body: [
-    `${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.LastTab}}`,
-    '',
+    `${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.ThirdTab}}`,
   ],
   description: 'Creates a method inside a class',
 };
@@ -114,7 +108,7 @@ const propertyGet: OthersSnippet = {
   prefix: 'pge',
   body: [
     `get ${Placeholders.FirstTab}() {`,
-    `  return this.${Placeholders.LastTab}`,
+    `  return this.${Placeholders.SecondTab}`,
     '}',
     '',
   ],
@@ -125,8 +119,7 @@ const propertySet: OthersSnippet = {
   key: 'propertySet',
   prefix: 'pse',
   body: [
-    `set ${Placeholders.FirstTab}(${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
-    '',
+    `set ${Placeholders.FirstTab}(${Placeholders.SecondTab}) {${Placeholders.ThirdTab}}`,
   ],
   description: 'Creates a setter property inside a class',
 };
@@ -135,10 +128,7 @@ const forEach: OthersSnippet = {
   key: 'forEach',
   prefix: 'fre',
   body: [
-    `${Placeholders.FirstTab}.forEach(${Placeholders.SecondTab} => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
-    '',
+    `${Placeholders.FirstTab}.forEach(${Placeholders.SecondTab} => {${Placeholders.LastTab}})`,
   ],
   description: 'Creates a forEach statement',
 };
@@ -147,10 +137,7 @@ const forOf: OthersSnippet = {
   key: 'forOf',
   prefix: 'fof',
   body: [
-    `for(let ${Placeholders.FirstTab} of ${Placeholders.SecondTab}) {`,
-    `  ${Placeholders.LastTab}`,
-    '}',
-    '',
+    `for(let ${Placeholders.FirstTab} of ${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
   ],
   description: 'Iterating over property names of iterable objects',
 };
@@ -159,10 +146,7 @@ const forIn: OthersSnippet = {
   key: 'forIn',
   prefix: 'fin',
   body: [
-    `for(let ${Placeholders.FirstTab} in ${Placeholders.SecondTab}) {`,
-    `  ${Placeholders.LastTab}`,
-    '}',
-    '',
+    `for(let ${Placeholders.FirstTab} in ${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
   ],
   description: 'Iterating over property values of iterable objects',
 };
@@ -178,10 +162,7 @@ const namedFunction: OthersSnippet = {
   key: 'namedFunction',
   prefix: 'nfn',
   body: [
-    `const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {`,
-    `  ${Placeholders.ThirdTab}`,
-    '}',
-    '',
+    `const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.ThirdTab}}`,
   ],
   description: 'Creates a named function',
 };
@@ -189,14 +170,14 @@ const namedFunction: OthersSnippet = {
 const destructingObject: OthersSnippet = {
   key: 'destructingObject',
   prefix: 'dob',
-  body: [`const {${Placeholders.SecondTab}} = ${Placeholders.FirstTab}`, ''],
+  body: [`const {${Placeholders.SecondTab}} = ${Placeholders.FirstTab}`],
   description: 'Creates and assigns a local variable using object destructing',
 };
 
 const destructingArray: OthersSnippet = {
   key: 'destructingArray',
   prefix: 'dar',
-  body: [`const [${Placeholders.SecondTab}] = ${Placeholders.FirstTab}`, ''],
+  body: [`const [${Placeholders.SecondTab}] = ${Placeholders.FirstTab}`],
   description: 'Creates and assigns a local variable using array destructing',
 };
 
@@ -205,8 +186,8 @@ const setInterval: OthersSnippet = {
   prefix: 'sti',
   body: [
     'setInterval(() => {',
-    `  ${Placeholders.SecondTab}`,
-    `}, ${Placeholders.LastTab})`,
+    `  ${Placeholders.FirstTab}`,
+    `}, ${Placeholders.SecondTab})`,
     '',
   ],
   description: 'Executes the given function at specified intervals',
@@ -239,14 +220,14 @@ const promise: OthersSnippet = {
 const destructProps: OthersSnippet = {
   key: 'destructProps',
   prefix: 'cp',
-  body: [`const { ${Placeholders.LastTab} } = this.props`, ''],
+  body: [`const { ${Placeholders.FirstTab} } = this.props`],
   description: 'Creates and assigns a local variable using props destructing',
 };
 
 const destructState: OthersSnippet = {
   key: 'destructState',
   prefix: 'cs',
-  body: [`const { ${Placeholders.LastTab} } = this.state`, ''],
+  body: [`const { ${Placeholders.FirstTab} } = this.state`],
   description: 'Creates and assigns a local variable using state destructing',
 };
 
@@ -258,7 +239,7 @@ const classConstructor: OthersSnippet = {
     '  super(props)',
     '',
     '  this.state = {',
-    `     ${Placeholders.LastTab}`,
+    `     ${Placeholders.FirstTab}`,
     '  }',
     '}',
     '',
@@ -270,14 +251,14 @@ const classConstructor: OthersSnippet = {
 const emptyState: OthersSnippet = {
   key: 'emptyState',
   prefix: 'est',
-  body: ['state = {', `  ${Placeholders.LastTab}`, '}', ''],
+  body: ['state = {', `  ${Placeholders.FirstTab}`, '}'],
   description: 'Creates empty state object. To be used in a constructor.',
 };
 
 const componentDidMount: OthersSnippet = {
   key: 'componentDidMount',
   prefix: 'cdm',
-  body: ['componentDidMount() {', `  ${Placeholders.LastTab}`, '}', ''],
+  body: ['componentDidMount() {', `  ${Placeholders.FirstTab}`, '}'],
   description:
     'Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.',
 };
@@ -287,7 +268,7 @@ const shouldComponentUpdate: OthersSnippet = {
   prefix: 'scu',
   body: [
     'shouldComponentUpdate(nextProps, nextState) {',
-    `  ${Placeholders.LastTab}`,
+    `  ${Placeholders.FirstTab}`,
     '}',
     '',
   ],
@@ -311,7 +292,7 @@ const componentDidUpdate: OthersSnippet = {
 const componentWillUnmount: OthersSnippet = {
   key: 'componentWillUnmount',
   prefix: 'cwun',
-  body: ['componentWillUnmount() {', `  ${Placeholders.LastTab}`, '}', ''],
+  body: ['componentWillUnmount() {', `  ${Placeholders.FirstTab}`, '}'],
   description:
     'Invoked immediately before a component is unmounted from the DOM.',
 };
@@ -320,9 +301,7 @@ const getDerivedStateFromProps: OthersSnippet = {
   key: 'getDerivedStateFromProps',
   prefix: 'gdsfp',
   body: [
-    'static getDerivedStateFromProps(props, state) {',
-    `  ${Placeholders.LastTab}`,
-    '}',
+    `static getDerivedStateFromProps(props, state) {${Placeholders.FirstTab}}`,
   ],
   description:
     'Invoked right before calling the render method, both on the initial mount and on subsequent updates.',
@@ -332,10 +311,7 @@ const getSnapshotBeforeUpdate: OthersSnippet = {
   key: 'getSnapshotBeforeUpdate',
   prefix: 'gsbu',
   body: [
-    'getSnapshotBeforeUpdate = (prevProps, prevState) => {',
-    `  ${Placeholders.LastTab}`,
-    '}',
-    '',
+    `getSnapshotBeforeUpdate = (prevProps, prevState) => {${Placeholders.LastTab}}`,
   ],
   description:
     'Called right before mutations are made (e.g. before the DOM is updated)',
@@ -344,21 +320,21 @@ const getSnapshotBeforeUpdate: OthersSnippet = {
 const createContext: OthersSnippet = {
   key: 'createContext',
   prefix: 'rcontext',
-  body: [`const ${Placeholders.LastTab} = React.createContext()`, ''],
+  body: [`const ${Placeholders.LastTab} = React.createContext()`],
   description: 'Create React context',
 };
 
 const createRef: OthersSnippet = {
   key: 'createRef',
   prefix: 'cref',
-  body: [`this.${Placeholders.LastTab}Ref = React.createRef()`, ''],
+  body: [`this.${Placeholders.LastTab}Ref = React.createRef()`],
   description: 'Create ref statement used inside constructor',
 };
 
 const componentSetStateObject: OthersSnippet = {
   key: 'componentSetStateObject',
   prefix: 'sst',
-  body: [`this.setState({${Placeholders.LastTab}})`, ''],
+  body: [`this.setState({${Placeholders.LastTab}})`],
   description: 'Performs a shallow merge of nextState into current state',
 };
 
@@ -367,7 +343,6 @@ const componentSetStateFunc: OthersSnippet = {
   prefix: 'ssf',
   body: [
     `this.setState((state, props) => { return { ${Placeholders.LastTab} }})`,
-    '',
   ],
   description: 'Performs a shallow merge of nextState into current state',
 };
@@ -375,14 +350,14 @@ const componentSetStateFunc: OthersSnippet = {
 const componentProps: OthersSnippet = {
   key: 'componentProps',
   prefix: 'props',
-  body: [`this.props.${Placeholders.LastTab}`, ''],
+  body: [`this.props.${Placeholders.LastTab}`],
   description: "Access component's props",
 };
 
 const componentState: OthersSnippet = {
   key: 'componentState',
   prefix: 'state',
-  body: [`this.state.${Placeholders.LastTab}`, ''],
+  body: [`this.state.${Placeholders.LastTab}`],
 };
 
 const bindThis: OthersSnippet = {
@@ -390,7 +365,6 @@ const bindThis: OthersSnippet = {
   prefix: 'bnd',
   body: [
     `this.${Placeholders.FirstTab} = this.${Placeholders.FirstTab}.bind(this)`,
-    '',
   ],
   description: 'Binds this to a method',
 };
diff --git a/src/sourceSnippets/reactNative.ts b/src/sourceSnippets/reactNative.ts
index d881900..2c8db65 100644
--- a/src/sourceSnippets/reactNative.ts
+++ b/src/sourceSnippets/reactNative.ts
@@ -23,7 +23,7 @@ type ReactNativeMapping = {
 
 export type ReactNativeSnippet = SnippetMapping<ReactNativeMapping>;
 
-const reactNativeStylesSnippet = ['const styles = StyleSheet.create({})', ''];
+const reactNativeStylesSnippet = ['const styles = StyleSheet.create({})'];
 const reactNativeComponentReturn = [
   '  render() {',
   '    return (',
@@ -45,18 +45,13 @@ const reactNativeReturn = [
 const reactNativeImport: ReactNativeSnippet = {
   key: 'reactNativeImport',
   prefix: 'imrn',
-  body: [`import { ${Placeholders.LastTab} } from 'react-native'`, ''],
+  body: [`import { ${Placeholders.LastTab} } from 'react-native'`],
 };
 
 const reactNativeStyles: ReactNativeSnippet = {
   key: 'reactNativeStyles',
   prefix: 'rnstyle',
-  body: [
-    'const styles = StyleSheet.create({',
-    `  ${Placeholders.LastTab}`,
-    '})',
-    '',
-  ],
+  body: [`const styles = StyleSheet.create({${Placeholders.LastTab}})`],
 };
 
 const reactNativeComponent: ReactNativeSnippet = {
@@ -65,10 +60,10 @@ const reactNativeComponent: ReactNativeSnippet = {
   body: [
     "import { Text, View } from 'react-native'",
     ...reactComponent,
+    '',
     `export default class ${Placeholders.FileName} extends Component {`,
     ...reactNativeComponentReturn,
     '}',
-    '',
   ],
 };
 
@@ -78,6 +73,7 @@ const reactNativeComponentWithStyles: ReactNativeSnippet = {
   body: [
     "import { Text, StyleSheet, View } from 'react-native'",
     ...reactComponent,
+    '',
     `export default class ${Placeholders.FileName} extends Component {`,
     ...reactNativeComponentReturn,
     '}',
@@ -92,6 +88,7 @@ const reactNativeComponentExport: ReactNativeSnippet = {
   body: [
     "import { Text, View } from 'react-native'",
     ...reactComponent,
+    '',
     `export class ${Placeholders.FileName} extends Component {`,
     ...reactNativeComponentReturn,
     '}',
@@ -105,10 +102,10 @@ const reactNativePureComponent: ReactNativeSnippet = {
   body: [
     "import { Text, View } from 'react-native'",
     ...reactPureComponent,
+    '',
     `export default class ${Placeholders.FileName} extends PureComponent {`,
     ...reactNativeComponentReturn,
     '}',
-    '',
   ],
 };
 
@@ -118,6 +115,7 @@ const reactNativePureComponentExport: ReactNativeSnippet = {
   body: [
     "import { Text, View } from 'react-native'",
     ...reactPureComponent,
+    '',
     `export class ${Placeholders.FileName} extends PureComponent {`,
     ...reactNativeComponentReturn,
     '}',
@@ -131,6 +129,7 @@ const reactNativeFunctionalExportComponent: ReactNativeSnippet = {
   body: [
     "import { View, Text } from 'react-native'",
     ...react,
+    '',
     `const ${Placeholders.FileName} = () => {`,
     ...reactNativeReturn,
     '}',
@@ -144,6 +143,7 @@ const reactNativeFunctionalExportComponentWithStyles: ReactNativeSnippet = {
   body: [
     "import { StyleSheet, Text, View } from 'react-native'",
     ...react,
+    '',
     `const ${Placeholders.FileName} = () => {`,
     ...reactNativeReturn,
     '}',
@@ -159,10 +159,10 @@ const reactNativeFunctionalComponent: ReactNativeSnippet = {
   body: [
     "import { View, Text } from 'react-native'",
     ...react,
+    '',
     `export default function ${Placeholders.FileName}() {`,
     ...reactNativeReturn,
     '}',
-    '',
   ],
 };
 
@@ -172,6 +172,7 @@ const reactNativeFunctionalComponentWithStyles: ReactNativeSnippet = {
   body: [
     "import { StyleSheet, Text, View } from 'react-native'",
     ...react,
+    '',
     `export default function ${Placeholders.FileName}() {`,
     ...reactNativeReturn,
     '}',
diff --git a/src/sourceSnippets/redux.ts b/src/sourceSnippets/redux.ts
index c77b148..ed1149f 100644
--- a/src/sourceSnippets/redux.ts
+++ b/src/sourceSnippets/redux.ts
@@ -15,7 +15,7 @@ export type ReduxSnippet = SnippetMapping<HookMappings>;
 const importReduxConnect: ReduxSnippet = {
   key: 'importReduxConnect',
   prefix: 'redux',
-  body: ["import { connect } from 'react-redux'", ''],
+  body: ["import { connect } from 'react-redux'"],
 };
 
 const reduxAction: ReduxSnippet = {
@@ -63,7 +63,6 @@ const reduxSelector: ReduxSnippet = {
     "import { createSelector } from 'reselect'",
     '',
     `export const ${Placeholders.FirstTab} = state => state.${Placeholders.SecondTab}`,
-    '',
   ],
 };
 
@@ -96,7 +95,6 @@ const mappingToProps: ReduxSnippet = {
     'const mapStateToProps = (state) => ({})',
     '',
     'const mapDispatchToProps = {}',
-    '',
   ],
 };
 
diff --git a/src/sourceSnippets/sharedSnippets.ts b/src/sourceSnippets/sharedSnippets.ts
index 3f9e367..72e0848 100644
--- a/src/sourceSnippets/sharedSnippets.ts
+++ b/src/sourceSnippets/sharedSnippets.ts
@@ -1,30 +1,26 @@
 import { Placeholders } from '../types';
 
-export const reactComponent = ["import React, { Component } from 'react'", ''];
-export const react = ["import React from 'react'", ''];
+export const reactComponent = ["import React, { Component } from 'react'"];
+export const react = ["import React from 'react'"];
 export const reactPureComponent = [
   "import React, { PureComponent } from 'react'",
-  '',
 ];
 export const reactPropTypes = [
   "import React from 'react'",
   "import PropTypes from 'prop-types'",
-  '',
 ];
 
 export const reactWithReduxConnect = [
   "import React from 'react'",
   "import { connect } from 'react-redux'",
-  '',
 ];
 
 export const reactComponentWithReduxConnect = [
   "import React, { Component } from 'react'",
   "import { connect } from 'react-redux'",
-  '',
 ];
 
-export const reactWithMemo = ["import React, { memo } from 'react'", ''];
+export const reactWithMemo = ["import React, { memo } from 'react'"];
 
 export const reduxComponentExport = [
   '',
@@ -33,32 +29,23 @@ export const reduxComponentExport = [
   'const mapDispatchToProps = {}',
   '',
   `export default connect(mapStateToProps, mapDispatchToProps)(${Placeholders.FileName})`,
-  '',
 ];
 
 export const innerComponent = [
   '  return (',
-  '    <div>',
-  `      ${Placeholders.LastTab}`,
-  '    </div>',
+  `    <div>${Placeholders.LastTab}</div>`,
   '  )',
 ];
 
 export const innerComponentReturn = [
   '  render() {',
   '    return (',
-  '      <div>',
-  `        ${Placeholders.LastTab}`,
-  '      </div>',
+  `      <div>${Placeholders.LastTab}</div>`,
   '    )',
   '  }',
 ];
 
-export const exportDefault = [
-  '',
-  `export default ${Placeholders.FileName}`,
-  '',
-];
+export const exportDefault = ['', `export default ${Placeholders.FileName}`];
 
 export const propsTypeInterface = [Placeholders.TypeProps, ''];
 export const stateTypeInterface = [Placeholders.TypeState, ''];
diff --git a/src/sourceSnippets/tests.ts b/src/sourceSnippets/tests.ts
index 1a9612c..8a9f13c 100644
--- a/src/sourceSnippets/tests.ts
+++ b/src/sourceSnippets/tests.ts
@@ -21,7 +21,6 @@ const describeBlock: TestsSnippet = {
     `describe('${Placeholders.FirstTab}', () => {`,
     `  ${Placeholders.LastTab}`,
     '})',
-    '',
   ],
   description: 'Testing `describe` block',
 };
@@ -32,7 +31,6 @@ const testBlock: TestsSnippet = {
     `test('should ${Placeholders.FirstTab}', () => {`,
     `  ${Placeholders.LastTab}`,
     '})',
-    '',
   ],
   description: 'Testing `test` block',
 };
@@ -43,7 +41,6 @@ const testAsyncBlock: TestsSnippet = {
     `test('should ${Placeholders.FirstTab}', async () => {`,
     `  ${Placeholders.LastTab}`,
     '})',
-    '',
   ],
   description: 'Testing `asynchronous test` block',
 };
@@ -54,7 +51,6 @@ const itBlock: TestsSnippet = {
     `it('should ${Placeholders.FirstTab}', () => {`,
     `  ${Placeholders.LastTab}`,
     '})',
-    '',
   ],
   description: 'Testing `it` block',
 };
@@ -65,7 +61,6 @@ const itAsyncBlock: TestsSnippet = {
     `it('should ${Placeholders.FirstTab}', async () => {`,
     `  ${Placeholders.LastTab}`,
     '})',
-    '',
   ],
   description: 'Testing asynchronous `it` block',
 };
@@ -86,7 +81,6 @@ const setupReactTest: TestsSnippet = {
     '    expect(wrapper).toMatchSnapshot()',
     '  })',
     '})',
-    '',
   ],
 };
 const setupReactNativeTest: TestsSnippet = {
@@ -107,7 +101,6 @@ const setupReactNativeTest: TestsSnippet = {
     '    expect(wrapper).toMatchSnapshot()',
     '  })',
     '})',
-    '',
   ],
 };
 const setupReactComponentTestWithRedux: TestsSnippet = {
@@ -133,7 +126,6 @@ const setupReactComponentTestWithRedux: TestsSnippet = {
     '    expect(wrapper).toMatchSnapshot()',
     '  })',
     '})',
-    '',
   ],
   description: 'Create test component',
 };
@@ -161,7 +153,6 @@ const setupReactNativeTestWithRedux: TestsSnippet = {
     '    expect(wrapper).toMatchSnapshot()',
     '  })',
     '})',
-    '',
   ],
 };
 
diff --git a/src/sourceSnippets/typescript.ts b/src/sourceSnippets/typescript.ts
index cfa07d3..3b3657c 100644
--- a/src/sourceSnippets/typescript.ts
+++ b/src/sourceSnippets/typescript.ts
@@ -41,10 +41,7 @@ const exportType: TypescriptSnippet = {
 const exportInterface: TypescriptSnippet = {
   key: 'exportInterface',
   prefix: 'expint',
-  body: [
-    `export interface ${Placeholders.FirstTab} {${Placeholders.LastTab}}`,
-    '',
-  ],
+  body: [`export interface ${Placeholders.FirstTab} {${Placeholders.LastTab}}`],
 };
 
 const typescriptReactClassComponent: TypescriptSnippet = {
@@ -60,7 +57,6 @@ const typescriptReactClassComponent: TypescriptSnippet = {
     '',
     ...innerComponentReturn,
     '}',
-    '',
   ],
 };
 
@@ -105,7 +101,6 @@ const typescriptReactFunctionalComponent: TypescriptSnippet = {
     `export default function ${Placeholders.FileName}({}: Props) {`,
     ...innerComponent,
     '}',
-    '',
   ],
   description:
     'Creates a React Functional Component with ES7 module system and TypeScript interface',
@@ -135,7 +130,6 @@ const typescriptReactArrowFunctionComponent: TypescriptSnippet = {
     `const ${Placeholders.FileName} = (props: Props) => {`,
     ...innerComponent,
     '}',
-    '',
   ],
   description:
     'Creates a React Arrow Function Component with ES7 module system and TypeScript interface',
@@ -150,7 +144,6 @@ const typescriptReactClassPureComponent: TypescriptSnippet = {
     `export default class ${Placeholders.FileName} extends PureComponent<Props> {`,
     ...innerComponentReturn,
     '}',
-    '',
   ],
   description:
     'Creates a React pure component class with ES7 module system and TypeScript interface',
@@ -246,8 +239,8 @@ const typescriptReactNativeArrowFunctionComponentWithStyles: TypescriptSnippet =
       '  )',
       '}',
       ...exportDefault,
-      'const styles = StyleSheet.create({})',
       '',
+      'const styles = StyleSheet.create({})',
     ],
     description:
       'Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet',
diff --git a/tsconfig.json b/tsconfig.json
index c3b0b61..c1aa99d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,11 +2,6 @@
   "compilerOptions": {
     "allowJs": true,
     "allowSyntheticDefaultImports": true,
-    "baseUrl": ".",
-    "paths": {
-      "./*": ["./src/*"],
-      "./src/*": ["./src/*"]
-    },
     "esModuleInterop": true,
     "module": "amd",
     "moduleResolution": "Node",

From a5316493a0426ba70cc11b14092be2b9916b2a7c Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 00:42:17 +0100
Subject: [PATCH 02/18] fix: ts snippets

---
 src/sourceSnippets/typescript.ts | 39 +++++++++++---------------------
 1 file changed, 13 insertions(+), 26 deletions(-)

diff --git a/src/sourceSnippets/typescript.ts b/src/sourceSnippets/typescript.ts
index 3b3657c..05c8cdd 100644
--- a/src/sourceSnippets/typescript.ts
+++ b/src/sourceSnippets/typescript.ts
@@ -22,11 +22,9 @@ type TypescriptMappings = {
   typescriptReactClassExportComponent: 'tsrce';
   typescriptReactClassExportPureComponent: 'tsrpce';
   typescriptReactClassPureComponent: 'tsrpc';
-  typescriptReactFunctionMemoComponent: 'tsrmc';
   typescriptReactFunctionalComponent: 'tsrfc';
   typescriptReactFunctionalExportComponent: 'tsrfce';
   typescriptReactNativeArrowFunctionComponent: 'tsrnf';
-  typescriptReactNativeArrowFunctionComponentNamedProps: 'tsrnfi';
   typescriptReactNativeArrowFunctionComponentWithStyles: 'tsrnfs';
 };
 
@@ -41,7 +39,7 @@ const exportType: TypescriptSnippet = {
 const exportInterface: TypescriptSnippet = {
   key: 'exportInterface',
   prefix: 'expint',
-  body: [`export interface ${Placeholders.FirstTab} {${Placeholders.LastTab}}`],
+  body: [`export interface ${Placeholders.FirstTab} {}`],
 };
 
 const typescriptReactClassComponent: TypescriptSnippet = {
@@ -51,6 +49,7 @@ const typescriptReactClassComponent: TypescriptSnippet = {
     'Creates a React component class with ES7 module system and TypeScript interfaces',
   body: [
     ...reactComponent,
+    '',
     ...propsStateInterface,
     `export default class ${Placeholders.FileName} extends Component<Props, State> {`,
     '  state = {}',
@@ -65,6 +64,7 @@ const typescriptReactClassExportComponent: TypescriptSnippet = {
   prefix: 'tsrce',
   body: [
     ...reactComponent,
+    '',
     ...propsStateInterface,
     `class ${Placeholders.FileName} extends Component<Props, State> {`,
     '  state = {}',
@@ -82,6 +82,7 @@ const typescriptReactFunctionalExportComponent: TypescriptSnippet = {
   prefix: 'tsrfce',
   body: [
     ...react,
+    '',
     ...propsTypeInterface,
     `function ${Placeholders.FileName}({}: Props) {`,
     ...innerComponent,
@@ -97,6 +98,7 @@ const typescriptReactFunctionalComponent: TypescriptSnippet = {
   prefix: 'tsrfc',
   body: [
     ...react,
+    '',
     ...propsTypeInterface,
     `export default function ${Placeholders.FileName}({}: Props) {`,
     ...innerComponent,
@@ -111,6 +113,7 @@ const typescriptReactArrowFunctionExportComponent: TypescriptSnippet = {
   prefix: 'tsrafce',
   body: [
     ...react,
+    '',
     ...propsTypeInterface,
     `const ${Placeholders.FileName} = (props: Props) => {`,
     ...innerComponent,
@@ -126,6 +129,7 @@ const typescriptReactArrowFunctionComponent: TypescriptSnippet = {
   prefix: 'tsrafc',
   body: [
     ...react,
+    '',
     ...propsTypeInterface,
     `const ${Placeholders.FileName} = (props: Props) => {`,
     ...innerComponent,
@@ -140,6 +144,7 @@ const typescriptReactClassPureComponent: TypescriptSnippet = {
   prefix: 'tsrpc',
   body: [
     ...reactPureComponent,
+    '',
     ...propsTypeInterface,
     `export default class ${Placeholders.FileName} extends PureComponent<Props> {`,
     ...innerComponentReturn,
@@ -154,6 +159,7 @@ const typescriptReactClassExportPureComponent: TypescriptSnippet = {
   prefix: 'tsrpce',
   body: [
     ...reactPureComponent,
+    '',
     ...propsTypeInterface,
     `class ${Placeholders.FileName} extends PureComponent<Props> {`,
     ...innerComponentReturn,
@@ -170,6 +176,7 @@ const typescriptReactClassComponentRedux: TypescriptSnippet = {
   body: [
     "import { connect } from 'react-redux'",
     ...reactComponent,
+    '',
     ...propsStateInterface,
     `export class ${Placeholders.FileName} extends Component<Props, State> {`,
     '  state = {}',
@@ -188,6 +195,7 @@ const typescriptReactNativeArrowFunctionComponent: TypescriptSnippet = {
   body: [
     "import { View, Text } from 'react-native'",
     ...react,
+    '',
     ...propsTypeInterface,
     `const ${Placeholders.FileName} = (props: Props) => {`,
     '  return (',
@@ -199,30 +207,9 @@ const typescriptReactNativeArrowFunctionComponent: TypescriptSnippet = {
     ...exportDefault,
   ],
   description:
-    'Creates a React Native Arrow Function Component with ES7 module system and TypeScript interface',
+    'Creates a React Native Arrow Function Component with ES7 module system in TypeScript',
 };
 
-const typescriptReactNativeArrowFunctionComponentNamedProps: TypescriptSnippet =
-  {
-    key: 'typescriptReactNativeArrowFunctionComponentNamedProps',
-    prefix: 'tsrnfi',
-    body: [
-      "import { View } from 'react-native'",
-      ...react,
-      ...propsTypeInterface,
-      `const ${Placeholders.FileName}: React.FC<${Placeholders.FileName}Props> = (props) => {`,
-      '  return (',
-      '    <View>',
-      `      ${Placeholders.LastTab}`,
-      '    </View>',
-      '  )',
-      '}',
-      ...exportDefault,
-    ],
-    description:
-      'Creates a React Native Arrow Function Component with ES7 module system and named TypeScript interface',
-  };
-
 const typescriptReactNativeArrowFunctionComponentWithStyles: TypescriptSnippet =
   {
     key: 'typescriptReactNativeArrowFunctionComponentWithStyles',
@@ -230,6 +217,7 @@ const typescriptReactNativeArrowFunctionComponentWithStyles: TypescriptSnippet =
     body: [
       "import { StyleSheet, Text, View } from 'react-native'",
       ...react,
+      '',
       ...propsTypeInterface,
       `const ${Placeholders.FileName} = (props: Props) => {`,
       '  return (',
@@ -259,6 +247,5 @@ export default [
   typescriptReactClassExportPureComponent,
   typescriptReactClassComponentRedux,
   typescriptReactNativeArrowFunctionComponent,
-  typescriptReactNativeArrowFunctionComponentNamedProps,
   typescriptReactNativeArrowFunctionComponentWithStyles,
 ];

From fa001289faf6840470dcf095d284fd5fe56eb1d9 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 01:01:53 +0100
Subject: [PATCH 03/18] chore: remove LastTab placeholder

---
 src/helpers/snippetPlaceholders.ts   |  2 -
 src/sourceSnippets/components.ts     | 24 +++++++++--
 src/sourceSnippets/imports.ts        | 10 ++---
 src/sourceSnippets/others.ts         | 61 ++++++++++------------------
 src/sourceSnippets/reactNative.ts    |  8 ++--
 src/sourceSnippets/sharedSnippets.ts |  4 +-
 src/sourceSnippets/tests.ts          | 20 +++------
 src/sourceSnippets/typescript.ts     | 10 +++--
 src/types.ts                         |  2 -
 9 files changed, 63 insertions(+), 78 deletions(-)

diff --git a/src/helpers/snippetPlaceholders.ts b/src/helpers/snippetPlaceholders.ts
index 72595ff..5896a82 100644
--- a/src/helpers/snippetPlaceholders.ts
+++ b/src/helpers/snippetPlaceholders.ts
@@ -18,7 +18,6 @@ export const replaceSnippetPlaceholders = (snippetString: string) => {
     .replace(new RegExp(Placeholders.FirstTab, 'g'), '${1:first}')
     .replace(new RegExp(Placeholders.SecondTab, 'g'), '${2:second}')
     .replace(new RegExp(Placeholders.ThirdTab, 'g'), '${3:third}')
-    .replace(new RegExp(Placeholders.LastTab, 'g'), '$0')
     .replace(
       new RegExp(Placeholders.Capitalize, 'g'),
       '${1/(.*)/${1:/capitalize}/}',
@@ -36,7 +35,6 @@ export const revertSnippetPlaceholders = (snippetString: string) => {
     .replace(new RegExp(/\${1:first}/, 'g'), Placeholders.FirstTab)
     .replace(new RegExp(/\${2:second}/, 'g'), Placeholders.SecondTab)
     .replace(new RegExp(/\${3:third}/, 'g'), Placeholders.ThirdTab)
-    .replace(new RegExp(/\$0/, 'g'), Placeholders.LastTab)
     .replace(
       new RegExp(/\${1\/(.*)\/${1:\/capitalize}\/}/, 'g'),
       Placeholders.Capitalize,
diff --git a/src/sourceSnippets/components.ts b/src/sourceSnippets/components.ts
index a67fc0f..4889457 100644
--- a/src/sourceSnippets/components.ts
+++ b/src/sourceSnippets/components.ts
@@ -43,6 +43,7 @@ const reactClassComponent: ComponentsSnippet = {
   prefix: 'rcc',
   body: [
     ...reactComponent,
+    '',
     `export default class ${Placeholders.FileName} extends Component {`,
     ...innerComponentReturn,
     '}',
@@ -56,6 +57,7 @@ const reactClassExportComponent: ComponentsSnippet = {
   prefix: 'rce',
   body: [
     ...reactComponent,
+    '',
     `export class ${Placeholders.FileName} extends Component {`,
     ...innerComponentReturn,
     '}',
@@ -69,6 +71,7 @@ const reactFunctionalExportComponent: ComponentsSnippet = {
   prefix: 'rfce',
   body: [
     ...react,
+    '',
     `function ${Placeholders.FileName}() {`,
     ...innerComponent,
     '}',
@@ -82,6 +85,7 @@ const reactFunctionalComponent: ComponentsSnippet = {
   prefix: 'rfc',
   body: [
     ...react,
+    '',
     `export default function ${Placeholders.FileName}() {`,
     ...innerComponent,
     '}',
@@ -95,6 +99,7 @@ const reactFunctionalComponentWithPropTypes: ComponentsSnippet = {
   prefix: 'rfcp',
   body: [
     ...reactPropTypes,
+    '',
     `function ${Placeholders.FileName}(props) {`,
     ...innerComponent,
     '}',
@@ -112,6 +117,7 @@ const reactArrowFunctionExportComponent: ComponentsSnippet = {
   prefix: 'rafce',
   body: [
     ...react,
+    '',
     `const ${Placeholders.FileName} = () => {`,
     ...innerComponent,
     '}',
@@ -126,6 +132,7 @@ const reactArrowFunctionComponent: ComponentsSnippet = {
   prefix: 'rafc',
   body: [
     ...react,
+    '',
     `export const ${Placeholders.FileName} = () => {`,
     ...innerComponent,
     '}',
@@ -140,6 +147,7 @@ const reactArrowFunctionComponentWithPropTypes: ComponentsSnippet = {
   prefix: 'rafcp',
   body: [
     ...reactPropTypes,
+    '',
     `const ${Placeholders.FileName} = props => {`,
     ...innerComponent,
     '}',
@@ -157,6 +165,7 @@ const reactClassExportComponentWithPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactComponent,
+    '',
     `export class ${Placeholders.FileName} extends Component {`,
     '  static propTypes = {}',
     '',
@@ -172,6 +181,7 @@ const reactClassPureComponent: ComponentsSnippet = {
   prefix: 'rpc',
   body: [
     ...reactPureComponent,
+    '',
     `export default class ${Placeholders.FileName} extends PureComponent {`,
     ...innerComponentReturn,
     '}',
@@ -185,6 +195,7 @@ const reactClassExportPureComponent: ComponentsSnippet = {
   prefix: 'rpce',
   body: [
     ...reactPureComponent,
+    '',
     `export class ${Placeholders.FileName} extends PureComponent {`,
     ...innerComponentReturn,
     '}',
@@ -200,6 +211,7 @@ const reactClassPureComponentWithPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactPureComponent,
+    '',
     `export default class ${Placeholders.FileName} extends PureComponent {`,
     '  static propTypes = {}',
     '',
@@ -214,7 +226,7 @@ const reactFunctionMemoComponent: ComponentsSnippet = {
   key: 'reactFunctionMemoComponent',
   prefix: 'rmc',
   body: [
-    "import React, { memo } from 'react'",
+    ...reactWithMemo,
     '',
     `export default memo(function ${Placeholders.FileName}() {`,
     ...innerComponent,
@@ -230,6 +242,7 @@ const reactFunctionMemoComponentWithPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactWithMemo,
+    '',
     `const ${Placeholders.FileName} = memo(function ${Placeholders.FileName}(props) {`,
     ...innerComponent,
     '})',
@@ -247,10 +260,9 @@ const reactClassComponentPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactComponent,
+    '',
     `export default class ${Placeholders.FileName} extends Component {`,
-    '  static propTypes = {',
-    `    ${Placeholders.SecondTab}: ${Placeholders.ThirdTab}`,
-    '  }',
+    `  static propTypes = {${Placeholders.SecondTab}: ${Placeholders.ThirdTab}}`,
     '',
     ...innerComponentReturn,
     '}',
@@ -265,6 +277,7 @@ const reactClassComponentRedux: ComponentsSnippet = {
   prefix: 'rcredux',
   body: [
     ...reactComponentWithReduxConnect,
+    '',
     `export class ${Placeholders.FileName} extends Component {`,
     ...innerComponentReturn,
     '}',
@@ -280,6 +293,7 @@ const reactClassComponentReduxPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactComponentWithReduxConnect,
+    '',
     `export class ${Placeholders.FileName} extends Component {`,
     '  static propTypes = {',
     `    ${Placeholders.SecondTab}: ${Placeholders.ThirdTab}`,
@@ -298,6 +312,7 @@ const reactFunctionalComponentRedux: ComponentsSnippet = {
   prefix: 'rfcredux',
   body: [
     ...reactWithReduxConnect,
+    '',
     `export const ${Placeholders.FileName} = (props) => {`,
     ...innerComponent,
     '}',
@@ -313,6 +328,7 @@ const reactFunctionalComponentReduxPropTypes: ComponentsSnippet = {
   body: [
     "import PropTypes from 'prop-types'",
     ...reactWithReduxConnect,
+    '',
     `export const ${Placeholders.FileName} = (props) => {`,
     ...innerComponent,
     '}',
diff --git a/src/sourceSnippets/imports.ts b/src/sourceSnippets/imports.ts
index ea2c116..f28281b 100644
--- a/src/sourceSnippets/imports.ts
+++ b/src/sourceSnippets/imports.ts
@@ -1,5 +1,7 @@
 import { Placeholders, SnippetMapping } from '../types';
 
+import { reactWithMemo } from './sharedSnippets';
+
 type ImportsMappings = {
   import: 'imp';
   importAs: 'ima';
@@ -76,17 +78,13 @@ const importReactWithPureComponentAndPropTypes: ImportsSnippet = {
 const importReactWithMemo: ImportsSnippet = {
   key: 'importReactWithMemo',
   prefix: 'imrm',
-  body: ["import React, { memo } from 'react'"],
+  body: reactWithMemo,
 };
 
 const importReactWithMemoAndPropTypes: ImportsSnippet = {
   key: 'importReactWithMemoAndPropTypes',
   prefix: 'imrmp',
-  body: [
-    "import React, { memo } from 'react'",
-    "import PropTypes from 'prop-types'",
-    '',
-  ],
+  body: [...reactWithMemo, "import PropTypes from 'prop-types'", ''],
 };
 
 const importPropTypes: ImportsSnippet = {
diff --git a/src/sourceSnippets/others.ts b/src/sourceSnippets/others.ts
index e9e035e..76bf1db 100644
--- a/src/sourceSnippets/others.ts
+++ b/src/sourceSnippets/others.ts
@@ -110,7 +110,6 @@ const propertyGet: OthersSnippet = {
     `get ${Placeholders.FirstTab}() {`,
     `  return this.${Placeholders.SecondTab}`,
     '}',
-    '',
   ],
   description: 'Creates a getter property inside a class',
 };
@@ -128,7 +127,7 @@ const forEach: OthersSnippet = {
   key: 'forEach',
   prefix: 'fre',
   body: [
-    `${Placeholders.FirstTab}.forEach(${Placeholders.SecondTab} => {${Placeholders.LastTab}})`,
+    `${Placeholders.FirstTab}.forEach(${Placeholders.SecondTab} => {${Placeholders.ThirdTab}})`,
   ],
   description: 'Creates a forEach statement',
 };
@@ -137,7 +136,7 @@ const forOf: OthersSnippet = {
   key: 'forOf',
   prefix: 'fof',
   body: [
-    `for(let ${Placeholders.FirstTab} of ${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
+    `for(let ${Placeholders.FirstTab} of ${Placeholders.SecondTab}) {${Placeholders.ThirdTab}}`,
   ],
   description: 'Iterating over property names of iterable objects',
 };
@@ -146,7 +145,7 @@ const forIn: OthersSnippet = {
   key: 'forIn',
   prefix: 'fin',
   body: [
-    `for(let ${Placeholders.FirstTab} in ${Placeholders.SecondTab}) {${Placeholders.LastTab}}`,
+    `for(let ${Placeholders.FirstTab} in ${Placeholders.SecondTab}) {${Placeholders.ThirdTab}}`,
   ],
   description: 'Iterating over property values of iterable objects',
 };
@@ -154,7 +153,7 @@ const forIn: OthersSnippet = {
 const anonymousFunction: OthersSnippet = {
   key: 'anonymousFunction',
   prefix: 'anfn',
-  body: [`(${Placeholders.FirstTab}) => {`, `  ${Placeholders.SecondTab}`, '}'],
+  body: [`(${Placeholders.FirstTab}) => { ${Placeholders.SecondTab} }`],
   description: 'Creates an anonymous function',
 };
 
@@ -162,7 +161,7 @@ const namedFunction: OthersSnippet = {
   key: 'namedFunction',
   prefix: 'nfn',
   body: [
-    `const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => {${Placeholders.ThirdTab}}`,
+    `const ${Placeholders.FirstTab} = (${Placeholders.SecondTab}) => { ${Placeholders.ThirdTab} }`,
   ],
   description: 'Creates a named function',
 };
@@ -185,10 +184,7 @@ const setInterval: OthersSnippet = {
   key: 'setInterval',
   prefix: 'sti',
   body: [
-    'setInterval(() => {',
-    `  ${Placeholders.FirstTab}`,
-    `}, ${Placeholders.SecondTab})`,
-    '',
+    `setInterval(() => { ${Placeholders.FirstTab} }, ${Placeholders.SecondTab})`,
   ],
   description: 'Executes the given function at specified intervals',
 };
@@ -197,10 +193,7 @@ const setTimeOut: OthersSnippet = {
   key: 'setTimeOut',
   prefix: 'sto',
   body: [
-    'setTimeout(() => {',
-    `  ${Placeholders.SecondTab}`,
-    `}, ${Placeholders.FirstTab})`,
-    '',
+    `setTimeout(() => { ${Placeholders.FirstTab} }, ${Placeholders.SecondTab})`,
   ],
   description: 'Executes the given function after the specified delay',
 };
@@ -209,10 +202,7 @@ const promise: OthersSnippet = {
   key: 'promise',
   prefix: 'prom',
   body: [
-    'return new Promise((resolve, reject) => {',
-    `  ${Placeholders.LastTab}`,
-    '})',
-    '',
+    `return new Promise((resolve, reject) => { ${Placeholders.FirstTab} })`,
   ],
   description: 'Creates and returns a new Promise in the standard ES7 syntax',
 };
@@ -242,7 +232,6 @@ const classConstructor: OthersSnippet = {
     `     ${Placeholders.FirstTab}`,
     '  }',
     '}',
-    '',
   ],
   description:
     "Adds a default constructor for it('', () => {})the class that contains props as arguments",
@@ -251,14 +240,14 @@ const classConstructor: OthersSnippet = {
 const emptyState: OthersSnippet = {
   key: 'emptyState',
   prefix: 'est',
-  body: ['state = {', `  ${Placeholders.FirstTab}`, '}'],
+  body: [`state = { ${Placeholders.FirstTab} }`],
   description: 'Creates empty state object. To be used in a constructor.',
 };
 
 const componentDidMount: OthersSnippet = {
   key: 'componentDidMount',
   prefix: 'cdm',
-  body: ['componentDidMount() {', `  ${Placeholders.FirstTab}`, '}'],
+  body: [`componentDidMount() { ${Placeholders.FirstTab} }`],
   description:
     'Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.',
 };
@@ -267,10 +256,7 @@ const shouldComponentUpdate: OthersSnippet = {
   key: 'shouldComponentUpdate',
   prefix: 'scu',
   body: [
-    'shouldComponentUpdate(nextProps, nextState) {',
-    `  ${Placeholders.FirstTab}`,
-    '}',
-    '',
+    `shouldComponentUpdate(nextProps, nextState) { ${Placeholders.FirstTab} }`,
   ],
   description:
     'Invoked before rendering when new props or state are being received. ',
@@ -280,10 +266,7 @@ const componentDidUpdate: OthersSnippet = {
   key: 'componentDidUpdate',
   prefix: 'cdup',
   body: [
-    'componentDidUpdate(prevProps, prevState) {',
-    `  ${Placeholders.LastTab}`,
-    '}',
-    '',
+    `componentDidUpdate(prevProps, prevState) { ${Placeholders.FirstTab}} `,
   ],
   description:
     "Invoked immediately after the component's updates are flushed to the DOM.",
@@ -292,7 +275,7 @@ const componentDidUpdate: OthersSnippet = {
 const componentWillUnmount: OthersSnippet = {
   key: 'componentWillUnmount',
   prefix: 'cwun',
-  body: ['componentWillUnmount() {', `  ${Placeholders.FirstTab}`, '}'],
+  body: [`componentWillUnmount() {${Placeholders.FirstTab} }`],
   description:
     'Invoked immediately before a component is unmounted from the DOM.',
 };
@@ -311,7 +294,7 @@ const getSnapshotBeforeUpdate: OthersSnippet = {
   key: 'getSnapshotBeforeUpdate',
   prefix: 'gsbu',
   body: [
-    `getSnapshotBeforeUpdate = (prevProps, prevState) => {${Placeholders.LastTab}}`,
+    `getSnapshotBeforeUpdate = (prevProps, prevState) => {${Placeholders.FirstTab}}`,
   ],
   description:
     'Called right before mutations are made (e.g. before the DOM is updated)',
@@ -320,21 +303,21 @@ const getSnapshotBeforeUpdate: OthersSnippet = {
 const createContext: OthersSnippet = {
   key: 'createContext',
   prefix: 'rcontext',
-  body: [`const ${Placeholders.LastTab} = React.createContext()`],
+  body: [`const ${Placeholders.FirstTab} = React.createContext()`],
   description: 'Create React context',
 };
 
 const createRef: OthersSnippet = {
   key: 'createRef',
   prefix: 'cref',
-  body: [`this.${Placeholders.LastTab}Ref = React.createRef()`],
+  body: [`this.${Placeholders.FirstTab}Ref = React.createRef()`],
   description: 'Create ref statement used inside constructor',
 };
 
 const componentSetStateObject: OthersSnippet = {
   key: 'componentSetStateObject',
   prefix: 'sst',
-  body: [`this.setState({${Placeholders.LastTab}})`],
+  body: [`this.setState({${Placeholders.FirstTab}})`],
   description: 'Performs a shallow merge of nextState into current state',
 };
 
@@ -342,7 +325,7 @@ const componentSetStateFunc: OthersSnippet = {
   key: 'componentSetStateFunc',
   prefix: 'ssf',
   body: [
-    `this.setState((state, props) => { return { ${Placeholders.LastTab} }})`,
+    `this.setState((state, props) => { return { ${Placeholders.FirstTab} }})`,
   ],
   description: 'Performs a shallow merge of nextState into current state',
 };
@@ -350,14 +333,14 @@ const componentSetStateFunc: OthersSnippet = {
 const componentProps: OthersSnippet = {
   key: 'componentProps',
   prefix: 'props',
-  body: [`this.props.${Placeholders.LastTab}`],
+  body: [`this.props.${Placeholders.FirstTab}`],
   description: "Access component's props",
 };
 
 const componentState: OthersSnippet = {
   key: 'componentState',
   prefix: 'state',
-  body: [`this.state.${Placeholders.LastTab}`],
+  body: [`this.state.${Placeholders.FirstTab}`],
 };
 
 const bindThis: OthersSnippet = {
@@ -372,7 +355,7 @@ const bindThis: OthersSnippet = {
 const commentBigBlock: OthersSnippet = {
   key: 'commentBigBlock',
   prefix: 'cmmb',
-  body: ['/**', ` * ${Placeholders.LastTab}`, ' */'],
+  body: ['/**', ` * ${Placeholders.FirstTab}`, ' */'],
 };
 
 const hocComponentWithRedux: OthersSnippet = {
@@ -421,7 +404,7 @@ const hocComponent: OthersSnippet = {
 const typeofSnippet: OthersSnippet = {
   key: 'typeofSnippet',
   prefix: 'tpf',
-  body: [`typeof ${Placeholders.LastTab}`],
+  body: [`typeof ${Placeholders.FirstTab}`],
 };
 
 export default [
diff --git a/src/sourceSnippets/reactNative.ts b/src/sourceSnippets/reactNative.ts
index 2c8db65..0a06d6c 100644
--- a/src/sourceSnippets/reactNative.ts
+++ b/src/sourceSnippets/reactNative.ts
@@ -28,7 +28,7 @@ const reactNativeComponentReturn = [
   '  render() {',
   '    return (',
   '      <View>',
-  `        <Text>${Placeholders.LastTab}</Text>`,
+  `        <Text>${Placeholders.FirstTab}</Text>`,
   '      </View>',
   '    )',
   '  }',
@@ -37,7 +37,7 @@ const reactNativeComponentReturn = [
 const reactNativeReturn = [
   '  return (',
   '    <View>',
-  '      <Text>$0</Text>',
+  `      <Text>${Placeholders.FirstTab}</Text>`,
   '    </View>',
   '  )',
 ];
@@ -45,13 +45,13 @@ const reactNativeReturn = [
 const reactNativeImport: ReactNativeSnippet = {
   key: 'reactNativeImport',
   prefix: 'imrn',
-  body: [`import { ${Placeholders.LastTab} } from 'react-native'`],
+  body: [`import { ${Placeholders.FirstTab} } from 'react-native'`],
 };
 
 const reactNativeStyles: ReactNativeSnippet = {
   key: 'reactNativeStyles',
   prefix: 'rnstyle',
-  body: [`const styles = StyleSheet.create({${Placeholders.LastTab}})`],
+  body: [`const styles = StyleSheet.create({${Placeholders.FirstTab}})`],
 };
 
 const reactNativeComponent: ReactNativeSnippet = {
diff --git a/src/sourceSnippets/sharedSnippets.ts b/src/sourceSnippets/sharedSnippets.ts
index 72e0848..6a199ac 100644
--- a/src/sourceSnippets/sharedSnippets.ts
+++ b/src/sourceSnippets/sharedSnippets.ts
@@ -33,14 +33,14 @@ export const reduxComponentExport = [
 
 export const innerComponent = [
   '  return (',
-  `    <div>${Placeholders.LastTab}</div>`,
+  `    <div>${Placeholders.FirstTab}</div>`,
   '  )',
 ];
 
 export const innerComponentReturn = [
   '  render() {',
   '    return (',
-  `      <div>${Placeholders.LastTab}</div>`,
+  `      <div>${Placeholders.FirstTab}</div>`,
   '    )',
   '  }',
 ];
diff --git a/src/sourceSnippets/tests.ts b/src/sourceSnippets/tests.ts
index 8a9f13c..73ebadb 100644
--- a/src/sourceSnippets/tests.ts
+++ b/src/sourceSnippets/tests.ts
@@ -18,9 +18,7 @@ const describeBlock: TestsSnippet = {
   key: 'describeBlock',
   prefix: 'desc',
   body: [
-    `describe('${Placeholders.FirstTab}', () => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
+    `describe('${Placeholders.FirstTab}', () => { ${Placeholders.SecondTab} })`,
   ],
   description: 'Testing `describe` block',
 };
@@ -28,9 +26,7 @@ const testBlock: TestsSnippet = {
   key: 'testBlock',
   prefix: 'test',
   body: [
-    `test('should ${Placeholders.FirstTab}', () => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
+    `test('should ${Placeholders.FirstTab}', () => { ${Placeholders.SecondTab} })`,
   ],
   description: 'Testing `test` block',
 };
@@ -38,9 +34,7 @@ const testAsyncBlock: TestsSnippet = {
   key: 'testAsyncBlock',
   prefix: 'testa',
   body: [
-    `test('should ${Placeholders.FirstTab}', async () => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
+    `test('should ${Placeholders.FirstTab}', async () => { ${Placeholders.SecondTab} })`,
   ],
   description: 'Testing `asynchronous test` block',
 };
@@ -48,9 +42,7 @@ const itBlock: TestsSnippet = {
   key: 'itBlock',
   prefix: 'tit',
   body: [
-    `it('should ${Placeholders.FirstTab}', () => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
+    `it('should ${Placeholders.FirstTab}', () => { ${Placeholders.SecondTab} })`,
   ],
   description: 'Testing `it` block',
 };
@@ -58,9 +50,7 @@ const itAsyncBlock: TestsSnippet = {
   key: 'itAsyncBlock',
   prefix: 'tita',
   body: [
-    `it('should ${Placeholders.FirstTab}', async () => {`,
-    `  ${Placeholders.LastTab}`,
-    '})',
+    `it('should ${Placeholders.FirstTab}', async () => { ${Placeholders.SecondTab} })`,
   ],
   description: 'Testing asynchronous `it` block',
 };
diff --git a/src/sourceSnippets/typescript.ts b/src/sourceSnippets/typescript.ts
index 05c8cdd..d024a0c 100644
--- a/src/sourceSnippets/typescript.ts
+++ b/src/sourceSnippets/typescript.ts
@@ -31,7 +31,7 @@ type TypescriptMappings = {
 export type TypescriptSnippet = SnippetMapping<TypescriptMappings>;
 
 const exportType: TypescriptSnippet = {
-  body: [`export type ${Placeholders.FirstTab} = {${Placeholders.LastTab}}`],
+  body: [`export type ${Placeholders.FirstTab} = {${Placeholders.SecondTab}}`],
   key: 'exportType',
   prefix: 'exptp',
 };
@@ -39,7 +39,9 @@ const exportType: TypescriptSnippet = {
 const exportInterface: TypescriptSnippet = {
   key: 'exportInterface',
   prefix: 'expint',
-  body: [`export interface ${Placeholders.FirstTab} {}`],
+  body: [
+    `export interface ${Placeholders.FirstTab} {${Placeholders.SecondTab}}`,
+  ],
 };
 
 const typescriptReactClassComponent: TypescriptSnippet = {
@@ -200,7 +202,7 @@ const typescriptReactNativeArrowFunctionComponent: TypescriptSnippet = {
     `const ${Placeholders.FileName} = (props: Props) => {`,
     '  return (',
     '    <View>',
-    `      <Text>${Placeholders.LastTab}</Text>`,
+    `      <Text>${Placeholders.FirstTab}</Text>`,
     '    </View>',
     '  )',
     '}',
@@ -222,7 +224,7 @@ const typescriptReactNativeArrowFunctionComponentWithStyles: TypescriptSnippet =
       `const ${Placeholders.FileName} = (props: Props) => {`,
       '  return (',
       '    <View>',
-      `      <Text>${Placeholders.LastTab}</Text>`,
+      `      <Text>${Placeholders.FirstTab}</Text>`,
       '    </View>',
       '  )',
       '}',
diff --git a/src/types.ts b/src/types.ts
index 7d48458..0d2d726 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -10,7 +10,6 @@ export const Placeholders = {
   FirstTab: 'FIRST_TAB',
   SecondTab: 'SECOND_TAB',
   ThirdTab: 'THIRD_TAB',
-  LastTab: 'LAST_TAB',
   Capitalize: 'CAPITALIZE',
   TypeProps: 'TYPE_PROPS',
   TypeState: 'TYPE_STATE',
@@ -21,7 +20,6 @@ export const Mappings = {
   FirstTab: '${1:first}',
   SecondTab: '${2:second}',
   ThirdTab: '${3:third}',
-  LastTab: '$0',
   Capitalize: '${1/(.*)/${1:/capitalize}/}',
   TypeProps: 'type Props = {}',
   TypeState: 'type State = {}',

From c212942e488548741b536c3dc1842f3fcb5698e7 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 01:11:39 +0100
Subject: [PATCH 04/18] fix: components

---
 src/sourceSnippets/components.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/sourceSnippets/components.ts b/src/sourceSnippets/components.ts
index 4889457..09ef578 100644
--- a/src/sourceSnippets/components.ts
+++ b/src/sourceSnippets/components.ts
@@ -228,10 +228,10 @@ const reactFunctionMemoComponent: ComponentsSnippet = {
   body: [
     ...reactWithMemo,
     '',
-    `export default memo(function ${Placeholders.FileName}() {`,
+    `const ${Placeholders.FileName} = memo(() => {`,
     ...innerComponent,
     '})',
-    '',
+    ...exportDefault,
   ],
   description: 'Creates a React Memo Function Component with ES7 module system',
 };
@@ -243,7 +243,7 @@ const reactFunctionMemoComponentWithPropTypes: ComponentsSnippet = {
     "import PropTypes from 'prop-types'",
     ...reactWithMemo,
     '',
-    `const ${Placeholders.FileName} = memo(function ${Placeholders.FileName}(props) {`,
+    `const ${Placeholders.FileName} = memo((props) => {`,
     ...innerComponent,
     '})',
     '',

From 3cd5f97cda173cb3b0861b84f935b7f61b138910 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 22:13:07 +0100
Subject: [PATCH 05/18] fix: initial hooks for prettier, generated with
 standard

---
 docs/Snippets.md                         |  356 ++--
 package.json                             |    2 +
 src/helpers/parseSnippetToBody.ts        |   19 +-
 src/helpers/revertSnippetPlaceholders.ts |    0
 src/index.ts                             |    4 +-
 src/snippets/generated.json              | 1895 +++++++++++++++++++++-
 src/sourceSnippets/hooks.ts              |    5 +-
 src/sourceSnippets/redux.ts              |    4 +-
 src/types.ts                             |   14 +-
 9 files changed, 2090 insertions(+), 209 deletions(-)
 delete mode 100644 src/helpers/revertSnippetPlaceholders.ts

diff --git a/docs/Snippets.md b/docs/Snippets.md
index 1b54713..135e201 100644
--- a/docs/Snippets.md
+++ b/docs/Snippets.md
@@ -157,11 +157,11 @@ I.E. `tsrcc`
 ### `rcc`
 
 ```javascript
-import React, { Component } from 'react';
+import React, { Component } from 'react'
 
 export default class FileName extends Component {
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 ```
@@ -169,42 +169,42 @@ export default class FileName extends Component {
 ### `rce`
 
 ```javascript
-import React, { Component } from 'react';
+import React, { Component } from 'react'
 
 export class FileName extends Component {
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 
-export default $1;
+export default $1
 ```
 
 ### `rcep`
 
 ```javascript
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
 
 export class FileName extends Component {
-  static propTypes = {};
+  static propTypes = {}
 
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 
-export default $1;
+export default $1
 ```
 
 ### `rpc`
 
 ```javascript
-import React, { PureComponent } from 'react';
+import React, { PureComponent } from 'react'
 
 export default class FileName extends PureComponent {
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 ```
@@ -212,14 +212,14 @@ export default class FileName extends PureComponent {
 ### `rpcp`
 
 ```javascript
-import React, { PureComponent } from 'react';
-import PropTypes from 'prop-types';
+import React, { PureComponent } from 'react'
+import PropTypes from 'prop-types'
 
 export default class FileName extends PureComponent {
-  static propTypes = {};
+  static propTypes = {}
 
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 ```
@@ -227,33 +227,33 @@ export default class FileName extends PureComponent {
 ### `rpce`
 
 ```javascript
-import React, { PureComponent } from 'react';
-import PropTypes from 'prop-types';
+import React, { PureComponent } from 'react'
+import PropTypes from 'prop-types'
 
 export class FileName extends PureComponent {
-  static propTypes = {};
+  static propTypes = {}
 
   render() {
-    return <div>$2</div>;
+    return <div>$2</div>
   }
 }
 
-export default FileName;
+export default FileName
 ```
 
 ### `rccp`
 
 ```javascript
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
 
 export default class FileName extends Component {
   static propTypes = {
     $2: $3,
-  };
+  }
 
   render() {
-    return <div>$4</div>;
+    return <div>$4</div>
   }
 }
 ```
@@ -261,190 +261,190 @@ export default class FileName extends Component {
 ### `rfcp`
 
 ```javascript
-import React from 'react';
-import PropTypes from 'prop-types';
+import React from 'react'
+import PropTypes from 'prop-types'
 
 function $1(props) {
-  return <div>$0</div>;
+  return <div>$0</div>
 }
 
-$1.propTypes = {};
+$1.propTypes = {}
 
-export default $1;
+export default $1
 ```
 
 ### `rfc`
 
 ```javascript
-import React from 'react';
+import React from 'react'
 
 export default function $1() {
-  return <div>$0</div>;
+  return <div>$0</div>
 }
 ```
 
 ### `rfce`
 
 ```javascript
-import React from 'react';
+import React from 'react'
 
 function $1() {
-  return <div>$0</div>;
+  return <div>$0</div>
 }
 
-export default $1;
+export default $1
 ```
 
 ### `rafcp`
 
 ```javascript
-import React from 'react';
-import PropTypes from 'prop-types';
+import React from 'react'
+import PropTypes from 'prop-types'
 
 const $1 = (props) => {
-  return <div>$0</div>;
-};
+  return <div>$0</div>
+}
 
-$1.propTypes = {};
+$1.propTypes = {}
 
-export default $1;
+export default $1
 ```
 
 ### `rafc`
 
 ```javascript
-import React from 'react';
+import React from 'react'
 
 export const $1 = () => {
-  return <div>$0</div>;
-};
+  return <div>$0</div>
+}
 ```
 
 ### `rafce`
 
 ```javascript
-import React from 'react';
+import React from 'react'
 
 const $1 = () => {
-  return <div>$0</div>;
-};
+  return <div>$0</div>
+}
 
-export default $1;
+export default $1
 ```
 
 ### `rmc`
 
 ```javascript
-import React, { memo } from 'react';
+import React, { memo } from 'react'
 
 export default memo(function $1() {
-  return <div>$0</div>;
-});
+  return <div>$0</div>
+})
 ```
 
 ### `rmcp`
 
 ```javascript
-import React, { memo } from 'react';
-import PropTypes from 'prop-types';
+import React, { memo } from 'react'
+import PropTypes from 'prop-types'
 
 const $1 = memo(function $1(props) {
-  return <div>$0</div>;
-});
+  return <div>$0</div>
+})
 
-$1.propTypes = {};
+$1.propTypes = {}
 
-export default $1;
+export default $1
 ```
 
 ### `rcredux`
 
 ```javascript
-import React, { Component } from 'react';
-import { connect } from 'react-redux';
+import React, { Component } from 'react'
+import { connect } from 'react-redux'
 
 export class FileName extends Component {
   render() {
-    return <div>$4</div>;
+    return <div>$4</div>
   }
 }
 
-const mapStateToProps = (state) => ({});
+const mapStateToProps = (state) => ({})
 
-const mapDispatchToProps = {};
+const mapDispatchToProps = {}
 
-export default connect(mapStateToProps, mapDispatchToProps)(FileName);
+export default connect(mapStateToProps, mapDispatchToProps)(FileName)
 ```
 
 ### `rcreduxp`
 
 ```javascript
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
 
 export class FileName extends Component {
   static propTypes = {
     $2: $3,
-  };
+  }
 
   render() {
-    return <div>$4</div>;
+    return <div>$4</div>
   }
 }
 
-const mapStateToProps = (state) => ({});
+const mapStateToProps = (state) => ({})
 
-const mapDispatchToProps = {};
+const mapDispatchToProps = {}
 
-export default connect(mapStateToProps, mapDispatchToProps)(FileName);
+export default connect(mapStateToProps, mapDispatchToProps)(FileName)
 ```
 
 ### `rfcredux`
 
 ```javascript
-import React, { Component } from 'react';
-import { connect } from 'react-redux';
+import React, { Component } from 'react'
+import { connect } from 'react-redux'
 
 export const FileName = () => {
-  return <div>$4</div>;
-};
+  return <div>$4</div>
+}
 
-const mapStateToProps = (state) => ({});
+const mapStateToProps = (state) => ({})
 
-const mapDispatchToProps = {};
+const mapDispatchToProps = {}
 
-export default connect(mapStateToProps, mapDispatchToProps)(FileName);
+export default connect(mapStateToProps, mapDispatchToProps)(FileName)
 ```
 
 ### `rfreduxp`
 
 ```javascript
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
 
 export const FileName = () => {
-  return <div>$4</div>;
-};
+  return <div>$4</div>
+}
 
 FileName.propTypes = {
   $2: $3,
-};
+}
 
-const mapStateToProps = (state) => ({});
+const mapStateToProps = (state) => ({})
 
-const mapDispatchToProps = {};
+const mapDispatchToProps = {}
 
-export default connect(mapStateToProps, mapDispatchToProps)(FileName);
+export default connect(mapStateToProps, mapDispatchToProps)(FileName)
 ```
 
 ### `reduxmap`
 
 ```javascript
-const mapStateToProps = (state) => ({});
+const mapStateToProps = (state) => ({})
 
-const mapDispatchToProps = {};
+const mapDispatchToProps = {}
 ```
 
 ## React Native Components
@@ -452,8 +452,8 @@ const mapDispatchToProps = {};
 ### `rnc`
 
 ```javascript
-import React, { Component } from 'react';
-import { Text, View } from 'react-native';
+import React, { Component } from 'react'
+import { Text, View } from 'react-native'
 
 export default class FileName extends Component {
   render() {
@@ -461,7 +461,7 @@ export default class FileName extends Component {
       <View>
         <Text> $2 </Text>
       </View>
-    );
+    )
   }
 }
 ```
@@ -469,76 +469,76 @@ export default class FileName extends Component {
 ### `rnf`
 
 ```javascript
-import React from 'react';
-import { View, Text } from 'react-native';
+import React from 'react'
+import { View, Text } from 'react-native'
 
 export default function $1() {
   return (
     <View>
       <Text> $2 </Text>
     </View>
-  );
+  )
 }
 ```
 
 ### `rnfs`
 
 ```javascript
-import React from 'react';
-import { StyleSheet, View, Text } from 'react-native';
+import React from 'react'
+import { StyleSheet, View, Text } from 'react-native'
 
 export default function $1() {
   return (
     <View>
       <Text> $2 </Text>
     </View>
-  );
+  )
 }
 
-const styles = StyleSheet.create({});
+const styles = StyleSheet.create({})
 ```
 
 ### `rnfe`
 
 ```javascript
-import React from 'react';
-import { View, Text } from 'react-native';
+import React from 'react'
+import { View, Text } from 'react-native'
 
 const $1 = () => {
   return (
     <View>
       <Text> $2 </Text>
     </View>
-  );
-};
+  )
+}
 
-export default $1;
+export default $1
 ```
 
 ### `rnfes`
 
 ```javascript
-import React from 'react';
-import { StyleSheet, View, Text } from 'react-native';
+import React from 'react'
+import { StyleSheet, View, Text } from 'react-native'
 
 const $1 = () => {
   return (
     <View>
       <Text> $2 </Text>
     </View>
-  );
-};
+  )
+}
 
-export default $1;
+export default $1
 
-const styles = StyleSheet.create({});
+const styles = StyleSheet.create({})
 ```
 
 ### `rncs`
 
 ```javascript
-import React, { Component } from 'react';
-import { Text, StyleSheet, View } from 'react-native';
+import React, { Component } from 'react'
+import { Text, StyleSheet, View } from 'react-native'
 
 export default class FileName extends Component {
   render() {
@@ -546,18 +546,18 @@ export default class FileName extends Component {
       <View>
         <Text> $2 </Text>
       </View>
-    );
+    )
   }
 }
 
-const styles = StyleSheet.create({});
+const styles = StyleSheet.create({})
 ```
 
 ### `rnce`
 
 ```javascript
-import React, { Component } from 'react';
-import { Text, View } from 'react-native';
+import React, { Component } from 'react'
+import { Text, View } from 'react-native'
 
 export class FileName extends Component {
   render() {
@@ -565,11 +565,11 @@ export class FileName extends Component {
       <View>
         <Text> $2 </Text>
       </View>
-    );
+    )
   }
 }
 
-export default $1;
+export default $1
 ```
 
 ## Others
@@ -588,147 +588,147 @@ export default $1;
 
 ```javascript
 describe('$1', () => {
-  $2;
-});
+  $2
+})
 ```
 
 ### `test`
 
 ```javascript
 test('should $1', () => {
-  $2;
-});
+  $2
+})
 ```
 
 ### `tit`
 
 ```javascript
 it('should $1', () => {
-  $2;
-});
+  $2
+})
 ```
 
 ### `stest`
 
 ```javascript
-import React from 'react';
-import renderer from 'react-test-renderer';
+import React from 'react'
+import renderer from 'react-test-renderer'
 
-import { $1 } from '../$1';
+import { $1 } from '../$1'
 
 describe('<$1 />', () => {
-  const defaultProps = {};
-  const wrapper = renderer.create(<$1 {...defaultProps} />);
+  const defaultProps = {}
+  const wrapper = renderer.create(<$1 {...defaultProps} />)
 
   test('render', () => {
-    expect(wrapper).toMatchSnapshot();
-  });
-});
+    expect(wrapper).toMatchSnapshot()
+  })
+})
 ```
 
 ### `srtest`
 
 ```javascript
-import React from 'react';
-import renderer from 'react-test-renderer';
-import { Provider } from 'react-redux';
+import React from 'react'
+import renderer from 'react-test-renderer'
+import { Provider } from 'react-redux'
 
-import store from 'src/store';
-import { $1 } from '../$1';
+import store from 'src/store'
+import { $1 } from '../$1'
 
 describe('<$1 />', () => {
-  const defaultProps = {};
+  const defaultProps = {}
   const wrapper = renderer.create(
     <Provider store={store}>
       <$1 {...defaultProps} />)
     </Provider>,
-  );
+  )
 
   test('render', () => {
-    expect(wrapper).toMatchSnapshot();
-  });
-});
+    expect(wrapper).toMatchSnapshot()
+  })
+})
 ```
 
 ### `sntest`
 
 ```javascript
-import 'react-native';
-import React from 'react';
-import renderer from 'react-test-renderer';
+import 'react-native'
+import React from 'react'
+import renderer from 'react-test-renderer'
 
-import $1 from '../$1';
+import $1 from '../$1'
 
 describe('<$1 />', () => {
-  const defaultProps = {};
+  const defaultProps = {}
 
-  const wrapper = renderer.create(<$1 {...defaultProps} />);
+  const wrapper = renderer.create(<$1 {...defaultProps} />)
 
   test('render', () => {
-    expect(wrapper).toMatchSnapshot();
-  });
-});
+    expect(wrapper).toMatchSnapshot()
+  })
+})
 ```
 
 ### `snrtest`
 
 ```javascript
-import 'react-native';
-import React from 'react';
-import renderer from 'react-test-renderer';
-import { Provider } from 'react-redux';
+import 'react-native'
+import React from 'react'
+import renderer from 'react-test-renderer'
+import { Provider } from 'react-redux'
 
-import store from 'src/store/configureStore';
-import $1 from '../$1';
+import store from 'src/store/configureStore'
+import $1 from '../$1'
 
 describe('<$1 />', () => {
-  const defaultProps = {};
+  const defaultProps = {}
   const wrapper = renderer.create(
     <Provider store={store}>
       <$1 {...defaultProps} />
     </Provider>,
-  );
+  )
 
   test('render', () => {
-    expect(wrapper).toMatchSnapshot();
-  });
-});
+    expect(wrapper).toMatchSnapshot()
+  })
+})
 ```
 
 ### `hocredux`
 
 ```javascript
-import React from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
+import React from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
 
-export const mapStateToProps = (state) => ({});
+export const mapStateToProps = (state) => ({})
 
-export const mapDispatchToProps = {};
+export const mapDispatchToProps = {}
 
 export const $1 = (WrappedComponent) => {
-  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />;
+  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />
 
-  hocComponent.propTypes = {};
+  hocComponent.propTypes = {}
 
-  return hocComponent;
-};
+  return hocComponent
+}
 
 export default (WrapperComponent) =>
-  connect(mapStateToProps, mapDispatchToProps)($1(WrapperComponent));
+  connect(mapStateToProps, mapDispatchToProps)($1(WrapperComponent))
 ```
 
 ### `hoc`
 
 ```javascript
-import React from 'react';
-import PropTypes from 'prop-types';
+import React from 'react'
+import PropTypes from 'prop-types'
 
 export default (WrappedComponent) => {
-  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />;
+  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />
 
-  hocComponent.propTypes = {};
+  hocComponent.propTypes = {}
 
-  return hocComponent;
-};
+  return hocComponent
+}
 ```
diff --git a/package.json b/package.json
index 904f013..d1394f9 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,9 @@
   },
   "activationEvents": [
     "onLanguage:typescript",
+    "onLanguage:typescriptReact",
     "onLanguage:javascript",
+    "onLanguage:javascriptReact",
     "onCommand:reactSnippets.search"
   ],
   "contributes": {
diff --git a/src/helpers/parseSnippetToBody.ts b/src/helpers/parseSnippetToBody.ts
index 7f99e34..17c8ce6 100644
--- a/src/helpers/parseSnippetToBody.ts
+++ b/src/helpers/parseSnippetToBody.ts
@@ -3,19 +3,6 @@ import { formatSnippet } from './formatters';
 import { Snippet } from './generateSnippets';
 import replaceOrRemoveReactImport from './replaceOrRemoveReactImport';
 
-// This is array of prefixes which are currently skipped because of syntax format issues
-const skippedSnippets = [
-  'pge',
-  'pse',
-  'gdsfp',
-  'gsbu',
-  'scu',
-  'cwun',
-  'cdm',
-  'cdup',
-  'rconst',
-];
-
 const withReactImport = [
   'rfce',
   'rfc',
@@ -46,11 +33,9 @@ const parseSnippetToBody = (snippet: Snippet) => {
     ? replaceOrRemoveReactImport(snippet.body)
     : body;
 
-  const formattedSnippet = skippedSnippets.includes(snippet.prefix)
-    ? snippetBody
-    : formatSnippet(snippetBody).split('\n');
+  const formattedSnippet = formatSnippet(snippetBody).split('\n');
 
-  return snippet.body.length === 1 ? formattedSnippet[0] : formattedSnippet;
+  return formattedSnippet;
 };
 
 export default parseSnippetToBody;
diff --git a/src/helpers/revertSnippetPlaceholders.ts b/src/helpers/revertSnippetPlaceholders.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/src/index.ts b/src/index.ts
index 11a020a..e7c3e87 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -30,7 +30,7 @@ const showRestartMessage = async ({
   }
 };
 
-export async function activate(context: ExtensionContext) {
+export function activate(context: ExtensionContext) {
   workspace.onDidChangeConfiguration(showRestartMessage);
   const snippetSearchCommand = commands.registerCommand(
     'reactSnippets.search',
@@ -38,8 +38,6 @@ export async function activate(context: ExtensionContext) {
   );
 
   context.subscriptions.push(snippetSearchCommand);
-
-  await generateSnippets();
 }
 
 export function deactivate() {}
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
index 0967ef4..863bbbd 100644
--- a/src/snippets/generated.json
+++ b/src/snippets/generated.json
@@ -1 +1,1894 @@
-{}
+{
+  "exportType": {
+    "body": "export type ${1:first} = {${2:second}}",
+    "key": "exportType",
+    "prefix": "exptp",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportInterface": {
+    "key": "exportInterface",
+    "prefix": "expint",
+    "body": "export interface ${1:first} {${2:second}}",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponent": {
+    "key": "typescriptReactClassComponent",
+    "prefix": "tsrcc",
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportComponent": {
+    "key": "typescriptReactClassExportComponent",
+    "prefix": "tsrce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalExportComponent": {
+    "key": "typescriptReactFunctionalExportComponent",
+    "prefix": "tsrfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalComponent": {
+    "key": "typescriptReactFunctionalComponent",
+    "prefix": "tsrfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionExportComponent": {
+    "key": "typescriptReactArrowFunctionExportComponent",
+    "prefix": "tsrafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionComponent": {
+    "key": "typescriptReactArrowFunctionComponent",
+    "prefix": "tsrafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassPureComponent": {
+    "key": "typescriptReactClassPureComponent",
+    "prefix": "tsrpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportPureComponent": {
+    "key": "typescriptReactClassExportPureComponent",
+    "prefix": "tsrpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponentRedux": {
+    "key": "typescriptReactClassComponentRedux",
+    "prefix": "tsrcredux",
+    "body": [
+      "import { connect } from 'react-redux'",
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponent": {
+    "key": "typescriptReactNativeArrowFunctionComponent",
+    "prefix": "tsrnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system in TypeScript",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponentWithStyles": {
+    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
+    "prefix": "tsrnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponent": {
+    "key": "reactArrowFunctionComponent",
+    "prefix": "rafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponentWithPropTypes": {
+    "key": "reactArrowFunctionComponentWithPropTypes",
+    "prefix": "rafcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = props => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionExportComponent": {
+    "key": "reactArrowFunctionExportComponent",
+    "prefix": "rafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponent": {
+    "key": "reactClassComponent",
+    "prefix": "rcc",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentPropTypes": {
+    "key": "reactClassComponentPropTypes",
+    "prefix": "rccp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {${2:second}: ${3:third}}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with PropTypes and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentRedux": {
+    "key": "reactClassComponentRedux",
+    "prefix": "rcredux",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentReduxPropTypes": {
+    "key": "reactClassComponentReduxPropTypes",
+    "prefix": "rcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {",
+      "    ${2:second}: ${3:third}",
+      "  }",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponent": {
+    "key": "reactClassExportComponent",
+    "prefix": "rce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponentWithPropTypes": {
+    "key": "reactClassExportComponentWithPropTypes",
+    "prefix": "rcep",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportPureComponent": {
+    "key": "reactClassExportPureComponent",
+    "prefix": "rpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system export",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponent": {
+    "key": "reactClassPureComponent",
+    "prefix": "rpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React pure component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponentWithPropTypes": {
+    "key": "reactClassPureComponentWithPropTypes",
+    "prefix": "rpcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponent": {
+    "key": "reactFunctionMemoComponent",
+    "prefix": "rmc",
+    "body": [
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo(() => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponentWithPropTypes": {
+    "key": "reactFunctionMemoComponentWithPropTypes",
+    "prefix": "rmcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo((props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponent": {
+    "key": "reactFunctionalComponent",
+    "prefix": "rfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentRedux": {
+    "key": "reactFunctionalComponentRedux",
+    "prefix": "rfcredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React functional component with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentReduxPropTypes": {
+    "key": "reactFunctionalComponentReduxPropTypes",
+    "prefix": "rfcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {",
+      "  ${2:second}: PropTypes.${3:third}",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentWithPropTypes": {
+    "key": "reactFunctionalComponentWithPropTypes",
+    "prefix": "rfcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}(props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalExportComponent": {
+    "key": "reactFunctionalExportComponent",
+    "prefix": "rfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleAssert": {
+    "key": "consoleAssert",
+    "prefix": "cas",
+    "body": "console.assert(${1:first}, ${2:second})",
+    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleClear": {
+    "key": "consoleClear",
+    "prefix": "ccl",
+    "body": "console.clear()",
+    "description": "Clears the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleCount": {
+    "key": "consoleCount",
+    "prefix": "cco",
+    "body": "console.count(${1:first})",
+    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleDir": {
+    "key": "consoleDir",
+    "prefix": "cdi",
+    "body": "console.dir(${1:first})",
+    "description": "Prints a JavaScript representation of the specified object",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleError": {
+    "key": "consoleError",
+    "prefix": "cer",
+    "body": "console.error(${1:first})",
+    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroup": {
+    "key": "consoleGroup",
+    "prefix": "cgr",
+    "body": "console.group('${1:first}')",
+    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroupEnd": {
+    "key": "consoleGroupEnd",
+    "prefix": "cge",
+    "body": "console.groupEnd()",
+    "description": "Closes out the corresponding console.group().",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLog": {
+    "key": "consoleLog",
+    "prefix": "clg",
+    "body": "console.log(${1:first})",
+    "description": "Displays a message in the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTrace": {
+    "key": "consoleTrace",
+    "prefix": "ctr",
+    "body": "console.trace(${1:first})",
+    "description": "Prints a stack trace from the point where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogObject": {
+    "key": "consoleLogObject",
+    "prefix": "clo",
+    "body": "console.log('${1:first}', ${1:first})",
+    "description": "Logs property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogJson": {
+    "key": "consoleLogJson",
+    "prefix": "clj",
+    "body": "console.log('${1:first}', JSON.stringify(${1:first}, null, 2))",
+    "description": "Logs stringified JSON property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTime": {
+    "key": "consoleTime",
+    "prefix": "ctm",
+    "body": "console.time('${1:first}')",
+    "description": "Console time wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTimeEnd": {
+    "key": "consoleTimeEnd",
+    "prefix": "cte",
+    "body": "console.timeEnd('${1:first}')",
+    "description": "Console time end wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleWarn": {
+    "key": "consoleWarn",
+    "prefix": "cwa",
+    "body": "console.warn(${1:first})",
+    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleInfo": {
+    "key": "consoleInfo",
+    "prefix": "cin",
+    "body": "console.info(${1:first})",
+    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useCallback": {
+    "key": "useCallback",
+    "prefix": "useCallbackSnippet",
+    "body": [
+      "useCallback(",
+      "  () => {",
+      "    ${1:first}",
+      "  },",
+      "  [${2:second}],",
+      ")",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useContext": {
+    "key": "useContext",
+    "prefix": "useContextSnippet",
+    "body": "const ${1:first} = useContext(${2:second})",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useEffect": {
+    "key": "useEffect",
+    "prefix": "useEffectSnippet",
+    "body": [
+      "useEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  }",
+      "}, [${3:third}])",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useImperativeHandle": {
+    "key": "useImperativeHandle",
+    "prefix": "useImperativeHandleSnippet",
+    "body": [
+      "useImperativeHandle(",
+      "  ${1:first},",
+      "  () => {",
+      "    ${2:second}",
+      "  },",
+      "  [${3:third}],",
+      ")"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useLayoutEffect": {
+    "key": "useLayoutEffect",
+    "prefix": "useLayoutEffectSnippet",
+    "body": [
+      "useLayoutEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  };",
+      "}, [${3:third}])"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useMemo": {
+    "key": "useMemo",
+    "prefix": "useMemoSnippet",
+    "body": "useMemo(() => ${1:first}, [${2:second}])",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useReducer": {
+    "key": "useReducer",
+    "prefix": "useReducerSnippet",
+    "body": "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third})",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useRef": {
+    "key": "useRef",
+    "prefix": "useRefSnippet",
+    "body": "const ${1:first} = useRef(${2:second})",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useState": {
+    "key": "useState",
+    "prefix": "useStateSnippet",
+    "body": "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second})",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importAs": {
+    "key": "importAs",
+    "prefix": "ima",
+    "body": "import { ${2:second} as ${3:third} } from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouter": {
+    "key": "importBrowserRouter",
+    "prefix": "imbr",
+    "body": "import { BrowserRouter as Router } from 'react-router-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouterWithRouteAndNavLink": {
+    "key": "importBrowserRouterWithRouteAndNavLink",
+    "prefix": "imrr",
+    "body": [
+      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importDestructing": {
+    "key": "importDestructing",
+    "prefix": "imd",
+    "body": "import { ${2:second} } from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importEverything": {
+    "key": "importEverything",
+    "prefix": "ime",
+    "body": "import * as ${2:second} from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importNoModuleName": {
+    "key": "importNoModuleName",
+    "prefix": "imn",
+    "body": "import '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importPropTypes": {
+    "key": "importPropTypes",
+    "prefix": "impt",
+    "body": "import PropTypes from 'prop-types'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReact": {
+    "key": "importReact",
+    "prefix": "imr",
+    "body": "import React from 'react'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactDom": {
+    "key": "importReactDom",
+    "prefix": "imrd",
+    "body": "import ReactDOM from 'react-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponent": {
+    "key": "importReactWithComponent",
+    "prefix": "imrc",
+    "body": "import React, { Component } from 'react'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponentAndPropTypes": {
+    "key": "importReactWithComponentAndPropTypes",
+    "prefix": "imrcp",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemo": {
+    "key": "importReactWithMemo",
+    "prefix": "imrm",
+    "body": "import React, { memo } from 'react'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemoAndPropTypes": {
+    "key": "importReactWithMemoAndPropTypes",
+    "prefix": "imrmp",
+    "body": [
+      "import React, { memo } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponent": {
+    "key": "importReactWithPureComponent",
+    "prefix": "imrpc",
+    "body": "import React, { PureComponent } from 'react'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponentAndPropTypes": {
+    "key": "importReactWithPureComponentAndPropTypes",
+    "prefix": "imrpcp",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterLink": {
+    "key": "importRouterLink",
+    "prefix": "imbrl",
+    "body": "import { Link } from 'react-router-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterNavLink": {
+    "key": "importRouterNavLink",
+    "prefix": "imbrnl",
+    "body": "import { NavLink } from 'react-router-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSetup": {
+    "key": "importRouterSetup",
+    "prefix": "imbrc",
+    "body": "import { Route, Switch, NavLink, Link } from 'react-router-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSwitch": {
+    "key": "importRouterSwitch",
+    "prefix": "imbrs",
+    "body": "import { Switch } from 'react-router-dom'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "import": {
+    "key": "import",
+    "prefix": "imp",
+    "body": "import ${2:second} from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArray": {
+    "key": "propTypeArray",
+    "prefix": "pta",
+    "body": "PropTypes.array",
+    "description": "Array prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayRequired": {
+    "key": "propTypeArrayRequired",
+    "prefix": "ptar",
+    "body": "PropTypes.array.isRequired",
+    "description": "Array prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBool": {
+    "key": "propTypeBool",
+    "prefix": "ptb",
+    "body": "PropTypes.bool",
+    "description": "Bool prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBoolRequired": {
+    "key": "propTypeBoolRequired",
+    "prefix": "ptbr",
+    "body": "PropTypes.bool.isRequired",
+    "description": "Bool prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFunc": {
+    "key": "propTypeFunc",
+    "prefix": "ptf",
+    "body": "PropTypes.func",
+    "description": "Func prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFuncRequired": {
+    "key": "propTypeFuncRequired",
+    "prefix": "ptfr",
+    "body": "PropTypes.func.isRequired",
+    "description": "Func prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumber": {
+    "key": "propTypeNumber",
+    "prefix": "ptn",
+    "body": "PropTypes.number",
+    "description": "Number prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumberRequired": {
+    "key": "propTypeNumberRequired",
+    "prefix": "ptnr",
+    "body": "PropTypes.number.isRequired",
+    "description": "Number prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObject": {
+    "key": "propTypeObject",
+    "prefix": "pto",
+    "body": "PropTypes.object",
+    "description": "Object prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectRequired": {
+    "key": "propTypeObjectRequired",
+    "prefix": "ptor",
+    "body": "PropTypes.object.isRequired",
+    "description": "Object prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeString": {
+    "key": "propTypeString",
+    "prefix": "pts",
+    "body": "PropTypes.string",
+    "description": "String prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeStringRequired": {
+    "key": "propTypeStringRequired",
+    "prefix": "ptsr",
+    "body": "PropTypes.string.isRequired",
+    "description": "String prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNode": {
+    "key": "propTypeNode",
+    "prefix": "ptnd",
+    "body": "PropTypes.node",
+    "description": "Anything that can be rendered: numbers, strings, elements or an array",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNodeRequired": {
+    "key": "propTypeNodeRequired",
+    "prefix": "ptndr",
+    "body": "PropTypes.node.isRequired",
+    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElement": {
+    "key": "propTypeElement",
+    "prefix": "ptel",
+    "body": "PropTypes.element",
+    "description": "React element prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElementRequired": {
+    "key": "propTypeElementRequired",
+    "prefix": "ptelr",
+    "body": "PropTypes.element.isRequired",
+    "description": "React element prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOf": {
+    "key": "propTypeInstanceOf",
+    "prefix": "pti",
+    "body": "PropTypes.instanceOf($0)",
+    "description": "Is an instance of a class prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOfRequired": {
+    "key": "propTypeInstanceOfRequired",
+    "prefix": "ptir",
+    "body": "PropTypes.instanceOf($0).isRequired",
+    "description": "Is an instance of a class prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnum": {
+    "key": "propTypeEnum",
+    "prefix": "pte",
+    "body": "PropTypes.oneOf(['$0'])",
+    "description": "Prop type limited to specific values by treating it as an enum",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnumRequired": {
+    "key": "propTypeEnumRequired",
+    "prefix": "pter",
+    "body": "PropTypes.oneOf(['$0']).isRequired",
+    "description": "Prop type limited to specific values by treating it as an enum required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfType": {
+    "key": "propTypeOneOfType",
+    "prefix": "ptet",
+    "body": ["PropTypes.oneOfType([", "  $0", "])"],
+    "description": "An object that could be one of many types",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfTypeRequired": {
+    "key": "propTypeOneOfTypeRequired",
+    "prefix": "ptetr",
+    "body": ["PropTypes.oneOfType([", "  $0", "]).isRequired"],
+    "description": "An object that could be one of many types required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOf": {
+    "key": "propTypeArrayOf",
+    "prefix": "ptao",
+    "body": "PropTypes.arrayOf($0)",
+    "description": "An array of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOfRequired": {
+    "key": "propTypeArrayOfRequired",
+    "prefix": "ptaor",
+    "body": "PropTypes.arrayOf($0).isRequired",
+    "description": "An array of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOf": {
+    "key": "propTypeObjectOf",
+    "prefix": "ptoo",
+    "body": "PropTypes.objectOf($0)",
+    "description": "An object with property values of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOfRequired": {
+    "key": "propTypeObjectOfRequired",
+    "prefix": "ptoor",
+    "body": "PropTypes.objectOf($0).isRequired",
+    "description": "An object with property values of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShape": {
+    "key": "propTypeShape",
+    "prefix": "ptsh",
+    "body": ["PropTypes.shape({", "  $0", "})"],
+    "description": "An object taking on a particular shape",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShapeRequired": {
+    "key": "propTypeShapeRequired",
+    "prefix": "ptshr",
+    "body": ["PropTypes.shape({", "  $0", "}).isRequired"],
+    "description": "An object taking on a particular shape required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExact": {
+    "key": "propTypeExact",
+    "prefix": "ptex",
+    "body": ["PropTypes.exact({", "  $0", "})"],
+    "description": "An object with warnings on extra properties",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExactRequired": {
+    "key": "propTypeExactRequired",
+    "prefix": "ptexr",
+    "body": ["PropTypes.exact({", "  $0", "}).isRequired"],
+    "description": "An object with warnings on extra properties required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeAny": {
+    "key": "propTypeAny",
+    "prefix": "ptany",
+    "body": "PropTypes.any",
+    "description": "Any prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponent": {
+    "key": "reactNativeComponent",
+    "prefix": "rnc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentExport": {
+    "key": "reactNativeComponentExport",
+    "prefix": "rnce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentWithStyles": {
+    "key": "reactNativeComponentWithStyles",
+    "prefix": "rncs",
+    "body": [
+      "import { Text, StyleSheet, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponent": {
+    "key": "reactNativeFunctionalComponent",
+    "prefix": "rnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponentWithStyles": {
+    "key": "reactNativeFunctionalComponentWithStyles",
+    "prefix": "rnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponent": {
+    "key": "reactNativeFunctionalExportComponent",
+    "prefix": "rnfe",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponentWithStyles": {
+    "key": "reactNativeFunctionalExportComponentWithStyles",
+    "prefix": "rnfes",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeImport": {
+    "key": "reactNativeImport",
+    "prefix": "imrn",
+    "body": "import { ${1:first} } from 'react-native'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponent": {
+    "key": "reactNativePureComponent",
+    "prefix": "rnpc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponentExport": {
+    "key": "reactNativePureComponentExport",
+    "prefix": "rnpce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeStyles": {
+    "key": "reactNativeStyles",
+    "prefix": "rnstyle",
+    "body": "const styles = StyleSheet.create({${1:first}})",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReduxConnect": {
+    "key": "importReduxConnect",
+    "prefix": "redux",
+    "body": "import { connect } from 'react-redux'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxAction": {
+    "key": "reduxAction",
+    "prefix": "rxaction",
+    "body": [
+      "export const ${1:first} = (payload) => ({",
+      "  type: ${2:second},",
+      "  payload",
+      "})",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxConst": {
+    "key": "reduxConst",
+    "prefix": "rxconst",
+    "body": "export const ${1:first} = '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxReducer": {
+    "key": "reduxReducer",
+    "prefix": "rxreducer",
+    "body": [
+      "const initialState = {}",
+      "",
+      "export default (state = initialState, { type, payload }) => {",
+      "  switch (type) {",
+      "",
+      "  case ${1:first}:",
+      "    return { ...state, ...payload }",
+      "",
+      "  default:",
+      "    return state",
+      "  }",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSelector": {
+    "key": "reduxSelector",
+    "prefix": "rxselect",
+    "body": [
+      "import { createSelector } from 'reselect'",
+      "",
+      "export const ${1:first} = state => state.${2:second}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSlice": {
+    "key": "reduxSlice",
+    "prefix": "rxslice",
+    "body": [
+      "import { createSlice } from '@reduxjs/toolkit'",
+      "",
+      "const initialState = {",
+      "",
+      "}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
+      "  name: ${2:second},",
+      "  initialState,",
+      "  reducers: {}",
+      "});",
+      "",
+      "export const {} = ${1:${TM_FILENAME_BASE}}.actions",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}.reducer"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "mappingToProps": {
+    "key": "mappingToProps",
+    "prefix": "reduxmap",
+    "body": [
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "describeBlock": {
+    "key": "describeBlock",
+    "prefix": "desc",
+    "body": "describe('${1:first}', () => { ${2:second} })",
+    "description": "Testing `describe` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itAsyncBlock": {
+    "key": "itAsyncBlock",
+    "prefix": "tita",
+    "body": "it('should ${1:first}', async () => { ${2:second} })",
+    "description": "Testing asynchronous `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itBlock": {
+    "key": "itBlock",
+    "prefix": "tit",
+    "body": "it('should ${1:first}', () => { ${2:second} })",
+    "description": "Testing `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactComponentTestWithRedux": {
+    "key": "setupReactComponentTestWithRedux",
+    "prefix": "srtest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "     <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "description": "Create test component",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTest": {
+    "key": "setupReactNativeTest",
+    "prefix": "sntest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTestWithRedux": {
+    "key": "setupReactNativeTestWithRedux",
+    "prefix": "snrtest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactTest": {
+    "key": "setupReactTest",
+    "prefix": "stest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testAsyncBlock": {
+    "key": "testAsyncBlock",
+    "prefix": "testa",
+    "body": "test('should ${1:first}', async () => { ${2:second} })",
+    "description": "Testing `asynchronous test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testBlock": {
+    "key": "testBlock",
+    "prefix": "test",
+    "body": "test('should ${1:first}', () => { ${2:second} })",
+    "description": "Testing `test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefault": {
+    "key": "exportDefault",
+    "prefix": "exp",
+    "body": "export default ${1:first}",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDestructing": {
+    "key": "exportDestructing",
+    "prefix": "exd",
+    "body": "export { ${2:second} } from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportAs": {
+    "key": "exportAs",
+    "prefix": "exa",
+    "body": "export { ${2:second} as ${3:third} } from '${1:first}'",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportNamedFunction": {
+    "key": "exportNamedFunction",
+    "prefix": "enf",
+    "body": "export const ${1:first} = (${2:second}) => {${3:third}}",
+    "description": "Export named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultFunction": {
+    "key": "exportDefaultFunction",
+    "prefix": "edf",
+    "body": "export default (${1:first}) => {${2:second}}",
+    "description": "Export default function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultNamedFunction": {
+    "key": "exportDefaultNamedFunction",
+    "prefix": "ednf",
+    "body": "export default function ${1:first}(${2:second}) {${3:third}}",
+    "description": "Export default named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "method": {
+    "key": "method",
+    "prefix": "met",
+    "body": "${1:first} = (${2:second}) => {${3:third}}",
+    "description": "Creates a method inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertyGet": {
+    "key": "propertyGet",
+    "prefix": "pge",
+    "body": ["get ${1:first}() {", "  return this.${2:second}", "}"],
+    "description": "Creates a getter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertySet": {
+    "key": "propertySet",
+    "prefix": "pse",
+    "body": "set ${1:first}(${2:second}) {${3:third}}",
+    "description": "Creates a setter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forEach": {
+    "key": "forEach",
+    "prefix": "fre",
+    "body": "${1:first}.forEach(${2:second} => {${3:third}})",
+    "description": "Creates a forEach statement",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forOf": {
+    "key": "forOf",
+    "prefix": "fof",
+    "body": "for(let ${1:first} of ${2:second}) {${3:third}}",
+    "description": "Iterating over property names of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forIn": {
+    "key": "forIn",
+    "prefix": "fin",
+    "body": "for(let ${1:first} in ${2:second}) {${3:third}}",
+    "description": "Iterating over property values of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "anonymousFunction": {
+    "key": "anonymousFunction",
+    "prefix": "anfn",
+    "body": "(${1:first}) => { ${2:second} }",
+    "description": "Creates an anonymous function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "namedFunction": {
+    "key": "namedFunction",
+    "prefix": "nfn",
+    "body": "const ${1:first} = (${2:second}) => { ${3:third} }",
+    "description": "Creates a named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingObject": {
+    "key": "destructingObject",
+    "prefix": "dob",
+    "body": "const {${2:second}} = ${1:first}",
+    "description": "Creates and assigns a local variable using object destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingArray": {
+    "key": "destructingArray",
+    "prefix": "dar",
+    "body": "const [${2:second}] = ${1:first}",
+    "description": "Creates and assigns a local variable using array destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setInterval": {
+    "key": "setInterval",
+    "prefix": "sti",
+    "body": "setInterval(() => { ${1:first} }, ${2:second})",
+    "description": "Executes the given function at specified intervals",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setTimeOut": {
+    "key": "setTimeOut",
+    "prefix": "sto",
+    "body": "setTimeout(() => { ${1:first} }, ${2:second})",
+    "description": "Executes the given function after the specified delay",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "promise": {
+    "key": "promise",
+    "prefix": "prom",
+    "body": "return new Promise((resolve, reject) => { ${1:first} })",
+    "description": "Creates and returns a new Promise in the standard ES7 syntax",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructProps": {
+    "key": "destructProps",
+    "prefix": "cp",
+    "body": "const { ${1:first} } = this.props",
+    "description": "Creates and assigns a local variable using props destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructState": {
+    "key": "destructState",
+    "prefix": "cs",
+    "body": "const { ${1:first} } = this.state",
+    "description": "Creates and assigns a local variable using state destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "classConstructor": {
+    "key": "classConstructor",
+    "prefix": "rconst",
+    "body": [
+      "constructor(props) {",
+      "  super(props)",
+      "",
+      "  this.state = {",
+      "     ${1:first}",
+      "  }",
+      "}"
+    ],
+    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "emptyState": {
+    "key": "emptyState",
+    "prefix": "est",
+    "body": "state = { ${1:first} }",
+    "description": "Creates empty state object. To be used in a constructor.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidMount": {
+    "key": "componentDidMount",
+    "prefix": "cdm",
+    "body": "componentDidMount() { ${1:first} }",
+    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "shouldComponentUpdate": {
+    "key": "shouldComponentUpdate",
+    "prefix": "scu",
+    "body": "shouldComponentUpdate(nextProps, nextState) { ${1:first} }",
+    "description": "Invoked before rendering when new props or state are being received. ",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidUpdate": {
+    "key": "componentDidUpdate",
+    "prefix": "cdup",
+    "body": "componentDidUpdate(prevProps, prevState) { ${1:first}} ",
+    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentWillUnmount": {
+    "key": "componentWillUnmount",
+    "prefix": "cwun",
+    "body": "componentWillUnmount() {${1:first} }",
+    "description": "Invoked immediately before a component is unmounted from the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getDerivedStateFromProps": {
+    "key": "getDerivedStateFromProps",
+    "prefix": "gdsfp",
+    "body": "static getDerivedStateFromProps(props, state) {${1:first}}",
+    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getSnapshotBeforeUpdate": {
+    "key": "getSnapshotBeforeUpdate",
+    "prefix": "gsbu",
+    "body": "getSnapshotBeforeUpdate = (prevProps, prevState) => {${1:first}}",
+    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createContext": {
+    "key": "createContext",
+    "prefix": "rcontext",
+    "body": "const ${1:first} = React.createContext()",
+    "description": "Create React context",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createRef": {
+    "key": "createRef",
+    "prefix": "cref",
+    "body": "this.${1:first}Ref = React.createRef()",
+    "description": "Create ref statement used inside constructor",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateObject": {
+    "key": "componentSetStateObject",
+    "prefix": "sst",
+    "body": "this.setState({${1:first}})",
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateFunc": {
+    "key": "componentSetStateFunc",
+    "prefix": "ssf",
+    "body": "this.setState((state, props) => { return { ${1:first} }})",
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentProps": {
+    "key": "componentProps",
+    "prefix": "props",
+    "body": "this.props.${1:first}",
+    "description": "Access component's props",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentState": {
+    "key": "componentState",
+    "prefix": "state",
+    "body": "this.state.${1:first}",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "bindThis": {
+    "key": "bindThis",
+    "prefix": "bnd",
+    "body": "this.${1:first} = this.${1:first}.bind(this)",
+    "description": "Binds this to a method",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "commentBigBlock": {
+    "key": "commentBigBlock",
+    "prefix": "cmmb",
+    "body": ["/**", " * ${1:first}", " */"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponentWithRedux": {
+    "key": "hocComponentWithRedux",
+    "prefix": "hocredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export const mapStateToProps = state => ({})",
+      "",
+      "export const mapDispatchToProps = {}",
+      "",
+      "export const ${1:first} = (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      "",
+      "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent))",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponent": {
+    "key": "hocComponent",
+    "prefix": "hoc",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export default (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typeofSnippet": {
+    "key": "typeofSnippet",
+    "prefix": "tpf",
+    "body": "typeof ${1:first}",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  }
+}
diff --git a/src/sourceSnippets/hooks.ts b/src/sourceSnippets/hooks.ts
index bdbc674..d8a0377 100644
--- a/src/sourceSnippets/hooks.ts
+++ b/src/sourceSnippets/hooks.ts
@@ -70,7 +70,9 @@ const useCallback: HooksSnippet = {
 const useMemo: HooksSnippet = {
   key: 'useMemo',
   prefix: 'useMemoSnippet',
-  body: [`useMemo(() => ${Placeholders.FirstTab}, ${Placeholders.SecondTab})`],
+  body: [
+    `useMemo(() => ${Placeholders.FirstTab}, [${Placeholders.SecondTab}])`,
+  ],
 };
 
 const useRef: HooksSnippet = {
@@ -99,6 +101,7 @@ const useLayoutEffect: HooksSnippet = {
   body: [
     'useLayoutEffect(() => {',
     `  ${Placeholders.FirstTab}`,
+    '',
     '  return () => {',
     `    ${Placeholders.SecondTab}`,
     '  };',
diff --git a/src/sourceSnippets/redux.ts b/src/sourceSnippets/redux.ts
index ed1149f..0315fc9 100644
--- a/src/sourceSnippets/redux.ts
+++ b/src/sourceSnippets/redux.ts
@@ -1,6 +1,6 @@
 import { Placeholders, SnippetMapping } from '../types';
 
-type HookMappings = {
+type ReduxMapping = {
   importReduxConnect: 'redux';
   reduxAction: 'rxaction';
   reduxConst: 'rxconst';
@@ -10,7 +10,7 @@ type HookMappings = {
   mappingToProps: 'reduxmap';
 };
 
-export type ReduxSnippet = SnippetMapping<HookMappings>;
+export type ReduxSnippet = SnippetMapping<ReduxMapping>;
 
 const importReduxConnect: ReduxSnippet = {
   key: 'importReduxConnect',
diff --git a/src/types.ts b/src/types.ts
index 0d2d726..19fa619 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -6,13 +6,13 @@ export type SnippetMapping<T> = {
 };
 
 export const Placeholders = {
-  FileName: 'FILE_NAME',
-  FirstTab: 'FIRST_TAB',
-  SecondTab: 'SECOND_TAB',
-  ThirdTab: 'THIRD_TAB',
-  Capitalize: 'CAPITALIZE',
-  TypeProps: 'TYPE_PROPS',
-  TypeState: 'TYPE_STATE',
+  FileName: 'file',
+  FirstTab: 'first',
+  SecondTab: 'second',
+  ThirdTab: 'third',
+  Capitalize: 'capitalize',
+  TypeProps: 'typeProps',
+  TypeState: 'typeState',
 } as const;
 
 export const Mappings = {

From eb17ac8dc9b67bf83a418b9e0fa57698546e7553 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 22:46:12 +0100
Subject: [PATCH 06/18] chore: disable prettier by default

---
 package.json                     | 17 +----------------
 src/helpers/extensionConfig.ts   |  3 ---
 src/helpers/getPrettierConfig.ts |  6 +-----
 3 files changed, 2 insertions(+), 24 deletions(-)

diff --git a/package.json b/package.json
index d1394f9..fceaf2e 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
       "properties": {
         "reactSnippets.settings.prettierEnabled": {
           "type": "boolean",
-          "markdownDescription": "Integrate prettier settings with code generated from snippets.",
+          "markdownDescription": "[EXPERIMENTAL: MIGHT NOT WORK]: Integrate prettier settings with code generated from snippets.",
           "default": false
         },
         "reactSnippets.settings.importReactOnTop": {
@@ -78,21 +78,6 @@
           "markdownDescription": "Controls if React components have typescript Props typing.",
           "default": true
         },
-        "reactSnippets.settings.semiColons": {
-          "type": "boolean",
-          "markdownDescription": "Controls if snippets should use semi colons.\nOnly applies when `#reactSnippets.settings.prettierEnabled#` is disabled",
-          "default": false
-        },
-        "reactSnippets.settings.singleQuote": {
-          "type": "boolean",
-          "markdownDescription": "Controls if snippets should use single quotes.\nOnly applies when `#reactSnippets.settings.prettierEnabled#` is disabled",
-          "default": true
-        },
-        "reactSnippets.settings.tabWidth": {
-          "type": "number",
-          "markdownDescription": "Controls how many spaces snippets will have.\nOnly applies when `#reactSnippets.settings.prettierEnabled#` is disabled",
-          "default": 2
-        },
         "reactSnippets.settings.languageScopes": {
           "type": "string",
           "markdownDescription": "defines the language scopes for which the snippets will be available.\nUse comma separated values.\nFor example: `typescript,typescriptreact,javascript,javascriptreact`",
diff --git a/src/helpers/extensionConfig.ts b/src/helpers/extensionConfig.ts
index 96d0a67..5301a46 100644
--- a/src/helpers/extensionConfig.ts
+++ b/src/helpers/extensionConfig.ts
@@ -3,11 +3,8 @@ import { workspace } from 'vscode';
 export type ExtensionSettings = {
   languageScopes: string;
   prettierEnabled: boolean;
-  semiColons: boolean;
   importReactOnTop: boolean;
-  singleQuote: boolean;
   typescript: boolean;
-  tabWidth: number;
   typescriptPropsStatePrefix: 'type' | 'interface';
 };
 
diff --git a/src/helpers/getPrettierConfig.ts b/src/helpers/getPrettierConfig.ts
index 1b99d72..30fc1bd 100644
--- a/src/helpers/getPrettierConfig.ts
+++ b/src/helpers/getPrettierConfig.ts
@@ -8,14 +8,10 @@ prettier
   .then((config) => (prettierConfig = config));
 
 const getPrettierConfig = (): Options => {
-  const { semiColons, singleQuote, tabWidth, prettierEnabled } =
-    extensionConfig();
+  const { prettierEnabled } = extensionConfig();
 
   return {
     parser: 'typescript',
-    semi: semiColons,
-    singleQuote,
-    tabWidth,
     ...(prettierEnabled && prettierConfig),
   };
 };

From 3e6241663dc5190f020ad19cf186b60deac0d02f Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 22:46:30 +0100
Subject: [PATCH 07/18] 4.2.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index fceaf2e..6e45bf1 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.1.0",
+  "version": "4.2.0",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",

From fbf6ab778143485624b737e7dbb2f38fbc1c5610 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Tue, 8 Feb 2022 23:23:53 +0100
Subject: [PATCH 08/18] feat: add removing react from imports in ts components

---
 .gitignore                                |    1 +
 CHANGELOG.md                              |    7 +
 package.json                              |   25 +-
 src/helpers/parseSnippetToBody.ts         |   26 +-
 src/helpers/replaceOrRemoveReactImport.ts |   58 +-
 src/snippets/generated.json               | 1894 ---------------------
 yarn.lock                                 |  593 +++----
 7 files changed, 375 insertions(+), 2229 deletions(-)
 delete mode 100644 src/snippets/generated.json

diff --git a/.gitignore b/.gitignore
index 42ffe71..f9273d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ node_modules
 *.log
 .DS_Store
 lib/
+src/snippets/generated.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56298c0..2e616aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,13 @@ All info about changes
 
 # Released
 
+[4.3.0] - 2020-12-18
+
+- BREAKING CHANGES:
+  - From now on snippets have options for Language, React 17+ support, typescript and more.
+  - Added experimental prettier support, for now it's kinda buggy and needs some work.
+  - Refactored the codebase, moved snippets to ts files.
+
 [3.1.0] - 2020-12-18
 
 - Add couple of snippets and React 17 components
diff --git a/package.json b/package.json
index 6e45bf1..6dc9fe0 100644
--- a/package.json
+++ b/package.json
@@ -116,6 +116,7 @@
   "scripts": {
     "vscode:prepublish": "yarn compile",
     "compile": "rm -rf lib; tsc -p ./ --noEmit false --module commonjs --outDir lib",
+    "compile:dev": "rm -rf lib; tsc -p ./ --noEmit false --module commonjs --outDir lib",
     "lint": "eslint --ext .js,.ts,.tsx ./src/",
     "watch": "tsc -watch -p ./",
     "typescript": "tsc --noEmit"
@@ -127,24 +128,24 @@
     "prettier": "^2"
   },
   "devDependencies": {
-    "@babel/cli": "7.16.0",
-    "@babel/eslint-parser": "7.16.5",
-    "@babel/preset-typescript": "7.16.5",
-    "@types/node": "17.0.5",
-    "@types/prettier": "2.4.2",
-    "@types/vscode": "1.60.0",
-    "@typescript-eslint/eslint-plugin": "5.8.1",
-    "@typescript-eslint/parser": "5.8.1",
-    "eslint": "8.5.0",
+    "@babel/cli": "7.17.0",
+    "@babel/eslint-parser": "7.17.0",
+    "@babel/preset-typescript": "7.16.7",
+    "@types/node": "17.0.16",
+    "@types/prettier": "2.4.3",
+    "@types/vscode": "1.64.0",
+    "@typescript-eslint/eslint-plugin": "5.11.0",
+    "@typescript-eslint/parser": "5.11.0",
+    "eslint": "8.8.0",
     "eslint-config-prettier": "8.3.0",
     "eslint-plugin-babel": "5.3.1",
     "eslint-plugin-eslint-comments": "3.2.0",
-    "eslint-plugin-import": "2.25.3",
-    "eslint-plugin-jest": "25.3.3",
+    "eslint-plugin-import": "2.25.4",
+    "eslint-plugin-jest": "26.1.0",
     "eslint-plugin-prettier": "4.0.0",
     "eslint-plugin-simple-import-sort": "7.0.0",
     "prettier": "2.5.1",
-    "typescript": "4.5.4"
+    "typescript": "4.5.5"
   },
   "prettier": {
     "bracketSameLine": false,
diff --git a/src/helpers/parseSnippetToBody.ts b/src/helpers/parseSnippetToBody.ts
index 17c8ce6..b8a7e7e 100644
--- a/src/helpers/parseSnippetToBody.ts
+++ b/src/helpers/parseSnippetToBody.ts
@@ -3,25 +3,6 @@ import { formatSnippet } from './formatters';
 import { Snippet } from './generateSnippets';
 import replaceOrRemoveReactImport from './replaceOrRemoveReactImport';
 
-const withReactImport = [
-  'rfce',
-  'rfc',
-  'rfcp',
-  'rafce',
-  'rafc',
-  'rafcp',
-  'rnfe',
-  'rnfes',
-  'rnf',
-  'rnfs',
-  'stest',
-  'sntest',
-  'srtest',
-  'snrtest',
-  'hocredux',
-  'hoc',
-];
-
 const parseSnippetToBody = (snippet: Snippet) => {
   const { importReactOnTop } = extensionConfig();
   const body =
@@ -29,9 +10,10 @@ const parseSnippetToBody = (snippet: Snippet) => {
 
   const snippetBody = importReactOnTop
     ? body
-    : withReactImport.includes(snippet.prefix)
-    ? replaceOrRemoveReactImport(snippet.body)
-    : body;
+    : replaceOrRemoveReactImport({
+        prefix: snippet.prefix,
+        body: snippet.body,
+      });
 
   const formattedSnippet = formatSnippet(snippetBody).split('\n');
 
diff --git a/src/helpers/replaceOrRemoveReactImport.ts b/src/helpers/replaceOrRemoveReactImport.ts
index b8a699f..74d4e51 100644
--- a/src/helpers/replaceOrRemoveReactImport.ts
+++ b/src/helpers/replaceOrRemoveReactImport.ts
@@ -1,16 +1,64 @@
-const replaceOrRemoveReactImport = (snippetBody: string[]) => {
-  const reactImportIndex = snippetBody.findIndex((line) =>
+import { Snippet } from './generateSnippets';
+
+const snippetWithReactImportPrefixes = [
+  'rfce',
+  'rfc',
+  'rfcp',
+  'rafce',
+  'rafc',
+  'rafcp',
+  'rnfe',
+  'rnfes',
+  'rnf',
+  'rnfs',
+  'stest',
+  'sntest',
+  'srtest',
+  'snrtest',
+  'hocredux',
+  'hoc',
+  'tsrafc',
+  'tsrafce',
+  'tsrcc',
+  'tsrcredux',
+  'tsrce',
+  'tsrpce',
+  'tsrpc',
+  'tsrfc',
+  'tsrfce',
+  'tsrnf',
+  'tsrnfs',
+];
+
+const replaceOrRemoveReactImport = ({
+  body,
+  prefix,
+}: {
+  body: string[];
+  prefix: Snippet['prefix'];
+}) => {
+  if (!snippetWithReactImportPrefixes.includes(prefix)) {
+    return body.join('\n');
+  }
+
+  let bodyCopy = [...body];
+  const reactImportIndex = bodyCopy.findIndex((line) =>
     line.match(new RegExp(/import React/, 'g')),
   );
 
   if (reactImportIndex !== -1) {
-    const line = snippetBody[reactImportIndex];
-    snippetBody[reactImportIndex] = line
+    const line = bodyCopy[reactImportIndex];
+    const newLine = line
       .replace(new RegExp(/^import React .*$/, 'g'), '')
       .replace(new RegExp(/^import React, /, 'g'), 'import ');
+
+    bodyCopy[reactImportIndex] = newLine;
+    if (!newLine.length) {
+      bodyCopy = bodyCopy.filter(Boolean);
+    }
   }
 
-  return snippetBody.join('\n');
+  return bodyCopy.join('\n');
 };
 
 export default replaceOrRemoveReactImport;
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
deleted file mode 100644
index 863bbbd..0000000
--- a/src/snippets/generated.json
+++ /dev/null
@@ -1,1894 +0,0 @@
-{
-  "exportType": {
-    "body": "export type ${1:first} = {${2:second}}",
-    "key": "exportType",
-    "prefix": "exptp",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportInterface": {
-    "key": "exportInterface",
-    "prefix": "expint",
-    "body": "export interface ${1:first} {${2:second}}",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponent": {
-    "key": "typescriptReactClassComponent",
-    "prefix": "tsrcc",
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportComponent": {
-    "key": "typescriptReactClassExportComponent",
-    "prefix": "tsrce",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalExportComponent": {
-    "key": "typescriptReactFunctionalExportComponent",
-    "prefix": "tsrfce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalComponent": {
-    "key": "typescriptReactFunctionalComponent",
-    "prefix": "tsrfc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionExportComponent": {
-    "key": "typescriptReactArrowFunctionExportComponent",
-    "prefix": "tsrafce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionComponent": {
-    "key": "typescriptReactArrowFunctionComponent",
-    "prefix": "tsrafc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassPureComponent": {
-    "key": "typescriptReactClassPureComponent",
-    "prefix": "tsrpc",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportPureComponent": {
-    "key": "typescriptReactClassExportPureComponent",
-    "prefix": "tsrpce",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponentRedux": {
-    "key": "typescriptReactClassComponentRedux",
-    "prefix": "tsrcredux",
-    "body": [
-      "import { connect } from 'react-redux'",
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponent": {
-    "key": "typescriptReactNativeArrowFunctionComponent",
-    "prefix": "tsrnf",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system in TypeScript",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponentWithStyles": {
-    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
-    "prefix": "tsrnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponent": {
-    "key": "reactArrowFunctionComponent",
-    "prefix": "rafc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponentWithPropTypes": {
-    "key": "reactArrowFunctionComponentWithPropTypes",
-    "prefix": "rafcp",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = props => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionExportComponent": {
-    "key": "reactArrowFunctionExportComponent",
-    "prefix": "rafce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponent": {
-    "key": "reactClassComponent",
-    "prefix": "rcc",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentPropTypes": {
-    "key": "reactClassComponentPropTypes",
-    "prefix": "rccp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {${2:second}: ${3:third}}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with PropTypes and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentRedux": {
-    "key": "reactClassComponentRedux",
-    "prefix": "rcredux",
-    "body": [
-      "import React, { Component } from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentReduxPropTypes": {
-    "key": "reactClassComponentReduxPropTypes",
-    "prefix": "rcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {",
-      "    ${2:second}: ${3:third}",
-      "  }",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponent": {
-    "key": "reactClassExportComponent",
-    "prefix": "rce",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponentWithPropTypes": {
-    "key": "reactClassExportComponentWithPropTypes",
-    "prefix": "rcep",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportPureComponent": {
-    "key": "reactClassExportPureComponent",
-    "prefix": "rpce",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system export",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponent": {
-    "key": "reactClassPureComponent",
-    "prefix": "rpc",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponentWithPropTypes": {
-    "key": "reactClassPureComponentWithPropTypes",
-    "prefix": "rpcp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  static propTypes = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponent": {
-    "key": "reactFunctionMemoComponent",
-    "prefix": "rmc",
-    "body": [
-      "import React, { memo } from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = memo(() => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "})",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponentWithPropTypes": {
-    "key": "reactFunctionMemoComponentWithPropTypes",
-    "prefix": "rmcp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { memo } from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = memo((props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "})",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponent": {
-    "key": "reactFunctionalComponent",
-    "prefix": "rfc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentRedux": {
-    "key": "reactFunctionalComponentRedux",
-    "prefix": "rfcredux",
-    "body": [
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React functional component with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentReduxPropTypes": {
-    "key": "reactFunctionalComponentReduxPropTypes",
-    "prefix": "rfcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {",
-      "  ${2:second}: PropTypes.${3:third}",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentWithPropTypes": {
-    "key": "reactFunctionalComponentWithPropTypes",
-    "prefix": "rfcp",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}(props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalExportComponent": {
-    "key": "reactFunctionalExportComponent",
-    "prefix": "rfce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleAssert": {
-    "key": "consoleAssert",
-    "prefix": "cas",
-    "body": "console.assert(${1:first}, ${2:second})",
-    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleClear": {
-    "key": "consoleClear",
-    "prefix": "ccl",
-    "body": "console.clear()",
-    "description": "Clears the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleCount": {
-    "key": "consoleCount",
-    "prefix": "cco",
-    "body": "console.count(${1:first})",
-    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleDir": {
-    "key": "consoleDir",
-    "prefix": "cdi",
-    "body": "console.dir(${1:first})",
-    "description": "Prints a JavaScript representation of the specified object",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleError": {
-    "key": "consoleError",
-    "prefix": "cer",
-    "body": "console.error(${1:first})",
-    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroup": {
-    "key": "consoleGroup",
-    "prefix": "cgr",
-    "body": "console.group('${1:first}')",
-    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroupEnd": {
-    "key": "consoleGroupEnd",
-    "prefix": "cge",
-    "body": "console.groupEnd()",
-    "description": "Closes out the corresponding console.group().",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLog": {
-    "key": "consoleLog",
-    "prefix": "clg",
-    "body": "console.log(${1:first})",
-    "description": "Displays a message in the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTrace": {
-    "key": "consoleTrace",
-    "prefix": "ctr",
-    "body": "console.trace(${1:first})",
-    "description": "Prints a stack trace from the point where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogObject": {
-    "key": "consoleLogObject",
-    "prefix": "clo",
-    "body": "console.log('${1:first}', ${1:first})",
-    "description": "Logs property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogJson": {
-    "key": "consoleLogJson",
-    "prefix": "clj",
-    "body": "console.log('${1:first}', JSON.stringify(${1:first}, null, 2))",
-    "description": "Logs stringified JSON property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTime": {
-    "key": "consoleTime",
-    "prefix": "ctm",
-    "body": "console.time('${1:first}')",
-    "description": "Console time wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTimeEnd": {
-    "key": "consoleTimeEnd",
-    "prefix": "cte",
-    "body": "console.timeEnd('${1:first}')",
-    "description": "Console time end wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleWarn": {
-    "key": "consoleWarn",
-    "prefix": "cwa",
-    "body": "console.warn(${1:first})",
-    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleInfo": {
-    "key": "consoleInfo",
-    "prefix": "cin",
-    "body": "console.info(${1:first})",
-    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useCallback": {
-    "key": "useCallback",
-    "prefix": "useCallbackSnippet",
-    "body": [
-      "useCallback(",
-      "  () => {",
-      "    ${1:first}",
-      "  },",
-      "  [${2:second}],",
-      ")",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useContext": {
-    "key": "useContext",
-    "prefix": "useContextSnippet",
-    "body": "const ${1:first} = useContext(${2:second})",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useEffect": {
-    "key": "useEffect",
-    "prefix": "useEffectSnippet",
-    "body": [
-      "useEffect(() => {",
-      "  ${1:first}",
-      "",
-      "  return () => {",
-      "    ${2:second}",
-      "  }",
-      "}, [${3:third}])",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useImperativeHandle": {
-    "key": "useImperativeHandle",
-    "prefix": "useImperativeHandleSnippet",
-    "body": [
-      "useImperativeHandle(",
-      "  ${1:first},",
-      "  () => {",
-      "    ${2:second}",
-      "  },",
-      "  [${3:third}],",
-      ")"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useLayoutEffect": {
-    "key": "useLayoutEffect",
-    "prefix": "useLayoutEffectSnippet",
-    "body": [
-      "useLayoutEffect(() => {",
-      "  ${1:first}",
-      "",
-      "  return () => {",
-      "    ${2:second}",
-      "  };",
-      "}, [${3:third}])"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useMemo": {
-    "key": "useMemo",
-    "prefix": "useMemoSnippet",
-    "body": "useMemo(() => ${1:first}, [${2:second}])",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useReducer": {
-    "key": "useReducer",
-    "prefix": "useReducerSnippet",
-    "body": "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third})",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useRef": {
-    "key": "useRef",
-    "prefix": "useRefSnippet",
-    "body": "const ${1:first} = useRef(${2:second})",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useState": {
-    "key": "useState",
-    "prefix": "useStateSnippet",
-    "body": "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second})",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importAs": {
-    "key": "importAs",
-    "prefix": "ima",
-    "body": "import { ${2:second} as ${3:third} } from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouter": {
-    "key": "importBrowserRouter",
-    "prefix": "imbr",
-    "body": "import { BrowserRouter as Router } from 'react-router-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouterWithRouteAndNavLink": {
-    "key": "importBrowserRouterWithRouteAndNavLink",
-    "prefix": "imrr",
-    "body": [
-      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importDestructing": {
-    "key": "importDestructing",
-    "prefix": "imd",
-    "body": "import { ${2:second} } from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importEverything": {
-    "key": "importEverything",
-    "prefix": "ime",
-    "body": "import * as ${2:second} from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importNoModuleName": {
-    "key": "importNoModuleName",
-    "prefix": "imn",
-    "body": "import '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importPropTypes": {
-    "key": "importPropTypes",
-    "prefix": "impt",
-    "body": "import PropTypes from 'prop-types'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReact": {
-    "key": "importReact",
-    "prefix": "imr",
-    "body": "import React from 'react'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactDom": {
-    "key": "importReactDom",
-    "prefix": "imrd",
-    "body": "import ReactDOM from 'react-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponent": {
-    "key": "importReactWithComponent",
-    "prefix": "imrc",
-    "body": "import React, { Component } from 'react'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponentAndPropTypes": {
-    "key": "importReactWithComponentAndPropTypes",
-    "prefix": "imrcp",
-    "body": [
-      "import React, { Component } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemo": {
-    "key": "importReactWithMemo",
-    "prefix": "imrm",
-    "body": "import React, { memo } from 'react'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemoAndPropTypes": {
-    "key": "importReactWithMemoAndPropTypes",
-    "prefix": "imrmp",
-    "body": [
-      "import React, { memo } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponent": {
-    "key": "importReactWithPureComponent",
-    "prefix": "imrpc",
-    "body": "import React, { PureComponent } from 'react'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponentAndPropTypes": {
-    "key": "importReactWithPureComponentAndPropTypes",
-    "prefix": "imrpcp",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterLink": {
-    "key": "importRouterLink",
-    "prefix": "imbrl",
-    "body": "import { Link } from 'react-router-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterNavLink": {
-    "key": "importRouterNavLink",
-    "prefix": "imbrnl",
-    "body": "import { NavLink } from 'react-router-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSetup": {
-    "key": "importRouterSetup",
-    "prefix": "imbrc",
-    "body": "import { Route, Switch, NavLink, Link } from 'react-router-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSwitch": {
-    "key": "importRouterSwitch",
-    "prefix": "imbrs",
-    "body": "import { Switch } from 'react-router-dom'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "import": {
-    "key": "import",
-    "prefix": "imp",
-    "body": "import ${2:second} from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArray": {
-    "key": "propTypeArray",
-    "prefix": "pta",
-    "body": "PropTypes.array",
-    "description": "Array prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayRequired": {
-    "key": "propTypeArrayRequired",
-    "prefix": "ptar",
-    "body": "PropTypes.array.isRequired",
-    "description": "Array prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBool": {
-    "key": "propTypeBool",
-    "prefix": "ptb",
-    "body": "PropTypes.bool",
-    "description": "Bool prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBoolRequired": {
-    "key": "propTypeBoolRequired",
-    "prefix": "ptbr",
-    "body": "PropTypes.bool.isRequired",
-    "description": "Bool prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFunc": {
-    "key": "propTypeFunc",
-    "prefix": "ptf",
-    "body": "PropTypes.func",
-    "description": "Func prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFuncRequired": {
-    "key": "propTypeFuncRequired",
-    "prefix": "ptfr",
-    "body": "PropTypes.func.isRequired",
-    "description": "Func prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumber": {
-    "key": "propTypeNumber",
-    "prefix": "ptn",
-    "body": "PropTypes.number",
-    "description": "Number prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumberRequired": {
-    "key": "propTypeNumberRequired",
-    "prefix": "ptnr",
-    "body": "PropTypes.number.isRequired",
-    "description": "Number prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObject": {
-    "key": "propTypeObject",
-    "prefix": "pto",
-    "body": "PropTypes.object",
-    "description": "Object prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectRequired": {
-    "key": "propTypeObjectRequired",
-    "prefix": "ptor",
-    "body": "PropTypes.object.isRequired",
-    "description": "Object prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeString": {
-    "key": "propTypeString",
-    "prefix": "pts",
-    "body": "PropTypes.string",
-    "description": "String prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeStringRequired": {
-    "key": "propTypeStringRequired",
-    "prefix": "ptsr",
-    "body": "PropTypes.string.isRequired",
-    "description": "String prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNode": {
-    "key": "propTypeNode",
-    "prefix": "ptnd",
-    "body": "PropTypes.node",
-    "description": "Anything that can be rendered: numbers, strings, elements or an array",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNodeRequired": {
-    "key": "propTypeNodeRequired",
-    "prefix": "ptndr",
-    "body": "PropTypes.node.isRequired",
-    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElement": {
-    "key": "propTypeElement",
-    "prefix": "ptel",
-    "body": "PropTypes.element",
-    "description": "React element prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElementRequired": {
-    "key": "propTypeElementRequired",
-    "prefix": "ptelr",
-    "body": "PropTypes.element.isRequired",
-    "description": "React element prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOf": {
-    "key": "propTypeInstanceOf",
-    "prefix": "pti",
-    "body": "PropTypes.instanceOf($0)",
-    "description": "Is an instance of a class prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOfRequired": {
-    "key": "propTypeInstanceOfRequired",
-    "prefix": "ptir",
-    "body": "PropTypes.instanceOf($0).isRequired",
-    "description": "Is an instance of a class prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnum": {
-    "key": "propTypeEnum",
-    "prefix": "pte",
-    "body": "PropTypes.oneOf(['$0'])",
-    "description": "Prop type limited to specific values by treating it as an enum",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnumRequired": {
-    "key": "propTypeEnumRequired",
-    "prefix": "pter",
-    "body": "PropTypes.oneOf(['$0']).isRequired",
-    "description": "Prop type limited to specific values by treating it as an enum required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfType": {
-    "key": "propTypeOneOfType",
-    "prefix": "ptet",
-    "body": ["PropTypes.oneOfType([", "  $0", "])"],
-    "description": "An object that could be one of many types",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfTypeRequired": {
-    "key": "propTypeOneOfTypeRequired",
-    "prefix": "ptetr",
-    "body": ["PropTypes.oneOfType([", "  $0", "]).isRequired"],
-    "description": "An object that could be one of many types required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOf": {
-    "key": "propTypeArrayOf",
-    "prefix": "ptao",
-    "body": "PropTypes.arrayOf($0)",
-    "description": "An array of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOfRequired": {
-    "key": "propTypeArrayOfRequired",
-    "prefix": "ptaor",
-    "body": "PropTypes.arrayOf($0).isRequired",
-    "description": "An array of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOf": {
-    "key": "propTypeObjectOf",
-    "prefix": "ptoo",
-    "body": "PropTypes.objectOf($0)",
-    "description": "An object with property values of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOfRequired": {
-    "key": "propTypeObjectOfRequired",
-    "prefix": "ptoor",
-    "body": "PropTypes.objectOf($0).isRequired",
-    "description": "An object with property values of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShape": {
-    "key": "propTypeShape",
-    "prefix": "ptsh",
-    "body": ["PropTypes.shape({", "  $0", "})"],
-    "description": "An object taking on a particular shape",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShapeRequired": {
-    "key": "propTypeShapeRequired",
-    "prefix": "ptshr",
-    "body": ["PropTypes.shape({", "  $0", "}).isRequired"],
-    "description": "An object taking on a particular shape required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExact": {
-    "key": "propTypeExact",
-    "prefix": "ptex",
-    "body": ["PropTypes.exact({", "  $0", "})"],
-    "description": "An object with warnings on extra properties",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExactRequired": {
-    "key": "propTypeExactRequired",
-    "prefix": "ptexr",
-    "body": ["PropTypes.exact({", "  $0", "}).isRequired"],
-    "description": "An object with warnings on extra properties required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeAny": {
-    "key": "propTypeAny",
-    "prefix": "ptany",
-    "body": "PropTypes.any",
-    "description": "Any prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponent": {
-    "key": "reactNativeComponent",
-    "prefix": "rnc",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentExport": {
-    "key": "reactNativeComponentExport",
-    "prefix": "rnce",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentWithStyles": {
-    "key": "reactNativeComponentWithStyles",
-    "prefix": "rncs",
-    "body": [
-      "import { Text, StyleSheet, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponent": {
-    "key": "reactNativeFunctionalComponent",
-    "prefix": "rnf",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponentWithStyles": {
-    "key": "reactNativeFunctionalComponentWithStyles",
-    "prefix": "rnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponent": {
-    "key": "reactNativeFunctionalExportComponent",
-    "prefix": "rnfe",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponentWithStyles": {
-    "key": "reactNativeFunctionalExportComponentWithStyles",
-    "prefix": "rnfes",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeImport": {
-    "key": "reactNativeImport",
-    "prefix": "imrn",
-    "body": "import { ${1:first} } from 'react-native'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponent": {
-    "key": "reactNativePureComponent",
-    "prefix": "rnpc",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponentExport": {
-    "key": "reactNativePureComponentExport",
-    "prefix": "rnpce",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeStyles": {
-    "key": "reactNativeStyles",
-    "prefix": "rnstyle",
-    "body": "const styles = StyleSheet.create({${1:first}})",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReduxConnect": {
-    "key": "importReduxConnect",
-    "prefix": "redux",
-    "body": "import { connect } from 'react-redux'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxAction": {
-    "key": "reduxAction",
-    "prefix": "rxaction",
-    "body": [
-      "export const ${1:first} = (payload) => ({",
-      "  type: ${2:second},",
-      "  payload",
-      "})",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxConst": {
-    "key": "reduxConst",
-    "prefix": "rxconst",
-    "body": "export const ${1:first} = '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxReducer": {
-    "key": "reduxReducer",
-    "prefix": "rxreducer",
-    "body": [
-      "const initialState = {}",
-      "",
-      "export default (state = initialState, { type, payload }) => {",
-      "  switch (type) {",
-      "",
-      "  case ${1:first}:",
-      "    return { ...state, ...payload }",
-      "",
-      "  default:",
-      "    return state",
-      "  }",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSelector": {
-    "key": "reduxSelector",
-    "prefix": "rxselect",
-    "body": [
-      "import { createSelector } from 'reselect'",
-      "",
-      "export const ${1:first} = state => state.${2:second}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSlice": {
-    "key": "reduxSlice",
-    "prefix": "rxslice",
-    "body": [
-      "import { createSlice } from '@reduxjs/toolkit'",
-      "",
-      "const initialState = {",
-      "",
-      "}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
-      "  name: ${2:second},",
-      "  initialState,",
-      "  reducers: {}",
-      "});",
-      "",
-      "export const {} = ${1:${TM_FILENAME_BASE}}.actions",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}.reducer"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "mappingToProps": {
-    "key": "mappingToProps",
-    "prefix": "reduxmap",
-    "body": [
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "describeBlock": {
-    "key": "describeBlock",
-    "prefix": "desc",
-    "body": "describe('${1:first}', () => { ${2:second} })",
-    "description": "Testing `describe` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itAsyncBlock": {
-    "key": "itAsyncBlock",
-    "prefix": "tita",
-    "body": "it('should ${1:first}', async () => { ${2:second} })",
-    "description": "Testing asynchronous `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itBlock": {
-    "key": "itBlock",
-    "prefix": "tit",
-    "body": "it('should ${1:first}', () => { ${2:second} })",
-    "description": "Testing `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactComponentTestWithRedux": {
-    "key": "setupReactComponentTestWithRedux",
-    "prefix": "srtest",
-    "body": [
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "import { Provider } from 'react-redux'",
-      "",
-      "import store from '~/store'",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "     <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>,",
-      "  )",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "description": "Create test component",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTest": {
-    "key": "setupReactNativeTest",
-    "prefix": "sntest",
-    "body": [
-      "import 'react-native'",
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTestWithRedux": {
-    "key": "setupReactNativeTestWithRedux",
-    "prefix": "snrtest",
-    "body": [
-      "import 'react-native'",
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "import { Provider } from 'react-redux'",
-      "",
-      "import store from '~/store'",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>,",
-      "  )",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactTest": {
-    "key": "setupReactTest",
-    "prefix": "stest",
-    "body": [
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testAsyncBlock": {
-    "key": "testAsyncBlock",
-    "prefix": "testa",
-    "body": "test('should ${1:first}', async () => { ${2:second} })",
-    "description": "Testing `asynchronous test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testBlock": {
-    "key": "testBlock",
-    "prefix": "test",
-    "body": "test('should ${1:first}', () => { ${2:second} })",
-    "description": "Testing `test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefault": {
-    "key": "exportDefault",
-    "prefix": "exp",
-    "body": "export default ${1:first}",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDestructing": {
-    "key": "exportDestructing",
-    "prefix": "exd",
-    "body": "export { ${2:second} } from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportAs": {
-    "key": "exportAs",
-    "prefix": "exa",
-    "body": "export { ${2:second} as ${3:third} } from '${1:first}'",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportNamedFunction": {
-    "key": "exportNamedFunction",
-    "prefix": "enf",
-    "body": "export const ${1:first} = (${2:second}) => {${3:third}}",
-    "description": "Export named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultFunction": {
-    "key": "exportDefaultFunction",
-    "prefix": "edf",
-    "body": "export default (${1:first}) => {${2:second}}",
-    "description": "Export default function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultNamedFunction": {
-    "key": "exportDefaultNamedFunction",
-    "prefix": "ednf",
-    "body": "export default function ${1:first}(${2:second}) {${3:third}}",
-    "description": "Export default named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "method": {
-    "key": "method",
-    "prefix": "met",
-    "body": "${1:first} = (${2:second}) => {${3:third}}",
-    "description": "Creates a method inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertyGet": {
-    "key": "propertyGet",
-    "prefix": "pge",
-    "body": ["get ${1:first}() {", "  return this.${2:second}", "}"],
-    "description": "Creates a getter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertySet": {
-    "key": "propertySet",
-    "prefix": "pse",
-    "body": "set ${1:first}(${2:second}) {${3:third}}",
-    "description": "Creates a setter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forEach": {
-    "key": "forEach",
-    "prefix": "fre",
-    "body": "${1:first}.forEach(${2:second} => {${3:third}})",
-    "description": "Creates a forEach statement",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forOf": {
-    "key": "forOf",
-    "prefix": "fof",
-    "body": "for(let ${1:first} of ${2:second}) {${3:third}}",
-    "description": "Iterating over property names of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forIn": {
-    "key": "forIn",
-    "prefix": "fin",
-    "body": "for(let ${1:first} in ${2:second}) {${3:third}}",
-    "description": "Iterating over property values of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "anonymousFunction": {
-    "key": "anonymousFunction",
-    "prefix": "anfn",
-    "body": "(${1:first}) => { ${2:second} }",
-    "description": "Creates an anonymous function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "namedFunction": {
-    "key": "namedFunction",
-    "prefix": "nfn",
-    "body": "const ${1:first} = (${2:second}) => { ${3:third} }",
-    "description": "Creates a named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingObject": {
-    "key": "destructingObject",
-    "prefix": "dob",
-    "body": "const {${2:second}} = ${1:first}",
-    "description": "Creates and assigns a local variable using object destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingArray": {
-    "key": "destructingArray",
-    "prefix": "dar",
-    "body": "const [${2:second}] = ${1:first}",
-    "description": "Creates and assigns a local variable using array destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setInterval": {
-    "key": "setInterval",
-    "prefix": "sti",
-    "body": "setInterval(() => { ${1:first} }, ${2:second})",
-    "description": "Executes the given function at specified intervals",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setTimeOut": {
-    "key": "setTimeOut",
-    "prefix": "sto",
-    "body": "setTimeout(() => { ${1:first} }, ${2:second})",
-    "description": "Executes the given function after the specified delay",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "promise": {
-    "key": "promise",
-    "prefix": "prom",
-    "body": "return new Promise((resolve, reject) => { ${1:first} })",
-    "description": "Creates and returns a new Promise in the standard ES7 syntax",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructProps": {
-    "key": "destructProps",
-    "prefix": "cp",
-    "body": "const { ${1:first} } = this.props",
-    "description": "Creates and assigns a local variable using props destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructState": {
-    "key": "destructState",
-    "prefix": "cs",
-    "body": "const { ${1:first} } = this.state",
-    "description": "Creates and assigns a local variable using state destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "classConstructor": {
-    "key": "classConstructor",
-    "prefix": "rconst",
-    "body": [
-      "constructor(props) {",
-      "  super(props)",
-      "",
-      "  this.state = {",
-      "     ${1:first}",
-      "  }",
-      "}"
-    ],
-    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "emptyState": {
-    "key": "emptyState",
-    "prefix": "est",
-    "body": "state = { ${1:first} }",
-    "description": "Creates empty state object. To be used in a constructor.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidMount": {
-    "key": "componentDidMount",
-    "prefix": "cdm",
-    "body": "componentDidMount() { ${1:first} }",
-    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "shouldComponentUpdate": {
-    "key": "shouldComponentUpdate",
-    "prefix": "scu",
-    "body": "shouldComponentUpdate(nextProps, nextState) { ${1:first} }",
-    "description": "Invoked before rendering when new props or state are being received. ",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidUpdate": {
-    "key": "componentDidUpdate",
-    "prefix": "cdup",
-    "body": "componentDidUpdate(prevProps, prevState) { ${1:first}} ",
-    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentWillUnmount": {
-    "key": "componentWillUnmount",
-    "prefix": "cwun",
-    "body": "componentWillUnmount() {${1:first} }",
-    "description": "Invoked immediately before a component is unmounted from the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getDerivedStateFromProps": {
-    "key": "getDerivedStateFromProps",
-    "prefix": "gdsfp",
-    "body": "static getDerivedStateFromProps(props, state) {${1:first}}",
-    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getSnapshotBeforeUpdate": {
-    "key": "getSnapshotBeforeUpdate",
-    "prefix": "gsbu",
-    "body": "getSnapshotBeforeUpdate = (prevProps, prevState) => {${1:first}}",
-    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createContext": {
-    "key": "createContext",
-    "prefix": "rcontext",
-    "body": "const ${1:first} = React.createContext()",
-    "description": "Create React context",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createRef": {
-    "key": "createRef",
-    "prefix": "cref",
-    "body": "this.${1:first}Ref = React.createRef()",
-    "description": "Create ref statement used inside constructor",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateObject": {
-    "key": "componentSetStateObject",
-    "prefix": "sst",
-    "body": "this.setState({${1:first}})",
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateFunc": {
-    "key": "componentSetStateFunc",
-    "prefix": "ssf",
-    "body": "this.setState((state, props) => { return { ${1:first} }})",
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentProps": {
-    "key": "componentProps",
-    "prefix": "props",
-    "body": "this.props.${1:first}",
-    "description": "Access component's props",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentState": {
-    "key": "componentState",
-    "prefix": "state",
-    "body": "this.state.${1:first}",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "bindThis": {
-    "key": "bindThis",
-    "prefix": "bnd",
-    "body": "this.${1:first} = this.${1:first}.bind(this)",
-    "description": "Binds this to a method",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "commentBigBlock": {
-    "key": "commentBigBlock",
-    "prefix": "cmmb",
-    "body": ["/**", " * ${1:first}", " */"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponentWithRedux": {
-    "key": "hocComponentWithRedux",
-    "prefix": "hocredux",
-    "body": [
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "export const mapStateToProps = state => ({})",
-      "",
-      "export const mapDispatchToProps = {}",
-      "",
-      "export const ${1:first} = (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
-      "",
-      "  hocComponent.propTypes = {}",
-      "",
-      "  return hocComponent",
-      "}",
-      "",
-      "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent))",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponent": {
-    "key": "hocComponent",
-    "prefix": "hoc",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "export default (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
-      "",
-      "  hocComponent.propTypes = {}",
-      "",
-      "  return hocComponent",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typeofSnippet": {
-    "key": "typeofSnippet",
-    "prefix": "tpf",
-    "body": "typeof ${1:first}",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  }
-}
diff --git a/yarn.lock b/yarn.lock
index d7a742c..95a761b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,10 +2,10 @@
 # yarn lockfile v1
 
 
-"@babel/cli@7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3"
-  integrity sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==
+"@babel/cli@7.17.0":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.17.0.tgz#9b932d8f08a2e218fcdd9bba456044eb0a2e0b2c"
+  integrity sha512-es10YH/ejXbg551vtnmEzIPe3MQRNOS644o3pf8vUr1tIeNzVNlP8BBvs1Eh7roh5A+k2fEHUas+ZptOWHA1fQ==
   dependencies:
     commander "^4.0.1"
     convert-source-map "^1.1.0"
@@ -18,198 +18,198 @@
     "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
     chokidar "^3.4.0"
 
-"@babel/code-frame@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
-  integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
+"@babel/code-frame@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+  integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
   dependencies:
-    "@babel/highlight" "^7.16.0"
+    "@babel/highlight" "^7.16.7"
 
-"@babel/eslint-parser@7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz#48d3485091d6e36915358e4c0d0b2ebe6da90462"
-  integrity sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==
+"@babel/eslint-parser@7.17.0":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz#eabb24ad9f0afa80e5849f8240d0e5facc2d90d6"
+  integrity sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==
   dependencies:
     eslint-scope "^5.1.1"
     eslint-visitor-keys "^2.1.0"
     semver "^6.3.0"
 
-"@babel/generator@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf"
-  integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==
+"@babel/generator@^7.17.0":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e"
+  integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==
   dependencies:
-    "@babel/types" "^7.16.0"
+    "@babel/types" "^7.17.0"
     jsesc "^2.5.1"
     source-map "^0.5.0"
 
-"@babel/helper-annotate-as-pure@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d"
-  integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-create-class-features-plugin@^7.16.0":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz#5d1bcd096792c1ebec6249eebc6358eec55d0cad"
-  integrity sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==
-  dependencies:
-    "@babel/helper-annotate-as-pure" "^7.16.0"
-    "@babel/helper-environment-visitor" "^7.16.5"
-    "@babel/helper-function-name" "^7.16.0"
-    "@babel/helper-member-expression-to-functions" "^7.16.5"
-    "@babel/helper-optimise-call-expression" "^7.16.0"
-    "@babel/helper-replace-supers" "^7.16.5"
-    "@babel/helper-split-export-declaration" "^7.16.0"
-
-"@babel/helper-environment-visitor@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8"
-  integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-function-name@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481"
-  integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==
-  dependencies:
-    "@babel/helper-get-function-arity" "^7.16.0"
-    "@babel/template" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-get-function-arity@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa"
-  integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-hoist-variables@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a"
-  integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-member-expression-to-functions@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz#1bc9f7e87354e86f8879c67b316cb03d3dc2caab"
-  integrity sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-optimise-call-expression@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338"
-  integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074"
-  integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==
-
-"@babel/helper-replace-supers@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz#96d3988bd0ab0a2d22c88c6198c3d3234ca25326"
-  integrity sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==
-  dependencies:
-    "@babel/helper-environment-visitor" "^7.16.5"
-    "@babel/helper-member-expression-to-functions" "^7.16.5"
-    "@babel/helper-optimise-call-expression" "^7.16.0"
-    "@babel/traverse" "^7.16.5"
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-split-export-declaration@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438"
-  integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-validator-identifier@^7.15.7":
-  version "7.15.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
-  integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
-
-"@babel/helper-validator-option@^7.14.5":
-  version "7.14.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
-  integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
-
-"@babel/highlight@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
-  integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.15.7"
+"@babel/helper-annotate-as-pure@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+  integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-create-class-features-plugin@^7.16.7":
+  version "7.17.1"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21"
+  integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/helper-member-expression-to-functions" "^7.16.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/helper-replace-supers" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+
+"@babel/helper-environment-visitor@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7"
+  integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-function-name@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f"
+  integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.16.7"
+    "@babel/template" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-get-function-arity@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
+  integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-hoist-variables@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+  integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-member-expression-to-functions@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0"
+  integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-optimise-call-expression@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2"
+  integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-plugin-utils@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
+  integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
+
+"@babel/helper-replace-supers@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1"
+  integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-member-expression-to-functions" "^7.16.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/traverse" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-split-export-declaration@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+  integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-validator-identifier@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+  integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+
+"@babel/helper-validator-option@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23"
+  integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==
+
+"@babel/highlight@^7.16.7":
+  version "7.16.10"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
+  integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
     chalk "^2.0.0"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.16.0", "@babel/parser@^7.16.5":
-  version "7.16.6"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314"
-  integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==
-
-"@babel/plugin-syntax-typescript@^7.16.0":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz#f47a33e4eee38554f00fb6b2f894fa1f5649b0b3"
-  integrity sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.16.5"
-
-"@babel/plugin-transform-typescript@^7.16.1":
-  version "7.16.1"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409"
-  integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==
-  dependencies:
-    "@babel/helper-create-class-features-plugin" "^7.16.0"
-    "@babel/helper-plugin-utils" "^7.14.5"
-    "@babel/plugin-syntax-typescript" "^7.16.0"
-
-"@babel/preset-typescript@7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz#b86a5b0ae739ba741347d2f58c52f52e63cf1ba1"
-  integrity sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.16.5"
-    "@babel/helper-validator-option" "^7.14.5"
-    "@babel/plugin-transform-typescript" "^7.16.1"
-
-"@babel/template@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6"
-  integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==
-  dependencies:
-    "@babel/code-frame" "^7.16.0"
-    "@babel/parser" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/traverse@^7.16.5":
-  version "7.16.5"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3"
-  integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==
-  dependencies:
-    "@babel/code-frame" "^7.16.0"
-    "@babel/generator" "^7.16.5"
-    "@babel/helper-environment-visitor" "^7.16.5"
-    "@babel/helper-function-name" "^7.16.0"
-    "@babel/helper-hoist-variables" "^7.16.0"
-    "@babel/helper-split-export-declaration" "^7.16.0"
-    "@babel/parser" "^7.16.5"
-    "@babel/types" "^7.16.0"
+"@babel/parser@^7.16.7", "@babel/parser@^7.17.0":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c"
+  integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==
+
+"@babel/plugin-syntax-typescript@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8"
+  integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-typescript@^7.16.7":
+  version "7.16.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0"
+  integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-typescript" "^7.16.7"
+
+"@babel/preset-typescript@7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9"
+  integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/helper-validator-option" "^7.16.7"
+    "@babel/plugin-transform-typescript" "^7.16.7"
+
+"@babel/template@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+  integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/parser" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/traverse@^7.16.7":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30"
+  integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/generator" "^7.17.0"
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/helper-hoist-variables" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    "@babel/parser" "^7.17.0"
+    "@babel/types" "^7.17.0"
     debug "^4.1.0"
     globals "^11.1.0"
 
-"@babel/types@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
-  integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
+"@babel/types@^7.16.7", "@babel/types@^7.17.0":
+  version "7.17.0"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
+  integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==
   dependencies:
-    "@babel/helper-validator-identifier" "^7.15.7"
+    "@babel/helper-validator-identifier" "^7.16.7"
     to-fast-properties "^2.0.0"
 
 "@eslint/eslintrc@^1.0.5":
@@ -277,28 +277,29 @@
   resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
   integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
 
-"@types/node@17.0.5":
-  version "17.0.5"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.5.tgz#57ca67ec4e57ad9e4ef5a6bab48a15387a1c83e0"
-  integrity sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==
-
-"@types/prettier@2.4.2":
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281"
-  integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==
-
-"@types/vscode@1.60.0":
-  version "1.60.0"
-  resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.60.0.tgz#9330c317691b4f53441a18b598768faeeb71618a"
-  integrity sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==
-
-"@typescript-eslint/eslint-plugin@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.1.tgz#97dfaa39f38e99f86801fdf34f9f1bed66704258"
-  integrity sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==
-  dependencies:
-    "@typescript-eslint/experimental-utils" "5.8.1"
-    "@typescript-eslint/scope-manager" "5.8.1"
+"@types/node@17.0.16":
+  version "17.0.16"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.16.tgz#e3733f46797b9df9e853ca9f719c8a6f7b84cd26"
+  integrity sha512-ydLaGVfQOQ6hI1xK2A5nVh8bl0OGoIfYMxPWHqqYe9bTkWCfqiVvZoh2I/QF2sNSkZzZyROBoTefIEI+PB6iIA==
+
+"@types/prettier@2.4.3":
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf"
+  integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==
+
+"@types/vscode@1.64.0":
+  version "1.64.0"
+  resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.64.0.tgz#bfd82c8d92dc7824c1be084be1ab46ce20d7fb55"
+  integrity sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==
+
+"@typescript-eslint/eslint-plugin@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz#3b866371d8d75c70f9b81535e7f7d3aa26527c7a"
+  integrity sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.11.0"
+    "@typescript-eslint/type-utils" "5.11.0"
+    "@typescript-eslint/utils" "5.11.0"
     debug "^4.3.2"
     functional-red-black-tree "^1.0.1"
     ignore "^5.1.8"
@@ -306,60 +307,69 @@
     semver "^7.3.5"
     tsutils "^3.21.0"
 
-"@typescript-eslint/experimental-utils@5.8.1", "@typescript-eslint/experimental-utils@^5.0.0":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz#01861eb2f0749f07d02db342b794145a66ed346f"
-  integrity sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==
+"@typescript-eslint/parser@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.11.0.tgz#b4fcaf65513f9b34bdcbffdda055724a5efb7e04"
+  integrity sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==
   dependencies:
-    "@types/json-schema" "^7.0.9"
-    "@typescript-eslint/scope-manager" "5.8.1"
-    "@typescript-eslint/types" "5.8.1"
-    "@typescript-eslint/typescript-estree" "5.8.1"
-    eslint-scope "^5.1.1"
-    eslint-utils "^3.0.0"
+    "@typescript-eslint/scope-manager" "5.11.0"
+    "@typescript-eslint/types" "5.11.0"
+    "@typescript-eslint/typescript-estree" "5.11.0"
+    debug "^4.3.2"
 
-"@typescript-eslint/parser@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.8.1.tgz#380f5f1e596b540059998aa3fc80d78f0f9b0d0a"
-  integrity sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==
+"@typescript-eslint/scope-manager@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz#f5aef83ff253f457ecbee5f46f762298f0101e4b"
+  integrity sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==
   dependencies:
-    "@typescript-eslint/scope-manager" "5.8.1"
-    "@typescript-eslint/types" "5.8.1"
-    "@typescript-eslint/typescript-estree" "5.8.1"
-    debug "^4.3.2"
+    "@typescript-eslint/types" "5.11.0"
+    "@typescript-eslint/visitor-keys" "5.11.0"
 
-"@typescript-eslint/scope-manager@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.8.1.tgz#7fc0604f7ade8833e4d42cebaa1e2debf8b932e4"
-  integrity sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==
+"@typescript-eslint/type-utils@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz#58be0ba73d1f6ef8983d79f7f0bc2209b253fefe"
+  integrity sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==
   dependencies:
-    "@typescript-eslint/types" "5.8.1"
-    "@typescript-eslint/visitor-keys" "5.8.1"
+    "@typescript-eslint/utils" "5.11.0"
+    debug "^4.3.2"
+    tsutils "^3.21.0"
 
-"@typescript-eslint/types@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.8.1.tgz#04c6b49ebc8c99238238a6b8b43f2fc613983b5a"
-  integrity sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==
+"@typescript-eslint/types@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.11.0.tgz#ba345818a2540fdf2755c804dc2158517ab61188"
+  integrity sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==
 
-"@typescript-eslint/typescript-estree@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.1.tgz#a592855be688e7b729a1e9411d7d74ec992ed6ef"
-  integrity sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==
+"@typescript-eslint/typescript-estree@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz#53f9e09b88368191e52020af77c312a4777ffa43"
+  integrity sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==
   dependencies:
-    "@typescript-eslint/types" "5.8.1"
-    "@typescript-eslint/visitor-keys" "5.8.1"
+    "@typescript-eslint/types" "5.11.0"
+    "@typescript-eslint/visitor-keys" "5.11.0"
     debug "^4.3.2"
     globby "^11.0.4"
     is-glob "^4.0.3"
     semver "^7.3.5"
     tsutils "^3.21.0"
 
-"@typescript-eslint/visitor-keys@5.8.1":
-  version "5.8.1"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.1.tgz#58a2c566265d5511224bc316149890451c1bbab0"
-  integrity sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==
+"@typescript-eslint/utils@5.11.0", "@typescript-eslint/utils@^5.10.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.11.0.tgz#d91548ef180d74c95d417950336d9260fdbe1dc5"
+  integrity sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==
   dependencies:
-    "@typescript-eslint/types" "5.8.1"
+    "@types/json-schema" "^7.0.9"
+    "@typescript-eslint/scope-manager" "5.11.0"
+    "@typescript-eslint/types" "5.11.0"
+    "@typescript-eslint/typescript-estree" "5.11.0"
+    eslint-scope "^5.1.1"
+    eslint-utils "^3.0.0"
+
+"@typescript-eslint/visitor-keys@5.11.0":
+  version "5.11.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz#888542381f1a2ac745b06d110c83c0b261487ebb"
+  integrity sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==
+  dependencies:
+    "@typescript-eslint/types" "5.11.0"
     eslint-visitor-keys "^3.0.0"
 
 acorn-jsx@^5.3.1:
@@ -372,6 +382,11 @@ acorn@^8.6.0:
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
   integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
 
+acorn@^8.7.0:
+  version "8.7.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
+  integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+
 ajv@^6.10.0, ajv@^6.12.4:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -382,11 +397,6 @@ ajv@^6.10.0, ajv@^6.12.4:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-ansi-colors@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
-  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-
 ansi-regex@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
@@ -618,13 +628,6 @@ doctrine@^3.0.0:
   dependencies:
     esutils "^2.0.2"
 
-enquirer@^2.3.5:
-  version "2.3.6"
-  resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
-  integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
-  dependencies:
-    ansi-colors "^4.1.1"
-
 es-abstract@^1.19.0, es-abstract@^1.19.1:
   version "1.19.1"
   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
@@ -683,14 +686,13 @@ eslint-import-resolver-node@^0.3.6:
     debug "^3.2.7"
     resolve "^1.20.0"
 
-eslint-module-utils@^2.7.1:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c"
-  integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==
+eslint-module-utils@^2.7.2:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
+  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
   dependencies:
     debug "^3.2.7"
     find-up "^2.1.0"
-    pkg-dir "^2.0.0"
 
 eslint-plugin-babel@5.3.1:
   version "5.3.1"
@@ -707,31 +709,31 @@ eslint-plugin-eslint-comments@3.2.0:
     escape-string-regexp "^1.0.5"
     ignore "^5.0.5"
 
-eslint-plugin-import@2.25.3:
-  version "2.25.3"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766"
-  integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==
+eslint-plugin-import@2.25.4:
+  version "2.25.4"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
+  integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
   dependencies:
     array-includes "^3.1.4"
     array.prototype.flat "^1.2.5"
     debug "^2.6.9"
     doctrine "^2.1.0"
     eslint-import-resolver-node "^0.3.6"
-    eslint-module-utils "^2.7.1"
+    eslint-module-utils "^2.7.2"
     has "^1.0.3"
     is-core-module "^2.8.0"
     is-glob "^4.0.3"
     minimatch "^3.0.4"
     object.values "^1.1.5"
     resolve "^1.20.0"
-    tsconfig-paths "^3.11.0"
+    tsconfig-paths "^3.12.0"
 
-eslint-plugin-jest@25.3.3:
-  version "25.3.3"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.3.3.tgz#60bb52a08ff37933adf8b19ba9b216c13c22fdc7"
-  integrity sha512-qi7aduaU4/oWegWo0zH4kbJbx8+Be+ABTr72OnO68zTMcJeeSuyH1CduTGF4ATyNFgpE1zp0u10/gIhe+QDSfg==
+eslint-plugin-jest@26.1.0:
+  version "26.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.1.0.tgz#9f6c33e66f3cef3f2832c3a4d2caa21a75792dee"
+  integrity sha512-vjF6RvcKm4xZSJgCmXb9fXmhzTva+I9jtj9Qv5JeZQTRocU7WT1g3Kx0cZ+00SekPe2DtSWDawHtSj4RaxFhXQ==
   dependencies:
-    "@typescript-eslint/experimental-utils" "^5.0.0"
+    "@typescript-eslint/utils" "^5.10.0"
 
 eslint-plugin-prettier@4.0.0:
   version "4.0.0"
@@ -783,10 +785,15 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0:
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2"
   integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==
 
-eslint@8.5.0:
-  version "8.5.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.5.0.tgz#ddd2c1afd8f412036f87ae2a063d2aa296d3175f"
-  integrity sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==
+eslint-visitor-keys@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1"
+  integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==
+
+eslint@8.8.0:
+  version "8.8.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d"
+  integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==
   dependencies:
     "@eslint/eslintrc" "^1.0.5"
     "@humanwhocodes/config-array" "^0.9.2"
@@ -795,12 +802,11 @@ eslint@8.5.0:
     cross-spawn "^7.0.2"
     debug "^4.3.2"
     doctrine "^3.0.0"
-    enquirer "^2.3.5"
     escape-string-regexp "^4.0.0"
     eslint-scope "^7.1.0"
     eslint-utils "^3.0.0"
-    eslint-visitor-keys "^3.1.0"
-    espree "^9.2.0"
+    eslint-visitor-keys "^3.2.0"
+    espree "^9.3.0"
     esquery "^1.4.0"
     esutils "^2.0.2"
     fast-deep-equal "^3.1.3"
@@ -808,7 +814,7 @@ eslint@8.5.0:
     functional-red-black-tree "^1.0.1"
     glob-parent "^6.0.1"
     globals "^13.6.0"
-    ignore "^4.0.6"
+    ignore "^5.2.0"
     import-fresh "^3.0.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
@@ -819,9 +825,7 @@ eslint@8.5.0:
     minimatch "^3.0.4"
     natural-compare "^1.4.0"
     optionator "^0.9.1"
-    progress "^2.0.0"
     regexpp "^3.2.0"
-    semver "^7.2.1"
     strip-ansi "^6.0.1"
     strip-json-comments "^3.1.0"
     text-table "^0.2.0"
@@ -836,6 +840,15 @@ espree@^9.2.0:
     acorn-jsx "^5.3.1"
     eslint-visitor-keys "^3.1.0"
 
+espree@^9.3.0:
+  version "9.3.0"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8"
+  integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==
+  dependencies:
+    acorn "^8.7.0"
+    acorn-jsx "^5.3.1"
+    eslint-visitor-keys "^3.1.0"
+
 esquery@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
@@ -1068,7 +1081,7 @@ ignore@^4.0.6:
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
-ignore@^5.0.5, ignore@^5.1.4, ignore@^5.1.8:
+ignore@^5.0.5, ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
   integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
@@ -1446,13 +1459,6 @@ pify@^4.0.1:
   resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
   integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
 
-pkg-dir@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
-  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
-  dependencies:
-    find-up "^2.1.0"
-
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -1470,11 +1476,6 @@ prettier@2.5.1:
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
   integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
 
-progress@^2.0.0:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
-  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
 punycode@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -1544,7 +1545,7 @@ semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-semver@^7.2.1, semver@^7.3.5:
+semver@^7.3.5:
   version "7.3.5"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
   integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
@@ -1651,7 +1652,7 @@ to-regex-range@^5.0.1:
   dependencies:
     is-number "^7.0.0"
 
-tsconfig-paths@^3.11.0:
+tsconfig-paths@^3.12.0:
   version "3.12.0"
   resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
   integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
@@ -1685,10 +1686,10 @@ type-fest@^0.20.2:
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
   integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
 
-typescript@4.5.4:
-  version "4.5.4"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8"
-  integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==
+typescript@4.5.5:
+  version "4.5.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
+  integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
 
 unbox-primitive@^1.0.1:
   version "1.0.1"

From d6fbc63e1192f9b4771abf9b413e766ecec3beb4 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Wed, 9 Feb 2022 00:09:09 +0100
Subject: [PATCH 09/18] fix: load snippets dynamically inside search

---
 .gitignore                   |  1 -
 package.json                 |  2 +-
 src/helpers/snippetSearch.ts | 13 ++++++++++---
 src/index.ts                 |  6 +++++-
 src/snippets/generated.json  |  1 +
 yarn.lock                    |  2 +-
 6 files changed, 18 insertions(+), 7 deletions(-)
 create mode 100644 src/snippets/generated.json

diff --git a/.gitignore b/.gitignore
index f9273d6..42ffe71 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,3 @@ node_modules
 *.log
 .DS_Store
 lib/
-src/snippets/generated.json
diff --git a/package.json b/package.json
index 6dc9fe0..6e7be68 100644
--- a/package.json
+++ b/package.json
@@ -133,7 +133,7 @@
     "@babel/preset-typescript": "7.16.7",
     "@types/node": "17.0.16",
     "@types/prettier": "2.4.3",
-    "@types/vscode": "1.64.0",
+    "@types/vscode": "^1.60.0",
     "@typescript-eslint/eslint-plugin": "5.11.0",
     "@typescript-eslint/parser": "5.11.0",
     "eslint": "8.8.0",
diff --git a/src/helpers/snippetSearch.ts b/src/helpers/snippetSearch.ts
index 95c70df..bb2855a 100644
--- a/src/helpers/snippetSearch.ts
+++ b/src/helpers/snippetSearch.ts
@@ -1,14 +1,21 @@
+import { readFileSync } from 'fs';
 import { SnippetString, window } from 'vscode';
 
-import snippets from '../snippets/generated.json';
-
 import { parseSnippet } from './formatters';
 import { Snippet } from './generateSnippets';
 
 const snippetSearch = async () => {
   const { showQuickPick, activeTextEditor } = window;
 
-  const snippetsArray = Object.entries(snippets) as [string, Snippet][];
+  const snippets = readFileSync(
+    __dirname + '/../snippets/generated.json',
+    'utf8',
+  );
+
+  const snippetsArray = Object.entries(JSON.parse(snippets)) as [
+    string,
+    Snippet,
+  ][];
 
   const items = snippetsArray.map(
     ([shortDescription, { body, description, prefix: label }]) => ({
diff --git a/src/index.ts b/src/index.ts
index e7c3e87..a111de3 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -8,6 +8,7 @@ import {
 
 import generateSnippets from './helpers/generateSnippets';
 import snippetSearch from './helpers/snippetSearch';
+import generatedSnippets from './snippets/generated.json';
 
 const showRestartMessage = async ({
   affectsConfiguration,
@@ -30,8 +31,11 @@ const showRestartMessage = async ({
   }
 };
 
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
   workspace.onDidChangeConfiguration(showRestartMessage);
+  if (JSON.stringify(generatedSnippets).length < 10) {
+    await generateSnippets();
+  }
   const snippetSearchCommand = commands.registerCommand(
     'reactSnippets.search',
     snippetSearch,
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/src/snippets/generated.json
@@ -0,0 +1 @@
+{}
diff --git a/yarn.lock b/yarn.lock
index 95a761b..598ecad 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -287,7 +287,7 @@
   resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf"
   integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==
 
-"@types/vscode@1.64.0":
+"@types/vscode@^1.60.0":
   version "1.64.0"
   resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.64.0.tgz#bfd82c8d92dc7824c1be084be1ab46ce20d7fb55"
   integrity sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==

From 99f6ff6b306fbfdfbd8f3d7c1967da9a61d6533f Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Wed, 9 Feb 2022 00:09:27 +0100
Subject: [PATCH 10/18] 4.3.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 6e7be68..35d408b 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.2.0",
+  "version": "4.3.0",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",

From 8719d5a3397e255ab8757618bc00ebc152d44060 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Wed, 9 Feb 2022 00:15:08 +0100
Subject: [PATCH 11/18] docs: add Duckly sponsor

---
 README.md                   |   15 +-
 src/snippets/generated.json | 1901 ++++++++++++++++++++++++++++++++++-
 2 files changed, 1911 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 726bb92..b00b32a 100644
--- a/README.md
+++ b/README.md
@@ -41,6 +41,13 @@ Manage pull requests and conduct code reviews in your IDE with full source-tree
 
 <br>
 
+<a title="Try Duckly" href="https://bit.ly/34IZ7H1"><img src="https://storage.googleapis.com/gitduck/img/duckly-sponsor-vsc-opt.png"></a>
+
+<p>Easy pair programming with any IDE. Duckly enables you to talk, share your code inreal-time, server and terminal with people using different IDEs <a title="Try it out for free" href="https://bit.ly/34IZ7H1">Try it out for free</a>
+</p>
+
+<br>
+
 ### Conquer of Completion
 
 It is possible to use this package in your vim/neovim text editor, to make this possible, make sure you have the `coc.nvim` previously configured, then add this command to your `init.vim`
@@ -55,17 +62,17 @@ Note: This example uses `vim-plug` as a package manager, feel free to use some o
 
 <br>
 
-### Packer 
+### Packer
 
 For use with packer the syntax is a little different. Just add in your `init.vim` or `init.lua`:
 
 ```shell
-use {'dsznajder/vscode-es7-javascript-react-snippets', 
+use {'dsznajder/vscode-es7-javascript-react-snippets',
 run = 'yarn install --frozen-lockfile && yarn compile'
 }
-``` 
+```
 
-When saving the file, the update will be done ( `:w` ) 
+When saving the file, the update will be done ( `:w` )
 
 <br>
 
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
index 0967ef4..8ffd24a 100644
--- a/src/snippets/generated.json
+++ b/src/snippets/generated.json
@@ -1 +1,1900 @@
-{}
+{
+  "exportType": {
+    "body": ["export type ${1:first} = {${2:second}}"],
+    "key": "exportType",
+    "prefix": "exptp",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportInterface": {
+    "key": "exportInterface",
+    "prefix": "expint",
+    "body": ["export interface ${1:first} {${2:second}}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponent": {
+    "key": "typescriptReactClassComponent",
+    "prefix": "tsrcc",
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportComponent": {
+    "key": "typescriptReactClassExportComponent",
+    "prefix": "tsrce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalExportComponent": {
+    "key": "typescriptReactFunctionalExportComponent",
+    "prefix": "tsrfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalComponent": {
+    "key": "typescriptReactFunctionalComponent",
+    "prefix": "tsrfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionExportComponent": {
+    "key": "typescriptReactArrowFunctionExportComponent",
+    "prefix": "tsrafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionComponent": {
+    "key": "typescriptReactArrowFunctionComponent",
+    "prefix": "tsrafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassPureComponent": {
+    "key": "typescriptReactClassPureComponent",
+    "prefix": "tsrpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportPureComponent": {
+    "key": "typescriptReactClassExportPureComponent",
+    "prefix": "tsrpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponentRedux": {
+    "key": "typescriptReactClassComponentRedux",
+    "prefix": "tsrcredux",
+    "body": [
+      "import { connect } from 'react-redux'",
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponent": {
+    "key": "typescriptReactNativeArrowFunctionComponent",
+    "prefix": "tsrnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system in TypeScript",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponentWithStyles": {
+    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
+    "prefix": "tsrnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponent": {
+    "key": "reactArrowFunctionComponent",
+    "prefix": "rafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponentWithPropTypes": {
+    "key": "reactArrowFunctionComponentWithPropTypes",
+    "prefix": "rafcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = props => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionExportComponent": {
+    "key": "reactArrowFunctionExportComponent",
+    "prefix": "rafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponent": {
+    "key": "reactClassComponent",
+    "prefix": "rcc",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentPropTypes": {
+    "key": "reactClassComponentPropTypes",
+    "prefix": "rccp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {${2:second}: ${3:third}}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with PropTypes and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentRedux": {
+    "key": "reactClassComponentRedux",
+    "prefix": "rcredux",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentReduxPropTypes": {
+    "key": "reactClassComponentReduxPropTypes",
+    "prefix": "rcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {",
+      "    ${2:second}: ${3:third}",
+      "  }",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponent": {
+    "key": "reactClassExportComponent",
+    "prefix": "rce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponentWithPropTypes": {
+    "key": "reactClassExportComponentWithPropTypes",
+    "prefix": "rcep",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportPureComponent": {
+    "key": "reactClassExportPureComponent",
+    "prefix": "rpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system export",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponent": {
+    "key": "reactClassPureComponent",
+    "prefix": "rpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React pure component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponentWithPropTypes": {
+    "key": "reactClassPureComponentWithPropTypes",
+    "prefix": "rpcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponent": {
+    "key": "reactFunctionMemoComponent",
+    "prefix": "rmc",
+    "body": [
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo(() => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponentWithPropTypes": {
+    "key": "reactFunctionMemoComponentWithPropTypes",
+    "prefix": "rmcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo((props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponent": {
+    "key": "reactFunctionalComponent",
+    "prefix": "rfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentRedux": {
+    "key": "reactFunctionalComponentRedux",
+    "prefix": "rfcredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React functional component with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentReduxPropTypes": {
+    "key": "reactFunctionalComponentReduxPropTypes",
+    "prefix": "rfcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {",
+      "  ${2:second}: PropTypes.${3:third}",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentWithPropTypes": {
+    "key": "reactFunctionalComponentWithPropTypes",
+    "prefix": "rfcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}(props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalExportComponent": {
+    "key": "reactFunctionalExportComponent",
+    "prefix": "rfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleAssert": {
+    "key": "consoleAssert",
+    "prefix": "cas",
+    "body": ["console.assert(${1:first}, ${2:second})"],
+    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleClear": {
+    "key": "consoleClear",
+    "prefix": "ccl",
+    "body": ["console.clear()"],
+    "description": "Clears the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleCount": {
+    "key": "consoleCount",
+    "prefix": "cco",
+    "body": ["console.count(${1:first})"],
+    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleDir": {
+    "key": "consoleDir",
+    "prefix": "cdi",
+    "body": ["console.dir(${1:first})"],
+    "description": "Prints a JavaScript representation of the specified object",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleError": {
+    "key": "consoleError",
+    "prefix": "cer",
+    "body": ["console.error(${1:first})"],
+    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroup": {
+    "key": "consoleGroup",
+    "prefix": "cgr",
+    "body": ["console.group('${1:first}')"],
+    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroupEnd": {
+    "key": "consoleGroupEnd",
+    "prefix": "cge",
+    "body": ["console.groupEnd()"],
+    "description": "Closes out the corresponding console.group().",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLog": {
+    "key": "consoleLog",
+    "prefix": "clg",
+    "body": ["console.log(${1:first})"],
+    "description": "Displays a message in the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTrace": {
+    "key": "consoleTrace",
+    "prefix": "ctr",
+    "body": ["console.trace(${1:first})"],
+    "description": "Prints a stack trace from the point where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogObject": {
+    "key": "consoleLogObject",
+    "prefix": "clo",
+    "body": ["console.log('${1:first}', ${1:first})"],
+    "description": "Logs property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogJson": {
+    "key": "consoleLogJson",
+    "prefix": "clj",
+    "body": ["console.log('${1:first}', JSON.stringify(${1:first}, null, 2))"],
+    "description": "Logs stringified JSON property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTime": {
+    "key": "consoleTime",
+    "prefix": "ctm",
+    "body": ["console.time('${1:first}')"],
+    "description": "Console time wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTimeEnd": {
+    "key": "consoleTimeEnd",
+    "prefix": "cte",
+    "body": ["console.timeEnd('${1:first}')"],
+    "description": "Console time end wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleWarn": {
+    "key": "consoleWarn",
+    "prefix": "cwa",
+    "body": ["console.warn(${1:first})"],
+    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleInfo": {
+    "key": "consoleInfo",
+    "prefix": "cin",
+    "body": ["console.info(${1:first})"],
+    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useCallback": {
+    "key": "useCallback",
+    "prefix": "useCallbackSnippet",
+    "body": [
+      "useCallback(",
+      "  () => {",
+      "    ${1:first}",
+      "  },",
+      "  [${2:second}],",
+      ")",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useContext": {
+    "key": "useContext",
+    "prefix": "useContextSnippet",
+    "body": ["const ${1:first} = useContext(${2:second})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useEffect": {
+    "key": "useEffect",
+    "prefix": "useEffectSnippet",
+    "body": [
+      "useEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  }",
+      "}, [${3:third}])",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useImperativeHandle": {
+    "key": "useImperativeHandle",
+    "prefix": "useImperativeHandleSnippet",
+    "body": [
+      "useImperativeHandle(",
+      "  ${1:first},",
+      "  () => {",
+      "    ${2:second}",
+      "  },",
+      "  [${3:third}],",
+      ")"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useLayoutEffect": {
+    "key": "useLayoutEffect",
+    "prefix": "useLayoutEffectSnippet",
+    "body": [
+      "useLayoutEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  };",
+      "}, [${3:third}])"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useMemo": {
+    "key": "useMemo",
+    "prefix": "useMemoSnippet",
+    "body": ["useMemo(() => ${1:first}, [${2:second}])"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useReducer": {
+    "key": "useReducer",
+    "prefix": "useReducerSnippet",
+    "body": [
+      "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useRef": {
+    "key": "useRef",
+    "prefix": "useRefSnippet",
+    "body": ["const ${1:first} = useRef(${2:second})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useState": {
+    "key": "useState",
+    "prefix": "useStateSnippet",
+    "body": [
+      "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importAs": {
+    "key": "importAs",
+    "prefix": "ima",
+    "body": ["import { ${2:second} as ${3:third} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouter": {
+    "key": "importBrowserRouter",
+    "prefix": "imbr",
+    "body": ["import { BrowserRouter as Router } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouterWithRouteAndNavLink": {
+    "key": "importBrowserRouterWithRouteAndNavLink",
+    "prefix": "imrr",
+    "body": [
+      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importDestructing": {
+    "key": "importDestructing",
+    "prefix": "imd",
+    "body": ["import { ${2:second} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importEverything": {
+    "key": "importEverything",
+    "prefix": "ime",
+    "body": ["import * as ${2:second} from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importNoModuleName": {
+    "key": "importNoModuleName",
+    "prefix": "imn",
+    "body": ["import '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importPropTypes": {
+    "key": "importPropTypes",
+    "prefix": "impt",
+    "body": ["import PropTypes from 'prop-types'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReact": {
+    "key": "importReact",
+    "prefix": "imr",
+    "body": ["import React from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactDom": {
+    "key": "importReactDom",
+    "prefix": "imrd",
+    "body": ["import ReactDOM from 'react-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponent": {
+    "key": "importReactWithComponent",
+    "prefix": "imrc",
+    "body": ["import React, { Component } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponentAndPropTypes": {
+    "key": "importReactWithComponentAndPropTypes",
+    "prefix": "imrcp",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemo": {
+    "key": "importReactWithMemo",
+    "prefix": "imrm",
+    "body": ["import React, { memo } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemoAndPropTypes": {
+    "key": "importReactWithMemoAndPropTypes",
+    "prefix": "imrmp",
+    "body": [
+      "import React, { memo } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponent": {
+    "key": "importReactWithPureComponent",
+    "prefix": "imrpc",
+    "body": ["import React, { PureComponent } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponentAndPropTypes": {
+    "key": "importReactWithPureComponentAndPropTypes",
+    "prefix": "imrpcp",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterLink": {
+    "key": "importRouterLink",
+    "prefix": "imbrl",
+    "body": ["import { Link } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterNavLink": {
+    "key": "importRouterNavLink",
+    "prefix": "imbrnl",
+    "body": ["import { NavLink } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSetup": {
+    "key": "importRouterSetup",
+    "prefix": "imbrc",
+    "body": ["import { Route, Switch, NavLink, Link } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSwitch": {
+    "key": "importRouterSwitch",
+    "prefix": "imbrs",
+    "body": ["import { Switch } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "import": {
+    "key": "import",
+    "prefix": "imp",
+    "body": ["import ${2:second} from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArray": {
+    "key": "propTypeArray",
+    "prefix": "pta",
+    "body": ["PropTypes.array"],
+    "description": "Array prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayRequired": {
+    "key": "propTypeArrayRequired",
+    "prefix": "ptar",
+    "body": ["PropTypes.array.isRequired"],
+    "description": "Array prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBool": {
+    "key": "propTypeBool",
+    "prefix": "ptb",
+    "body": ["PropTypes.bool"],
+    "description": "Bool prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBoolRequired": {
+    "key": "propTypeBoolRequired",
+    "prefix": "ptbr",
+    "body": ["PropTypes.bool.isRequired"],
+    "description": "Bool prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFunc": {
+    "key": "propTypeFunc",
+    "prefix": "ptf",
+    "body": ["PropTypes.func"],
+    "description": "Func prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFuncRequired": {
+    "key": "propTypeFuncRequired",
+    "prefix": "ptfr",
+    "body": ["PropTypes.func.isRequired"],
+    "description": "Func prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumber": {
+    "key": "propTypeNumber",
+    "prefix": "ptn",
+    "body": ["PropTypes.number"],
+    "description": "Number prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumberRequired": {
+    "key": "propTypeNumberRequired",
+    "prefix": "ptnr",
+    "body": ["PropTypes.number.isRequired"],
+    "description": "Number prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObject": {
+    "key": "propTypeObject",
+    "prefix": "pto",
+    "body": ["PropTypes.object"],
+    "description": "Object prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectRequired": {
+    "key": "propTypeObjectRequired",
+    "prefix": "ptor",
+    "body": ["PropTypes.object.isRequired"],
+    "description": "Object prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeString": {
+    "key": "propTypeString",
+    "prefix": "pts",
+    "body": ["PropTypes.string"],
+    "description": "String prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeStringRequired": {
+    "key": "propTypeStringRequired",
+    "prefix": "ptsr",
+    "body": ["PropTypes.string.isRequired"],
+    "description": "String prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNode": {
+    "key": "propTypeNode",
+    "prefix": "ptnd",
+    "body": ["PropTypes.node"],
+    "description": "Anything that can be rendered: numbers, strings, elements or an array",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNodeRequired": {
+    "key": "propTypeNodeRequired",
+    "prefix": "ptndr",
+    "body": ["PropTypes.node.isRequired"],
+    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElement": {
+    "key": "propTypeElement",
+    "prefix": "ptel",
+    "body": ["PropTypes.element"],
+    "description": "React element prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElementRequired": {
+    "key": "propTypeElementRequired",
+    "prefix": "ptelr",
+    "body": ["PropTypes.element.isRequired"],
+    "description": "React element prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOf": {
+    "key": "propTypeInstanceOf",
+    "prefix": "pti",
+    "body": ["PropTypes.instanceOf($0)"],
+    "description": "Is an instance of a class prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOfRequired": {
+    "key": "propTypeInstanceOfRequired",
+    "prefix": "ptir",
+    "body": ["PropTypes.instanceOf($0).isRequired"],
+    "description": "Is an instance of a class prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnum": {
+    "key": "propTypeEnum",
+    "prefix": "pte",
+    "body": ["PropTypes.oneOf(['$0'])"],
+    "description": "Prop type limited to specific values by treating it as an enum",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnumRequired": {
+    "key": "propTypeEnumRequired",
+    "prefix": "pter",
+    "body": ["PropTypes.oneOf(['$0']).isRequired"],
+    "description": "Prop type limited to specific values by treating it as an enum required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfType": {
+    "key": "propTypeOneOfType",
+    "prefix": "ptet",
+    "body": ["PropTypes.oneOfType([", "  $0", "])"],
+    "description": "An object that could be one of many types",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfTypeRequired": {
+    "key": "propTypeOneOfTypeRequired",
+    "prefix": "ptetr",
+    "body": ["PropTypes.oneOfType([", "  $0", "]).isRequired"],
+    "description": "An object that could be one of many types required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOf": {
+    "key": "propTypeArrayOf",
+    "prefix": "ptao",
+    "body": ["PropTypes.arrayOf($0)"],
+    "description": "An array of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOfRequired": {
+    "key": "propTypeArrayOfRequired",
+    "prefix": "ptaor",
+    "body": ["PropTypes.arrayOf($0).isRequired"],
+    "description": "An array of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOf": {
+    "key": "propTypeObjectOf",
+    "prefix": "ptoo",
+    "body": ["PropTypes.objectOf($0)"],
+    "description": "An object with property values of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOfRequired": {
+    "key": "propTypeObjectOfRequired",
+    "prefix": "ptoor",
+    "body": ["PropTypes.objectOf($0).isRequired"],
+    "description": "An object with property values of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShape": {
+    "key": "propTypeShape",
+    "prefix": "ptsh",
+    "body": ["PropTypes.shape({", "  $0", "})"],
+    "description": "An object taking on a particular shape",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShapeRequired": {
+    "key": "propTypeShapeRequired",
+    "prefix": "ptshr",
+    "body": ["PropTypes.shape({", "  $0", "}).isRequired"],
+    "description": "An object taking on a particular shape required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExact": {
+    "key": "propTypeExact",
+    "prefix": "ptex",
+    "body": ["PropTypes.exact({", "  $0", "})"],
+    "description": "An object with warnings on extra properties",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExactRequired": {
+    "key": "propTypeExactRequired",
+    "prefix": "ptexr",
+    "body": ["PropTypes.exact({", "  $0", "}).isRequired"],
+    "description": "An object with warnings on extra properties required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeAny": {
+    "key": "propTypeAny",
+    "prefix": "ptany",
+    "body": ["PropTypes.any"],
+    "description": "Any prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponent": {
+    "key": "reactNativeComponent",
+    "prefix": "rnc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentExport": {
+    "key": "reactNativeComponentExport",
+    "prefix": "rnce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentWithStyles": {
+    "key": "reactNativeComponentWithStyles",
+    "prefix": "rncs",
+    "body": [
+      "import { Text, StyleSheet, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponent": {
+    "key": "reactNativeFunctionalComponent",
+    "prefix": "rnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponentWithStyles": {
+    "key": "reactNativeFunctionalComponentWithStyles",
+    "prefix": "rnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponent": {
+    "key": "reactNativeFunctionalExportComponent",
+    "prefix": "rnfe",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponentWithStyles": {
+    "key": "reactNativeFunctionalExportComponentWithStyles",
+    "prefix": "rnfes",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeImport": {
+    "key": "reactNativeImport",
+    "prefix": "imrn",
+    "body": ["import { ${1:first} } from 'react-native'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponent": {
+    "key": "reactNativePureComponent",
+    "prefix": "rnpc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponentExport": {
+    "key": "reactNativePureComponentExport",
+    "prefix": "rnpce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeStyles": {
+    "key": "reactNativeStyles",
+    "prefix": "rnstyle",
+    "body": ["const styles = StyleSheet.create({${1:first}})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReduxConnect": {
+    "key": "importReduxConnect",
+    "prefix": "redux",
+    "body": ["import { connect } from 'react-redux'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxAction": {
+    "key": "reduxAction",
+    "prefix": "rxaction",
+    "body": [
+      "export const ${1:first} = (payload) => ({",
+      "  type: ${2:second},",
+      "  payload",
+      "})",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxConst": {
+    "key": "reduxConst",
+    "prefix": "rxconst",
+    "body": ["export const ${1:first} = '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxReducer": {
+    "key": "reduxReducer",
+    "prefix": "rxreducer",
+    "body": [
+      "const initialState = {}",
+      "",
+      "export default (state = initialState, { type, payload }) => {",
+      "  switch (type) {",
+      "",
+      "  case ${1:first}:",
+      "    return { ...state, ...payload }",
+      "",
+      "  default:",
+      "    return state",
+      "  }",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSelector": {
+    "key": "reduxSelector",
+    "prefix": "rxselect",
+    "body": [
+      "import { createSelector } from 'reselect'",
+      "",
+      "export const ${1:first} = state => state.${2:second}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSlice": {
+    "key": "reduxSlice",
+    "prefix": "rxslice",
+    "body": [
+      "import { createSlice } from '@reduxjs/toolkit'",
+      "",
+      "const initialState = {",
+      "",
+      "}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
+      "  name: ${2:second},",
+      "  initialState,",
+      "  reducers: {}",
+      "});",
+      "",
+      "export const {} = ${1:${TM_FILENAME_BASE}}.actions",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}.reducer"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "mappingToProps": {
+    "key": "mappingToProps",
+    "prefix": "reduxmap",
+    "body": [
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "describeBlock": {
+    "key": "describeBlock",
+    "prefix": "desc",
+    "body": ["describe('${1:first}', () => { ${2:second} })"],
+    "description": "Testing `describe` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itAsyncBlock": {
+    "key": "itAsyncBlock",
+    "prefix": "tita",
+    "body": ["it('should ${1:first}', async () => { ${2:second} })"],
+    "description": "Testing asynchronous `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itBlock": {
+    "key": "itBlock",
+    "prefix": "tit",
+    "body": ["it('should ${1:first}', () => { ${2:second} })"],
+    "description": "Testing `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactComponentTestWithRedux": {
+    "key": "setupReactComponentTestWithRedux",
+    "prefix": "srtest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "     <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "description": "Create test component",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTest": {
+    "key": "setupReactNativeTest",
+    "prefix": "sntest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTestWithRedux": {
+    "key": "setupReactNativeTestWithRedux",
+    "prefix": "snrtest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactTest": {
+    "key": "setupReactTest",
+    "prefix": "stest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testAsyncBlock": {
+    "key": "testAsyncBlock",
+    "prefix": "testa",
+    "body": ["test('should ${1:first}', async () => { ${2:second} })"],
+    "description": "Testing `asynchronous test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testBlock": {
+    "key": "testBlock",
+    "prefix": "test",
+    "body": ["test('should ${1:first}', () => { ${2:second} })"],
+    "description": "Testing `test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefault": {
+    "key": "exportDefault",
+    "prefix": "exp",
+    "body": ["export default ${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDestructing": {
+    "key": "exportDestructing",
+    "prefix": "exd",
+    "body": ["export { ${2:second} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportAs": {
+    "key": "exportAs",
+    "prefix": "exa",
+    "body": ["export { ${2:second} as ${3:third} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportNamedFunction": {
+    "key": "exportNamedFunction",
+    "prefix": "enf",
+    "body": ["export const ${1:first} = (${2:second}) => {${3:third}}"],
+    "description": "Export named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultFunction": {
+    "key": "exportDefaultFunction",
+    "prefix": "edf",
+    "body": ["export default (${1:first}) => {${2:second}}"],
+    "description": "Export default function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultNamedFunction": {
+    "key": "exportDefaultNamedFunction",
+    "prefix": "ednf",
+    "body": ["export default function ${1:first}(${2:second}) {${3:third}}"],
+    "description": "Export default named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "method": {
+    "key": "method",
+    "prefix": "met",
+    "body": ["${1:first} = (${2:second}) => {${3:third}}"],
+    "description": "Creates a method inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertyGet": {
+    "key": "propertyGet",
+    "prefix": "pge",
+    "body": ["get ${1:first}() {", "  return this.${2:second}", "}"],
+    "description": "Creates a getter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertySet": {
+    "key": "propertySet",
+    "prefix": "pse",
+    "body": ["set ${1:first}(${2:second}) {${3:third}}"],
+    "description": "Creates a setter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forEach": {
+    "key": "forEach",
+    "prefix": "fre",
+    "body": ["${1:first}.forEach(${2:second} => {${3:third}})"],
+    "description": "Creates a forEach statement",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forOf": {
+    "key": "forOf",
+    "prefix": "fof",
+    "body": ["for(let ${1:first} of ${2:second}) {${3:third}}"],
+    "description": "Iterating over property names of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forIn": {
+    "key": "forIn",
+    "prefix": "fin",
+    "body": ["for(let ${1:first} in ${2:second}) {${3:third}}"],
+    "description": "Iterating over property values of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "anonymousFunction": {
+    "key": "anonymousFunction",
+    "prefix": "anfn",
+    "body": ["(${1:first}) => { ${2:second} }"],
+    "description": "Creates an anonymous function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "namedFunction": {
+    "key": "namedFunction",
+    "prefix": "nfn",
+    "body": ["const ${1:first} = (${2:second}) => { ${3:third} }"],
+    "description": "Creates a named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingObject": {
+    "key": "destructingObject",
+    "prefix": "dob",
+    "body": ["const {${2:second}} = ${1:first}"],
+    "description": "Creates and assigns a local variable using object destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingArray": {
+    "key": "destructingArray",
+    "prefix": "dar",
+    "body": ["const [${2:second}] = ${1:first}"],
+    "description": "Creates and assigns a local variable using array destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setInterval": {
+    "key": "setInterval",
+    "prefix": "sti",
+    "body": ["setInterval(() => { ${1:first} }, ${2:second})"],
+    "description": "Executes the given function at specified intervals",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setTimeOut": {
+    "key": "setTimeOut",
+    "prefix": "sto",
+    "body": ["setTimeout(() => { ${1:first} }, ${2:second})"],
+    "description": "Executes the given function after the specified delay",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "promise": {
+    "key": "promise",
+    "prefix": "prom",
+    "body": ["return new Promise((resolve, reject) => { ${1:first} })"],
+    "description": "Creates and returns a new Promise in the standard ES7 syntax",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructProps": {
+    "key": "destructProps",
+    "prefix": "cp",
+    "body": ["const { ${1:first} } = this.props"],
+    "description": "Creates and assigns a local variable using props destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructState": {
+    "key": "destructState",
+    "prefix": "cs",
+    "body": ["const { ${1:first} } = this.state"],
+    "description": "Creates and assigns a local variable using state destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "classConstructor": {
+    "key": "classConstructor",
+    "prefix": "rconst",
+    "body": [
+      "constructor(props) {",
+      "  super(props)",
+      "",
+      "  this.state = {",
+      "     ${1:first}",
+      "  }",
+      "}"
+    ],
+    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "emptyState": {
+    "key": "emptyState",
+    "prefix": "est",
+    "body": ["state = { ${1:first} }"],
+    "description": "Creates empty state object. To be used in a constructor.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidMount": {
+    "key": "componentDidMount",
+    "prefix": "cdm",
+    "body": ["componentDidMount() { ${1:first} }"],
+    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "shouldComponentUpdate": {
+    "key": "shouldComponentUpdate",
+    "prefix": "scu",
+    "body": ["shouldComponentUpdate(nextProps, nextState) { ${1:first} }"],
+    "description": "Invoked before rendering when new props or state are being received. ",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidUpdate": {
+    "key": "componentDidUpdate",
+    "prefix": "cdup",
+    "body": ["componentDidUpdate(prevProps, prevState) { ${1:first}} "],
+    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentWillUnmount": {
+    "key": "componentWillUnmount",
+    "prefix": "cwun",
+    "body": ["componentWillUnmount() {${1:first} }"],
+    "description": "Invoked immediately before a component is unmounted from the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getDerivedStateFromProps": {
+    "key": "getDerivedStateFromProps",
+    "prefix": "gdsfp",
+    "body": ["static getDerivedStateFromProps(props, state) {${1:first}}"],
+    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getSnapshotBeforeUpdate": {
+    "key": "getSnapshotBeforeUpdate",
+    "prefix": "gsbu",
+    "body": [
+      "getSnapshotBeforeUpdate = (prevProps, prevState) => {${1:first}}"
+    ],
+    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createContext": {
+    "key": "createContext",
+    "prefix": "rcontext",
+    "body": ["const ${1:first} = React.createContext()"],
+    "description": "Create React context",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createRef": {
+    "key": "createRef",
+    "prefix": "cref",
+    "body": ["this.${1:first}Ref = React.createRef()"],
+    "description": "Create ref statement used inside constructor",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateObject": {
+    "key": "componentSetStateObject",
+    "prefix": "sst",
+    "body": ["this.setState({${1:first}})"],
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateFunc": {
+    "key": "componentSetStateFunc",
+    "prefix": "ssf",
+    "body": ["this.setState((state, props) => { return { ${1:first} }})"],
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentProps": {
+    "key": "componentProps",
+    "prefix": "props",
+    "body": ["this.props.${1:first}"],
+    "description": "Access component's props",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentState": {
+    "key": "componentState",
+    "prefix": "state",
+    "body": ["this.state.${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "bindThis": {
+    "key": "bindThis",
+    "prefix": "bnd",
+    "body": ["this.${1:first} = this.${1:first}.bind(this)"],
+    "description": "Binds this to a method",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "commentBigBlock": {
+    "key": "commentBigBlock",
+    "prefix": "cmmb",
+    "body": ["/**", " * ${1:first}", " */"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponentWithRedux": {
+    "key": "hocComponentWithRedux",
+    "prefix": "hocredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export const mapStateToProps = state => ({})",
+      "",
+      "export const mapDispatchToProps = {}",
+      "",
+      "export const ${1:first} = (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      "",
+      "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent))",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponent": {
+    "key": "hocComponent",
+    "prefix": "hoc",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export default (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typeofSnippet": {
+    "key": "typeofSnippet",
+    "prefix": "tpf",
+    "body": ["typeof ${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  }
+}

From 0c5b0e47c5b1ccb5def1bfcbdebb5ebefe84004d Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Wed, 9 Feb 2022 00:23:19 +0100
Subject: [PATCH 12/18] 4.3.1

---
 package.json                |    2 +-
 src/snippets/generated.json | 1901 +----------------------------------
 2 files changed, 2 insertions(+), 1901 deletions(-)

diff --git a/package.json b/package.json
index 35d408b..676c144 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.3.0",
+  "version": "4.3.1",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
index 8ffd24a..0967ef4 100644
--- a/src/snippets/generated.json
+++ b/src/snippets/generated.json
@@ -1,1900 +1 @@
-{
-  "exportType": {
-    "body": ["export type ${1:first} = {${2:second}}"],
-    "key": "exportType",
-    "prefix": "exptp",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportInterface": {
-    "key": "exportInterface",
-    "prefix": "expint",
-    "body": ["export interface ${1:first} {${2:second}}"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponent": {
-    "key": "typescriptReactClassComponent",
-    "prefix": "tsrcc",
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportComponent": {
-    "key": "typescriptReactClassExportComponent",
-    "prefix": "tsrce",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalExportComponent": {
-    "key": "typescriptReactFunctionalExportComponent",
-    "prefix": "tsrfce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactFunctionalComponent": {
-    "key": "typescriptReactFunctionalComponent",
-    "prefix": "tsrfc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionExportComponent": {
-    "key": "typescriptReactArrowFunctionExportComponent",
-    "prefix": "tsrafce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactArrowFunctionComponent": {
-    "key": "typescriptReactArrowFunctionComponent",
-    "prefix": "tsrafc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassPureComponent": {
-    "key": "typescriptReactClassPureComponent",
-    "prefix": "tsrpc",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassExportPureComponent": {
-    "key": "typescriptReactClassExportPureComponent",
-    "prefix": "tsrpce",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactClassComponentRedux": {
-    "key": "typescriptReactClassComponentRedux",
-    "prefix": "tsrcredux",
-    "body": [
-      "import { connect } from 'react-redux'",
-      "import React, { Component } from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "type State = {}",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
-      "  state = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponent": {
-    "key": "typescriptReactNativeArrowFunctionComponent",
-    "prefix": "tsrnf",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system in TypeScript",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typescriptReactNativeArrowFunctionComponentWithStyles": {
-    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
-    "prefix": "tsrnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "type Props = {}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponent": {
-    "key": "reactArrowFunctionComponent",
-    "prefix": "rafc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionComponentWithPropTypes": {
-    "key": "reactArrowFunctionComponentWithPropTypes",
-    "prefix": "rafcp",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = props => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactArrowFunctionExportComponent": {
-    "key": "reactArrowFunctionExportComponent",
-    "prefix": "rafce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Arrow Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponent": {
-    "key": "reactClassComponent",
-    "prefix": "rcc",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentPropTypes": {
-    "key": "reactClassComponentPropTypes",
-    "prefix": "rccp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {${2:second}: ${3:third}}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with PropTypes and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentRedux": {
-    "key": "reactClassComponentRedux",
-    "prefix": "rcredux",
-    "body": [
-      "import React, { Component } from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassComponentReduxPropTypes": {
-    "key": "reactClassComponentReduxPropTypes",
-    "prefix": "rcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {",
-      "    ${2:second}: ${3:third}",
-      "  }",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponent": {
-    "key": "reactClassExportComponent",
-    "prefix": "rce",
-    "body": [
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportComponentWithPropTypes": {
-    "key": "reactClassExportComponentWithPropTypes",
-    "prefix": "rcep",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  static propTypes = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassExportPureComponent": {
-    "key": "reactClassExportPureComponent",
-    "prefix": "rpce",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React pure component class with ES7 module system export",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponent": {
-    "key": "reactClassPureComponent",
-    "prefix": "rpc",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React pure component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactClassPureComponentWithPropTypes": {
-    "key": "reactClassPureComponentWithPropTypes",
-    "prefix": "rpcp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  static propTypes = {}",
-      "",
-      "  render() {",
-      "    return (",
-      "      <div>${1:first}</div>",
-      "    )",
-      "  }",
-      "}",
-      ""
-    ],
-    "description": "Creates a React component class with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponent": {
-    "key": "reactFunctionMemoComponent",
-    "prefix": "rmc",
-    "body": [
-      "import React, { memo } from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = memo(() => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "})",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionMemoComponentWithPropTypes": {
-    "key": "reactFunctionMemoComponentWithPropTypes",
-    "prefix": "rmcp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React, { memo } from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = memo((props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "})",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponent": {
-    "key": "reactFunctionalComponent",
-    "prefix": "rfc",
-    "body": [
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentRedux": {
-    "key": "reactFunctionalComponentRedux",
-    "prefix": "rfcredux",
-    "body": [
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "Creates a React functional component with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentReduxPropTypes": {
-    "key": "reactFunctionalComponentReduxPropTypes",
-    "prefix": "rfcreduxp",
-    "body": [
-      "import PropTypes from 'prop-types'",
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "",
-      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {",
-      "  ${2:second}: PropTypes.${3:third}",
-      "}",
-      "",
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}",
-      "",
-      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
-    ],
-    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalComponentWithPropTypes": {
-    "key": "reactFunctionalComponentWithPropTypes",
-    "prefix": "rfcp",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}(props) {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      ""
-    ],
-    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactFunctionalExportComponent": {
-    "key": "reactFunctionalExportComponent",
-    "prefix": "rfce",
-    "body": [
-      "import React from 'react'",
-      "",
-      "function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <div>${1:first}</div>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "description": "Creates a React Functional Component with ES7 module system",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleAssert": {
-    "key": "consoleAssert",
-    "prefix": "cas",
-    "body": ["console.assert(${1:first}, ${2:second})"],
-    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleClear": {
-    "key": "consoleClear",
-    "prefix": "ccl",
-    "body": ["console.clear()"],
-    "description": "Clears the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleCount": {
-    "key": "consoleCount",
-    "prefix": "cco",
-    "body": ["console.count(${1:first})"],
-    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleDir": {
-    "key": "consoleDir",
-    "prefix": "cdi",
-    "body": ["console.dir(${1:first})"],
-    "description": "Prints a JavaScript representation of the specified object",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleError": {
-    "key": "consoleError",
-    "prefix": "cer",
-    "body": ["console.error(${1:first})"],
-    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroup": {
-    "key": "consoleGroup",
-    "prefix": "cgr",
-    "body": ["console.group('${1:first}')"],
-    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleGroupEnd": {
-    "key": "consoleGroupEnd",
-    "prefix": "cge",
-    "body": ["console.groupEnd()"],
-    "description": "Closes out the corresponding console.group().",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLog": {
-    "key": "consoleLog",
-    "prefix": "clg",
-    "body": ["console.log(${1:first})"],
-    "description": "Displays a message in the console",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTrace": {
-    "key": "consoleTrace",
-    "prefix": "ctr",
-    "body": ["console.trace(${1:first})"],
-    "description": "Prints a stack trace from the point where the method was called",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogObject": {
-    "key": "consoleLogObject",
-    "prefix": "clo",
-    "body": ["console.log('${1:first}', ${1:first})"],
-    "description": "Logs property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleLogJson": {
-    "key": "consoleLogJson",
-    "prefix": "clj",
-    "body": ["console.log('${1:first}', JSON.stringify(${1:first}, null, 2))"],
-    "description": "Logs stringified JSON property with name.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTime": {
-    "key": "consoleTime",
-    "prefix": "ctm",
-    "body": ["console.time('${1:first}')"],
-    "description": "Console time wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleTimeEnd": {
-    "key": "consoleTimeEnd",
-    "prefix": "cte",
-    "body": ["console.timeEnd('${1:first}')"],
-    "description": "Console time end wrapper",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleWarn": {
-    "key": "consoleWarn",
-    "prefix": "cwa",
-    "body": ["console.warn(${1:first})"],
-    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "consoleInfo": {
-    "key": "consoleInfo",
-    "prefix": "cin",
-    "body": ["console.info(${1:first})"],
-    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useCallback": {
-    "key": "useCallback",
-    "prefix": "useCallbackSnippet",
-    "body": [
-      "useCallback(",
-      "  () => {",
-      "    ${1:first}",
-      "  },",
-      "  [${2:second}],",
-      ")",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useContext": {
-    "key": "useContext",
-    "prefix": "useContextSnippet",
-    "body": ["const ${1:first} = useContext(${2:second})"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useEffect": {
-    "key": "useEffect",
-    "prefix": "useEffectSnippet",
-    "body": [
-      "useEffect(() => {",
-      "  ${1:first}",
-      "",
-      "  return () => {",
-      "    ${2:second}",
-      "  }",
-      "}, [${3:third}])",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useImperativeHandle": {
-    "key": "useImperativeHandle",
-    "prefix": "useImperativeHandleSnippet",
-    "body": [
-      "useImperativeHandle(",
-      "  ${1:first},",
-      "  () => {",
-      "    ${2:second}",
-      "  },",
-      "  [${3:third}],",
-      ")"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useLayoutEffect": {
-    "key": "useLayoutEffect",
-    "prefix": "useLayoutEffectSnippet",
-    "body": [
-      "useLayoutEffect(() => {",
-      "  ${1:first}",
-      "",
-      "  return () => {",
-      "    ${2:second}",
-      "  };",
-      "}, [${3:third}])"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useMemo": {
-    "key": "useMemo",
-    "prefix": "useMemoSnippet",
-    "body": ["useMemo(() => ${1:first}, [${2:second}])"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useReducer": {
-    "key": "useReducer",
-    "prefix": "useReducerSnippet",
-    "body": [
-      "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useRef": {
-    "key": "useRef",
-    "prefix": "useRefSnippet",
-    "body": ["const ${1:first} = useRef(${2:second})"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "useState": {
-    "key": "useState",
-    "prefix": "useStateSnippet",
-    "body": [
-      "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importAs": {
-    "key": "importAs",
-    "prefix": "ima",
-    "body": ["import { ${2:second} as ${3:third} } from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouter": {
-    "key": "importBrowserRouter",
-    "prefix": "imbr",
-    "body": ["import { BrowserRouter as Router } from 'react-router-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importBrowserRouterWithRouteAndNavLink": {
-    "key": "importBrowserRouterWithRouteAndNavLink",
-    "prefix": "imrr",
-    "body": [
-      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importDestructing": {
-    "key": "importDestructing",
-    "prefix": "imd",
-    "body": ["import { ${2:second} } from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importEverything": {
-    "key": "importEverything",
-    "prefix": "ime",
-    "body": ["import * as ${2:second} from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importNoModuleName": {
-    "key": "importNoModuleName",
-    "prefix": "imn",
-    "body": ["import '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importPropTypes": {
-    "key": "importPropTypes",
-    "prefix": "impt",
-    "body": ["import PropTypes from 'prop-types'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReact": {
-    "key": "importReact",
-    "prefix": "imr",
-    "body": ["import React from 'react'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactDom": {
-    "key": "importReactDom",
-    "prefix": "imrd",
-    "body": ["import ReactDOM from 'react-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponent": {
-    "key": "importReactWithComponent",
-    "prefix": "imrc",
-    "body": ["import React, { Component } from 'react'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithComponentAndPropTypes": {
-    "key": "importReactWithComponentAndPropTypes",
-    "prefix": "imrcp",
-    "body": [
-      "import React, { Component } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemo": {
-    "key": "importReactWithMemo",
-    "prefix": "imrm",
-    "body": ["import React, { memo } from 'react'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithMemoAndPropTypes": {
-    "key": "importReactWithMemoAndPropTypes",
-    "prefix": "imrmp",
-    "body": [
-      "import React, { memo } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponent": {
-    "key": "importReactWithPureComponent",
-    "prefix": "imrpc",
-    "body": ["import React, { PureComponent } from 'react'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReactWithPureComponentAndPropTypes": {
-    "key": "importReactWithPureComponentAndPropTypes",
-    "prefix": "imrpcp",
-    "body": [
-      "import React, { PureComponent } from 'react'",
-      "import PropTypes from 'prop-types'",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterLink": {
-    "key": "importRouterLink",
-    "prefix": "imbrl",
-    "body": ["import { Link } from 'react-router-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterNavLink": {
-    "key": "importRouterNavLink",
-    "prefix": "imbrnl",
-    "body": ["import { NavLink } from 'react-router-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSetup": {
-    "key": "importRouterSetup",
-    "prefix": "imbrc",
-    "body": ["import { Route, Switch, NavLink, Link } from 'react-router-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importRouterSwitch": {
-    "key": "importRouterSwitch",
-    "prefix": "imbrs",
-    "body": ["import { Switch } from 'react-router-dom'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "import": {
-    "key": "import",
-    "prefix": "imp",
-    "body": ["import ${2:second} from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArray": {
-    "key": "propTypeArray",
-    "prefix": "pta",
-    "body": ["PropTypes.array"],
-    "description": "Array prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayRequired": {
-    "key": "propTypeArrayRequired",
-    "prefix": "ptar",
-    "body": ["PropTypes.array.isRequired"],
-    "description": "Array prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBool": {
-    "key": "propTypeBool",
-    "prefix": "ptb",
-    "body": ["PropTypes.bool"],
-    "description": "Bool prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeBoolRequired": {
-    "key": "propTypeBoolRequired",
-    "prefix": "ptbr",
-    "body": ["PropTypes.bool.isRequired"],
-    "description": "Bool prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFunc": {
-    "key": "propTypeFunc",
-    "prefix": "ptf",
-    "body": ["PropTypes.func"],
-    "description": "Func prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeFuncRequired": {
-    "key": "propTypeFuncRequired",
-    "prefix": "ptfr",
-    "body": ["PropTypes.func.isRequired"],
-    "description": "Func prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumber": {
-    "key": "propTypeNumber",
-    "prefix": "ptn",
-    "body": ["PropTypes.number"],
-    "description": "Number prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNumberRequired": {
-    "key": "propTypeNumberRequired",
-    "prefix": "ptnr",
-    "body": ["PropTypes.number.isRequired"],
-    "description": "Number prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObject": {
-    "key": "propTypeObject",
-    "prefix": "pto",
-    "body": ["PropTypes.object"],
-    "description": "Object prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectRequired": {
-    "key": "propTypeObjectRequired",
-    "prefix": "ptor",
-    "body": ["PropTypes.object.isRequired"],
-    "description": "Object prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeString": {
-    "key": "propTypeString",
-    "prefix": "pts",
-    "body": ["PropTypes.string"],
-    "description": "String prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeStringRequired": {
-    "key": "propTypeStringRequired",
-    "prefix": "ptsr",
-    "body": ["PropTypes.string.isRequired"],
-    "description": "String prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNode": {
-    "key": "propTypeNode",
-    "prefix": "ptnd",
-    "body": ["PropTypes.node"],
-    "description": "Anything that can be rendered: numbers, strings, elements or an array",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeNodeRequired": {
-    "key": "propTypeNodeRequired",
-    "prefix": "ptndr",
-    "body": ["PropTypes.node.isRequired"],
-    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElement": {
-    "key": "propTypeElement",
-    "prefix": "ptel",
-    "body": ["PropTypes.element"],
-    "description": "React element prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeElementRequired": {
-    "key": "propTypeElementRequired",
-    "prefix": "ptelr",
-    "body": ["PropTypes.element.isRequired"],
-    "description": "React element prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOf": {
-    "key": "propTypeInstanceOf",
-    "prefix": "pti",
-    "body": ["PropTypes.instanceOf($0)"],
-    "description": "Is an instance of a class prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeInstanceOfRequired": {
-    "key": "propTypeInstanceOfRequired",
-    "prefix": "ptir",
-    "body": ["PropTypes.instanceOf($0).isRequired"],
-    "description": "Is an instance of a class prop type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnum": {
-    "key": "propTypeEnum",
-    "prefix": "pte",
-    "body": ["PropTypes.oneOf(['$0'])"],
-    "description": "Prop type limited to specific values by treating it as an enum",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeEnumRequired": {
-    "key": "propTypeEnumRequired",
-    "prefix": "pter",
-    "body": ["PropTypes.oneOf(['$0']).isRequired"],
-    "description": "Prop type limited to specific values by treating it as an enum required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfType": {
-    "key": "propTypeOneOfType",
-    "prefix": "ptet",
-    "body": ["PropTypes.oneOfType([", "  $0", "])"],
-    "description": "An object that could be one of many types",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeOneOfTypeRequired": {
-    "key": "propTypeOneOfTypeRequired",
-    "prefix": "ptetr",
-    "body": ["PropTypes.oneOfType([", "  $0", "]).isRequired"],
-    "description": "An object that could be one of many types required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOf": {
-    "key": "propTypeArrayOf",
-    "prefix": "ptao",
-    "body": ["PropTypes.arrayOf($0)"],
-    "description": "An array of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeArrayOfRequired": {
-    "key": "propTypeArrayOfRequired",
-    "prefix": "ptaor",
-    "body": ["PropTypes.arrayOf($0).isRequired"],
-    "description": "An array of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOf": {
-    "key": "propTypeObjectOf",
-    "prefix": "ptoo",
-    "body": ["PropTypes.objectOf($0)"],
-    "description": "An object with property values of a certain type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeObjectOfRequired": {
-    "key": "propTypeObjectOfRequired",
-    "prefix": "ptoor",
-    "body": ["PropTypes.objectOf($0).isRequired"],
-    "description": "An object with property values of a certain type required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShape": {
-    "key": "propTypeShape",
-    "prefix": "ptsh",
-    "body": ["PropTypes.shape({", "  $0", "})"],
-    "description": "An object taking on a particular shape",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeShapeRequired": {
-    "key": "propTypeShapeRequired",
-    "prefix": "ptshr",
-    "body": ["PropTypes.shape({", "  $0", "}).isRequired"],
-    "description": "An object taking on a particular shape required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExact": {
-    "key": "propTypeExact",
-    "prefix": "ptex",
-    "body": ["PropTypes.exact({", "  $0", "})"],
-    "description": "An object with warnings on extra properties",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeExactRequired": {
-    "key": "propTypeExactRequired",
-    "prefix": "ptexr",
-    "body": ["PropTypes.exact({", "  $0", "}).isRequired"],
-    "description": "An object with warnings on extra properties required",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propTypeAny": {
-    "key": "propTypeAny",
-    "prefix": "ptany",
-    "body": ["PropTypes.any"],
-    "description": "Any prop type",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponent": {
-    "key": "reactNativeComponent",
-    "prefix": "rnc",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentExport": {
-    "key": "reactNativeComponentExport",
-    "prefix": "rnce",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeComponentWithStyles": {
-    "key": "reactNativeComponentWithStyles",
-    "prefix": "rncs",
-    "body": [
-      "import { Text, StyleSheet, View } from 'react-native'",
-      "import React, { Component } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponent": {
-    "key": "reactNativeFunctionalComponent",
-    "prefix": "rnf",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalComponentWithStyles": {
-    "key": "reactNativeFunctionalComponentWithStyles",
-    "prefix": "rnfs",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "export default function ${1:${TM_FILENAME_BASE}}() {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponent": {
-    "key": "reactNativeFunctionalExportComponent",
-    "prefix": "rnfe",
-    "body": [
-      "import { View, Text } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeFunctionalExportComponentWithStyles": {
-    "key": "reactNativeFunctionalExportComponentWithStyles",
-    "prefix": "rnfes",
-    "body": [
-      "import { StyleSheet, Text, View } from 'react-native'",
-      "import React from 'react'",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = () => {",
-      "  return (",
-      "    <View>",
-      "      <Text>${1:first}</Text>",
-      "    </View>",
-      "  )",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}",
-      "",
-      "const styles = StyleSheet.create({})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeImport": {
-    "key": "reactNativeImport",
-    "prefix": "imrn",
-    "body": ["import { ${1:first} } from 'react-native'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponent": {
-    "key": "reactNativePureComponent",
-    "prefix": "rnpc",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativePureComponentExport": {
-    "key": "reactNativePureComponentExport",
-    "prefix": "rnpce",
-    "body": [
-      "import { Text, View } from 'react-native'",
-      "import React, { PureComponent } from 'react'",
-      "",
-      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
-      "  render() {",
-      "    return (",
-      "      <View>",
-      "        <Text>${1:first}</Text>",
-      "      </View>",
-      "    )",
-      "  }",
-      "}",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reactNativeStyles": {
-    "key": "reactNativeStyles",
-    "prefix": "rnstyle",
-    "body": ["const styles = StyleSheet.create({${1:first}})"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "importReduxConnect": {
-    "key": "importReduxConnect",
-    "prefix": "redux",
-    "body": ["import { connect } from 'react-redux'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxAction": {
-    "key": "reduxAction",
-    "prefix": "rxaction",
-    "body": [
-      "export const ${1:first} = (payload) => ({",
-      "  type: ${2:second},",
-      "  payload",
-      "})",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxConst": {
-    "key": "reduxConst",
-    "prefix": "rxconst",
-    "body": ["export const ${1:first} = '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxReducer": {
-    "key": "reduxReducer",
-    "prefix": "rxreducer",
-    "body": [
-      "const initialState = {}",
-      "",
-      "export default (state = initialState, { type, payload }) => {",
-      "  switch (type) {",
-      "",
-      "  case ${1:first}:",
-      "    return { ...state, ...payload }",
-      "",
-      "  default:",
-      "    return state",
-      "  }",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSelector": {
-    "key": "reduxSelector",
-    "prefix": "rxselect",
-    "body": [
-      "import { createSelector } from 'reselect'",
-      "",
-      "export const ${1:first} = state => state.${2:second}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "reduxSlice": {
-    "key": "reduxSlice",
-    "prefix": "rxslice",
-    "body": [
-      "import { createSlice } from '@reduxjs/toolkit'",
-      "",
-      "const initialState = {",
-      "",
-      "}",
-      "",
-      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
-      "  name: ${2:second},",
-      "  initialState,",
-      "  reducers: {}",
-      "});",
-      "",
-      "export const {} = ${1:${TM_FILENAME_BASE}}.actions",
-      "",
-      "export default ${1:${TM_FILENAME_BASE}}.reducer"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "mappingToProps": {
-    "key": "mappingToProps",
-    "prefix": "reduxmap",
-    "body": [
-      "const mapStateToProps = (state) => ({})",
-      "",
-      "const mapDispatchToProps = {}"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "describeBlock": {
-    "key": "describeBlock",
-    "prefix": "desc",
-    "body": ["describe('${1:first}', () => { ${2:second} })"],
-    "description": "Testing `describe` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itAsyncBlock": {
-    "key": "itAsyncBlock",
-    "prefix": "tita",
-    "body": ["it('should ${1:first}', async () => { ${2:second} })"],
-    "description": "Testing asynchronous `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "itBlock": {
-    "key": "itBlock",
-    "prefix": "tit",
-    "body": ["it('should ${1:first}', () => { ${2:second} })"],
-    "description": "Testing `it` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactComponentTestWithRedux": {
-    "key": "setupReactComponentTestWithRedux",
-    "prefix": "srtest",
-    "body": [
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "import { Provider } from 'react-redux'",
-      "",
-      "import store from '~/store'",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "     <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>,",
-      "  )",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "description": "Create test component",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTest": {
-    "key": "setupReactNativeTest",
-    "prefix": "sntest",
-    "body": [
-      "import 'react-native'",
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactNativeTestWithRedux": {
-    "key": "setupReactNativeTestWithRedux",
-    "prefix": "snrtest",
-    "body": [
-      "import 'react-native'",
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "import { Provider } from 'react-redux'",
-      "",
-      "import store from '~/store'",
-      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(",
-      "    <Provider store={store}>",
-      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
-      "    </Provider>,",
-      "  )",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setupReactTest": {
-    "key": "setupReactTest",
-    "prefix": "stest",
-    "body": [
-      "import React from 'react'",
-      "import renderer from 'react-test-renderer'",
-      "",
-      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
-      "",
-      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
-      "  const defaultProps = {}",
-      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
-      "",
-      "  test('render', () => {",
-      "    expect(wrapper).toMatchSnapshot()",
-      "  })",
-      "})"
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testAsyncBlock": {
-    "key": "testAsyncBlock",
-    "prefix": "testa",
-    "body": ["test('should ${1:first}', async () => { ${2:second} })"],
-    "description": "Testing `asynchronous test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "testBlock": {
-    "key": "testBlock",
-    "prefix": "test",
-    "body": ["test('should ${1:first}', () => { ${2:second} })"],
-    "description": "Testing `test` block",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefault": {
-    "key": "exportDefault",
-    "prefix": "exp",
-    "body": ["export default ${1:first}"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDestructing": {
-    "key": "exportDestructing",
-    "prefix": "exd",
-    "body": ["export { ${2:second} } from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportAs": {
-    "key": "exportAs",
-    "prefix": "exa",
-    "body": ["export { ${2:second} as ${3:third} } from '${1:first}'"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportNamedFunction": {
-    "key": "exportNamedFunction",
-    "prefix": "enf",
-    "body": ["export const ${1:first} = (${2:second}) => {${3:third}}"],
-    "description": "Export named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultFunction": {
-    "key": "exportDefaultFunction",
-    "prefix": "edf",
-    "body": ["export default (${1:first}) => {${2:second}}"],
-    "description": "Export default function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "exportDefaultNamedFunction": {
-    "key": "exportDefaultNamedFunction",
-    "prefix": "ednf",
-    "body": ["export default function ${1:first}(${2:second}) {${3:third}}"],
-    "description": "Export default named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "method": {
-    "key": "method",
-    "prefix": "met",
-    "body": ["${1:first} = (${2:second}) => {${3:third}}"],
-    "description": "Creates a method inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertyGet": {
-    "key": "propertyGet",
-    "prefix": "pge",
-    "body": ["get ${1:first}() {", "  return this.${2:second}", "}"],
-    "description": "Creates a getter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "propertySet": {
-    "key": "propertySet",
-    "prefix": "pse",
-    "body": ["set ${1:first}(${2:second}) {${3:third}}"],
-    "description": "Creates a setter property inside a class",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forEach": {
-    "key": "forEach",
-    "prefix": "fre",
-    "body": ["${1:first}.forEach(${2:second} => {${3:third}})"],
-    "description": "Creates a forEach statement",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forOf": {
-    "key": "forOf",
-    "prefix": "fof",
-    "body": ["for(let ${1:first} of ${2:second}) {${3:third}}"],
-    "description": "Iterating over property names of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "forIn": {
-    "key": "forIn",
-    "prefix": "fin",
-    "body": ["for(let ${1:first} in ${2:second}) {${3:third}}"],
-    "description": "Iterating over property values of iterable objects",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "anonymousFunction": {
-    "key": "anonymousFunction",
-    "prefix": "anfn",
-    "body": ["(${1:first}) => { ${2:second} }"],
-    "description": "Creates an anonymous function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "namedFunction": {
-    "key": "namedFunction",
-    "prefix": "nfn",
-    "body": ["const ${1:first} = (${2:second}) => { ${3:third} }"],
-    "description": "Creates a named function",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingObject": {
-    "key": "destructingObject",
-    "prefix": "dob",
-    "body": ["const {${2:second}} = ${1:first}"],
-    "description": "Creates and assigns a local variable using object destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructingArray": {
-    "key": "destructingArray",
-    "prefix": "dar",
-    "body": ["const [${2:second}] = ${1:first}"],
-    "description": "Creates and assigns a local variable using array destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setInterval": {
-    "key": "setInterval",
-    "prefix": "sti",
-    "body": ["setInterval(() => { ${1:first} }, ${2:second})"],
-    "description": "Executes the given function at specified intervals",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "setTimeOut": {
-    "key": "setTimeOut",
-    "prefix": "sto",
-    "body": ["setTimeout(() => { ${1:first} }, ${2:second})"],
-    "description": "Executes the given function after the specified delay",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "promise": {
-    "key": "promise",
-    "prefix": "prom",
-    "body": ["return new Promise((resolve, reject) => { ${1:first} })"],
-    "description": "Creates and returns a new Promise in the standard ES7 syntax",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructProps": {
-    "key": "destructProps",
-    "prefix": "cp",
-    "body": ["const { ${1:first} } = this.props"],
-    "description": "Creates and assigns a local variable using props destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "destructState": {
-    "key": "destructState",
-    "prefix": "cs",
-    "body": ["const { ${1:first} } = this.state"],
-    "description": "Creates and assigns a local variable using state destructing",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "classConstructor": {
-    "key": "classConstructor",
-    "prefix": "rconst",
-    "body": [
-      "constructor(props) {",
-      "  super(props)",
-      "",
-      "  this.state = {",
-      "     ${1:first}",
-      "  }",
-      "}"
-    ],
-    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "emptyState": {
-    "key": "emptyState",
-    "prefix": "est",
-    "body": ["state = { ${1:first} }"],
-    "description": "Creates empty state object. To be used in a constructor.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidMount": {
-    "key": "componentDidMount",
-    "prefix": "cdm",
-    "body": ["componentDidMount() { ${1:first} }"],
-    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "shouldComponentUpdate": {
-    "key": "shouldComponentUpdate",
-    "prefix": "scu",
-    "body": ["shouldComponentUpdate(nextProps, nextState) { ${1:first} }"],
-    "description": "Invoked before rendering when new props or state are being received. ",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentDidUpdate": {
-    "key": "componentDidUpdate",
-    "prefix": "cdup",
-    "body": ["componentDidUpdate(prevProps, prevState) { ${1:first}} "],
-    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentWillUnmount": {
-    "key": "componentWillUnmount",
-    "prefix": "cwun",
-    "body": ["componentWillUnmount() {${1:first} }"],
-    "description": "Invoked immediately before a component is unmounted from the DOM.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getDerivedStateFromProps": {
-    "key": "getDerivedStateFromProps",
-    "prefix": "gdsfp",
-    "body": ["static getDerivedStateFromProps(props, state) {${1:first}}"],
-    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "getSnapshotBeforeUpdate": {
-    "key": "getSnapshotBeforeUpdate",
-    "prefix": "gsbu",
-    "body": [
-      "getSnapshotBeforeUpdate = (prevProps, prevState) => {${1:first}}"
-    ],
-    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createContext": {
-    "key": "createContext",
-    "prefix": "rcontext",
-    "body": ["const ${1:first} = React.createContext()"],
-    "description": "Create React context",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "createRef": {
-    "key": "createRef",
-    "prefix": "cref",
-    "body": ["this.${1:first}Ref = React.createRef()"],
-    "description": "Create ref statement used inside constructor",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateObject": {
-    "key": "componentSetStateObject",
-    "prefix": "sst",
-    "body": ["this.setState({${1:first}})"],
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentSetStateFunc": {
-    "key": "componentSetStateFunc",
-    "prefix": "ssf",
-    "body": ["this.setState((state, props) => { return { ${1:first} }})"],
-    "description": "Performs a shallow merge of nextState into current state",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentProps": {
-    "key": "componentProps",
-    "prefix": "props",
-    "body": ["this.props.${1:first}"],
-    "description": "Access component's props",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "componentState": {
-    "key": "componentState",
-    "prefix": "state",
-    "body": ["this.state.${1:first}"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "bindThis": {
-    "key": "bindThis",
-    "prefix": "bnd",
-    "body": ["this.${1:first} = this.${1:first}.bind(this)"],
-    "description": "Binds this to a method",
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "commentBigBlock": {
-    "key": "commentBigBlock",
-    "prefix": "cmmb",
-    "body": ["/**", " * ${1:first}", " */"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponentWithRedux": {
-    "key": "hocComponentWithRedux",
-    "prefix": "hocredux",
-    "body": [
-      "import React from 'react'",
-      "import { connect } from 'react-redux'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "export const mapStateToProps = state => ({})",
-      "",
-      "export const mapDispatchToProps = {}",
-      "",
-      "export const ${1:first} = (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
-      "",
-      "  hocComponent.propTypes = {}",
-      "",
-      "  return hocComponent",
-      "}",
-      "",
-      "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent))",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "hocComponent": {
-    "key": "hocComponent",
-    "prefix": "hoc",
-    "body": [
-      "import React from 'react'",
-      "import PropTypes from 'prop-types'",
-      "",
-      "export default (WrappedComponent) => {",
-      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
-      "",
-      "  hocComponent.propTypes = {}",
-      "",
-      "  return hocComponent",
-      "}",
-      ""
-    ],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  },
-  "typeofSnippet": {
-    "key": "typeofSnippet",
-    "prefix": "tpf",
-    "body": ["typeof ${1:first}"],
-    "scope": "typescript,typescriptreact,javascript,javascriptreact"
-  }
-}
+{}

From 56b432560a79d526715a1b039b4d834dda3c4ffc Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Wed, 9 Feb 2022 23:12:29 +0100
Subject: [PATCH 13/18] feat: add console.table

---
 package.json                  | 2 +-
 src/sourceSnippets/console.ts | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 676c144..537543c 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.3.1",
+  "version": "4.3.2",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",
diff --git a/src/sourceSnippets/console.ts b/src/sourceSnippets/console.ts
index 30fc540..dec49de 100644
--- a/src/sourceSnippets/console.ts
+++ b/src/sourceSnippets/console.ts
@@ -16,6 +16,7 @@ type ConsoleMapping = {
   consoleTimeEnd: 'cte';
   consoleWarn: 'cwa';
   consoleInfo: 'cin';
+  consoleTable: 'ctl';
 };
 
 export type ConsoleSnippet = SnippetMapping<ConsoleMapping>;
@@ -134,6 +135,13 @@ const consoleInfo: ConsoleSnippet = {
     'Displays a message in the console but also displays a blue information icon along with the logged message',
 };
 
+const consoleTable: ConsoleSnippet = {
+  key: 'consoleTable',
+  prefix: 'ctl',
+  body: [`console.table([${Placeholders.FirstTab}])`],
+  description: 'Logs table to console',
+};
+
 export default [
   consoleAssert,
   consoleClear,
@@ -150,4 +158,5 @@ export default [
   consoleTimeEnd,
   consoleWarn,
   consoleInfo,
+  consoleTable,
 ];

From e6e5d3929a612b70928428eb6f3b29b2f07a16e5 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Thu, 17 Feb 2022 16:52:42 +0100
Subject: [PATCH 14/18] chore: start extension on load

---
 CHANGELOG.md | 4 ++++
 package.json | 3 ++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e616aa..fd31ceb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@ All info about changes
 
 # Released
 
+[4.4.0] - 2020-12-18
+
+- Enable extension after startup finish to respect and parse snippets on settings change
+
 [4.3.0] - 2020-12-18
 
 - BREAKING CHANGES:
diff --git a/package.json b/package.json
index 537543c..2974a51 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,8 @@
     "onLanguage:typescriptReact",
     "onLanguage:javascript",
     "onLanguage:javascriptReact",
-    "onCommand:reactSnippets.search"
+    "onCommand:reactSnippets.search",
+    "onStartupFinished"
   ],
   "contributes": {
     "commands": [

From a1df591fecaa7a19a2eff16002124fcc6df41e06 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Thu, 17 Feb 2022 16:53:39 +0100
Subject: [PATCH 15/18] 4.4.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 2974a51..c274be8 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.3.2",
+  "version": "4.4.0",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",

From 67d4fae2b6041f0c2e2035c123ce91f4a86f67a3 Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Fri, 18 Feb 2022 14:09:12 +0100
Subject: [PATCH 16/18] chore: load extension on start

---
 package.json                |    2 +-
 src/snippets/generated.json | 1908 ++++++++++++++++++++++++++++++++++-
 2 files changed, 1908 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index c274be8..2e6362f 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.4.0",
+  "version": "4.4.2",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",
diff --git a/src/snippets/generated.json b/src/snippets/generated.json
index 0967ef4..d73bea5 100644
--- a/src/snippets/generated.json
+++ b/src/snippets/generated.json
@@ -1 +1,1907 @@
-{}
+{
+  "exportType": {
+    "body": ["export type ${1:first} = {${2:second}}"],
+    "key": "exportType",
+    "prefix": "exptp",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportInterface": {
+    "key": "exportInterface",
+    "prefix": "expint",
+    "body": ["export interface ${1:first} {${2:second}}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponent": {
+    "key": "typescriptReactClassComponent",
+    "prefix": "tsrcc",
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportComponent": {
+    "key": "typescriptReactClassExportComponent",
+    "prefix": "tsrce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalExportComponent": {
+    "key": "typescriptReactFunctionalExportComponent",
+    "prefix": "tsrfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactFunctionalComponent": {
+    "key": "typescriptReactFunctionalComponent",
+    "prefix": "tsrfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}({}: Props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionExportComponent": {
+    "key": "typescriptReactArrowFunctionExportComponent",
+    "prefix": "tsrafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactArrowFunctionComponent": {
+    "key": "typescriptReactArrowFunctionComponent",
+    "prefix": "tsrafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassPureComponent": {
+    "key": "typescriptReactClassPureComponent",
+    "prefix": "tsrpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassExportPureComponent": {
+    "key": "typescriptReactClassExportPureComponent",
+    "prefix": "tsrpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "class ${1:${TM_FILENAME_BASE}} extends PureComponent<Props> {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system and TypeScript interface",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactClassComponentRedux": {
+    "key": "typescriptReactClassComponentRedux",
+    "prefix": "tsrcredux",
+    "body": [
+      "import { connect } from 'react-redux'",
+      "import React, { Component } from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "type State = {}",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component<Props, State> {",
+      "  state = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system and TypeScript interfaces",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponent": {
+    "key": "typescriptReactNativeArrowFunctionComponent",
+    "prefix": "tsrnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system in TypeScript",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typescriptReactNativeArrowFunctionComponentWithStyles": {
+    "key": "typescriptReactNativeArrowFunctionComponentWithStyles",
+    "prefix": "tsrnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "type Props = {}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = (props: Props) => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "description": "Creates a React Native Arrow Function Component with ES7 module system, TypeScript interface and StyleSheet",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponent": {
+    "key": "reactArrowFunctionComponent",
+    "prefix": "rafc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionComponentWithPropTypes": {
+    "key": "reactArrowFunctionComponentWithPropTypes",
+    "prefix": "rafcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = props => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactArrowFunctionExportComponent": {
+    "key": "reactArrowFunctionExportComponent",
+    "prefix": "rafce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Arrow Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponent": {
+    "key": "reactClassComponent",
+    "prefix": "rcc",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentPropTypes": {
+    "key": "reactClassComponentPropTypes",
+    "prefix": "rccp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {${2:second}: ${3:third}}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with PropTypes and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentRedux": {
+    "key": "reactClassComponentRedux",
+    "prefix": "rcredux",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassComponentReduxPropTypes": {
+    "key": "reactClassComponentReduxPropTypes",
+    "prefix": "rcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {",
+      "    ${2:second}: ${3:third}",
+      "  }",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React component class with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponent": {
+    "key": "reactClassExportComponent",
+    "prefix": "rce",
+    "body": [
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportComponentWithPropTypes": {
+    "key": "reactClassExportComponentWithPropTypes",
+    "prefix": "rcep",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassExportPureComponent": {
+    "key": "reactClassExportPureComponent",
+    "prefix": "rpce",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React pure component class with ES7 module system export",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponent": {
+    "key": "reactClassPureComponent",
+    "prefix": "rpc",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React pure component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactClassPureComponentWithPropTypes": {
+    "key": "reactClassPureComponentWithPropTypes",
+    "prefix": "rpcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  static propTypes = {}",
+      "",
+      "  render() {",
+      "    return (",
+      "      <div>${1:first}</div>",
+      "    )",
+      "  }",
+      "}",
+      ""
+    ],
+    "description": "Creates a React component class with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponent": {
+    "key": "reactFunctionMemoComponent",
+    "prefix": "rmc",
+    "body": [
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo(() => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionMemoComponentWithPropTypes": {
+    "key": "reactFunctionMemoComponentWithPropTypes",
+    "prefix": "rmcp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React, { memo } from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = memo((props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "})",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Memo Function Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponent": {
+    "key": "reactFunctionalComponent",
+    "prefix": "rfc",
+    "body": [
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentRedux": {
+    "key": "reactFunctionalComponentRedux",
+    "prefix": "rfcredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "Creates a React functional component with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentReduxPropTypes": {
+    "key": "reactFunctionalComponentReduxPropTypes",
+    "prefix": "rfcreduxp",
+    "body": [
+      "import PropTypes from 'prop-types'",
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "",
+      "export const ${1:${TM_FILENAME_BASE}} = (props) => {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {",
+      "  ${2:second}: PropTypes.${3:third}",
+      "}",
+      "",
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}",
+      "",
+      "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})"
+    ],
+    "description": "DEPRECATED: Creates a React functional component with PropTypes with connected redux and ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalComponentWithPropTypes": {
+    "key": "reactFunctionalComponentWithPropTypes",
+    "prefix": "rfcp",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}(props) {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "${1:${TM_FILENAME_BASE}}.propTypes = {}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      ""
+    ],
+    "description": "Creates a React Functional Component with ES7 module system with PropTypes",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactFunctionalExportComponent": {
+    "key": "reactFunctionalExportComponent",
+    "prefix": "rfce",
+    "body": [
+      "import React from 'react'",
+      "",
+      "function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <div>${1:first}</div>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "description": "Creates a React Functional Component with ES7 module system",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleAssert": {
+    "key": "consoleAssert",
+    "prefix": "cas",
+    "body": ["console.assert(${1:first}, ${2:second})"],
+    "description": "If the specified expression is false, the message is written to the console along with a stack trace",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleClear": {
+    "key": "consoleClear",
+    "prefix": "ccl",
+    "body": ["console.clear()"],
+    "description": "Clears the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleCount": {
+    "key": "consoleCount",
+    "prefix": "cco",
+    "body": ["console.count(${1:first})"],
+    "description": "Writes the the number of times that count() has been invoked at the same line and with the same label",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleDir": {
+    "key": "consoleDir",
+    "prefix": "cdi",
+    "body": ["console.dir(${1:first})"],
+    "description": "Prints a JavaScript representation of the specified object",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleError": {
+    "key": "consoleError",
+    "prefix": "cer",
+    "body": ["console.error(${1:first})"],
+    "description": "Displays a message in the console and also includes a stack trace from where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroup": {
+    "key": "consoleGroup",
+    "prefix": "cgr",
+    "body": ["console.group('${1:first}')"],
+    "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleGroupEnd": {
+    "key": "consoleGroupEnd",
+    "prefix": "cge",
+    "body": ["console.groupEnd()"],
+    "description": "Closes out the corresponding console.group().",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLog": {
+    "key": "consoleLog",
+    "prefix": "clg",
+    "body": ["console.log(${1:first})"],
+    "description": "Displays a message in the console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTrace": {
+    "key": "consoleTrace",
+    "prefix": "ctr",
+    "body": ["console.trace(${1:first})"],
+    "description": "Prints a stack trace from the point where the method was called",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogObject": {
+    "key": "consoleLogObject",
+    "prefix": "clo",
+    "body": ["console.log('${1:first}', ${1:first})"],
+    "description": "Logs property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleLogJson": {
+    "key": "consoleLogJson",
+    "prefix": "clj",
+    "body": ["console.log('${1:first}', JSON.stringify(${1:first}, null, 2))"],
+    "description": "Logs stringified JSON property with name.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTime": {
+    "key": "consoleTime",
+    "prefix": "ctm",
+    "body": ["console.time('${1:first}')"],
+    "description": "Console time wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTimeEnd": {
+    "key": "consoleTimeEnd",
+    "prefix": "cte",
+    "body": ["console.timeEnd('${1:first}')"],
+    "description": "Console time end wrapper",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleWarn": {
+    "key": "consoleWarn",
+    "prefix": "cwa",
+    "body": ["console.warn(${1:first})"],
+    "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleInfo": {
+    "key": "consoleInfo",
+    "prefix": "cin",
+    "body": ["console.info(${1:first})"],
+    "description": "Displays a message in the console but also displays a blue information icon along with the logged message",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "consoleTable": {
+    "key": "consoleTable",
+    "prefix": "ctl",
+    "body": ["console.table([${1:first}])"],
+    "description": "Logs table to console",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useCallback": {
+    "key": "useCallback",
+    "prefix": "useCallbackSnippet",
+    "body": [
+      "useCallback(",
+      "  () => {",
+      "    ${1:first}",
+      "  },",
+      "  [${2:second}],",
+      ")",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useContext": {
+    "key": "useContext",
+    "prefix": "useContextSnippet",
+    "body": ["const ${1:first} = useContext(${2:second})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useEffect": {
+    "key": "useEffect",
+    "prefix": "useEffectSnippet",
+    "body": [
+      "useEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  }",
+      "}, [${3:third}])",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useImperativeHandle": {
+    "key": "useImperativeHandle",
+    "prefix": "useImperativeHandleSnippet",
+    "body": [
+      "useImperativeHandle(",
+      "  ${1:first},",
+      "  () => {",
+      "    ${2:second}",
+      "  },",
+      "  [${3:third}],",
+      ")"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useLayoutEffect": {
+    "key": "useLayoutEffect",
+    "prefix": "useLayoutEffectSnippet",
+    "body": [
+      "useLayoutEffect(() => {",
+      "  ${1:first}",
+      "",
+      "  return () => {",
+      "    ${2:second}",
+      "  };",
+      "}, [${3:third}])"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useMemo": {
+    "key": "useMemo",
+    "prefix": "useMemoSnippet",
+    "body": ["useMemo(() => ${1:first}, [${2:second}])"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useReducer": {
+    "key": "useReducer",
+    "prefix": "useReducerSnippet",
+    "body": [
+      "const [state, dispatch] = useReducer(${1:first}, ${2:second}, ${3:third})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useRef": {
+    "key": "useRef",
+    "prefix": "useRefSnippet",
+    "body": ["const ${1:first} = useRef(${2:second})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "useState": {
+    "key": "useState",
+    "prefix": "useStateSnippet",
+    "body": [
+      "const [${1:first}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:second})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importAs": {
+    "key": "importAs",
+    "prefix": "ima",
+    "body": ["import { ${2:second} as ${3:third} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouter": {
+    "key": "importBrowserRouter",
+    "prefix": "imbr",
+    "body": ["import { BrowserRouter as Router } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importBrowserRouterWithRouteAndNavLink": {
+    "key": "importBrowserRouterWithRouteAndNavLink",
+    "prefix": "imrr",
+    "body": [
+      "import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importDestructing": {
+    "key": "importDestructing",
+    "prefix": "imd",
+    "body": ["import { ${2:second} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importEverything": {
+    "key": "importEverything",
+    "prefix": "ime",
+    "body": ["import * as ${2:second} from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importNoModuleName": {
+    "key": "importNoModuleName",
+    "prefix": "imn",
+    "body": ["import '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importPropTypes": {
+    "key": "importPropTypes",
+    "prefix": "impt",
+    "body": ["import PropTypes from 'prop-types'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReact": {
+    "key": "importReact",
+    "prefix": "imr",
+    "body": ["import React from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactDom": {
+    "key": "importReactDom",
+    "prefix": "imrd",
+    "body": ["import ReactDOM from 'react-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponent": {
+    "key": "importReactWithComponent",
+    "prefix": "imrc",
+    "body": ["import React, { Component } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithComponentAndPropTypes": {
+    "key": "importReactWithComponentAndPropTypes",
+    "prefix": "imrcp",
+    "body": [
+      "import React, { Component } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemo": {
+    "key": "importReactWithMemo",
+    "prefix": "imrm",
+    "body": ["import React, { memo } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithMemoAndPropTypes": {
+    "key": "importReactWithMemoAndPropTypes",
+    "prefix": "imrmp",
+    "body": [
+      "import React, { memo } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponent": {
+    "key": "importReactWithPureComponent",
+    "prefix": "imrpc",
+    "body": ["import React, { PureComponent } from 'react'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReactWithPureComponentAndPropTypes": {
+    "key": "importReactWithPureComponentAndPropTypes",
+    "prefix": "imrpcp",
+    "body": [
+      "import React, { PureComponent } from 'react'",
+      "import PropTypes from 'prop-types'",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterLink": {
+    "key": "importRouterLink",
+    "prefix": "imbrl",
+    "body": ["import { Link } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterNavLink": {
+    "key": "importRouterNavLink",
+    "prefix": "imbrnl",
+    "body": ["import { NavLink } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSetup": {
+    "key": "importRouterSetup",
+    "prefix": "imbrc",
+    "body": ["import { Route, Switch, NavLink, Link } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importRouterSwitch": {
+    "key": "importRouterSwitch",
+    "prefix": "imbrs",
+    "body": ["import { Switch } from 'react-router-dom'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "import": {
+    "key": "import",
+    "prefix": "imp",
+    "body": ["import ${2:second} from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArray": {
+    "key": "propTypeArray",
+    "prefix": "pta",
+    "body": ["PropTypes.array"],
+    "description": "Array prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayRequired": {
+    "key": "propTypeArrayRequired",
+    "prefix": "ptar",
+    "body": ["PropTypes.array.isRequired"],
+    "description": "Array prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBool": {
+    "key": "propTypeBool",
+    "prefix": "ptb",
+    "body": ["PropTypes.bool"],
+    "description": "Bool prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeBoolRequired": {
+    "key": "propTypeBoolRequired",
+    "prefix": "ptbr",
+    "body": ["PropTypes.bool.isRequired"],
+    "description": "Bool prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFunc": {
+    "key": "propTypeFunc",
+    "prefix": "ptf",
+    "body": ["PropTypes.func"],
+    "description": "Func prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeFuncRequired": {
+    "key": "propTypeFuncRequired",
+    "prefix": "ptfr",
+    "body": ["PropTypes.func.isRequired"],
+    "description": "Func prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumber": {
+    "key": "propTypeNumber",
+    "prefix": "ptn",
+    "body": ["PropTypes.number"],
+    "description": "Number prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNumberRequired": {
+    "key": "propTypeNumberRequired",
+    "prefix": "ptnr",
+    "body": ["PropTypes.number.isRequired"],
+    "description": "Number prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObject": {
+    "key": "propTypeObject",
+    "prefix": "pto",
+    "body": ["PropTypes.object"],
+    "description": "Object prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectRequired": {
+    "key": "propTypeObjectRequired",
+    "prefix": "ptor",
+    "body": ["PropTypes.object.isRequired"],
+    "description": "Object prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeString": {
+    "key": "propTypeString",
+    "prefix": "pts",
+    "body": ["PropTypes.string"],
+    "description": "String prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeStringRequired": {
+    "key": "propTypeStringRequired",
+    "prefix": "ptsr",
+    "body": ["PropTypes.string.isRequired"],
+    "description": "String prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNode": {
+    "key": "propTypeNode",
+    "prefix": "ptnd",
+    "body": ["PropTypes.node"],
+    "description": "Anything that can be rendered: numbers, strings, elements or an array",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeNodeRequired": {
+    "key": "propTypeNodeRequired",
+    "prefix": "ptndr",
+    "body": ["PropTypes.node.isRequired"],
+    "description": "Anything that can be rendered: numbers, strings, elements or an array required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElement": {
+    "key": "propTypeElement",
+    "prefix": "ptel",
+    "body": ["PropTypes.element"],
+    "description": "React element prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeElementRequired": {
+    "key": "propTypeElementRequired",
+    "prefix": "ptelr",
+    "body": ["PropTypes.element.isRequired"],
+    "description": "React element prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOf": {
+    "key": "propTypeInstanceOf",
+    "prefix": "pti",
+    "body": ["PropTypes.instanceOf($0)"],
+    "description": "Is an instance of a class prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeInstanceOfRequired": {
+    "key": "propTypeInstanceOfRequired",
+    "prefix": "ptir",
+    "body": ["PropTypes.instanceOf($0).isRequired"],
+    "description": "Is an instance of a class prop type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnum": {
+    "key": "propTypeEnum",
+    "prefix": "pte",
+    "body": ["PropTypes.oneOf(['$0'])"],
+    "description": "Prop type limited to specific values by treating it as an enum",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeEnumRequired": {
+    "key": "propTypeEnumRequired",
+    "prefix": "pter",
+    "body": ["PropTypes.oneOf(['$0']).isRequired"],
+    "description": "Prop type limited to specific values by treating it as an enum required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfType": {
+    "key": "propTypeOneOfType",
+    "prefix": "ptet",
+    "body": ["PropTypes.oneOfType([", "  $0", "])"],
+    "description": "An object that could be one of many types",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeOneOfTypeRequired": {
+    "key": "propTypeOneOfTypeRequired",
+    "prefix": "ptetr",
+    "body": ["PropTypes.oneOfType([", "  $0", "]).isRequired"],
+    "description": "An object that could be one of many types required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOf": {
+    "key": "propTypeArrayOf",
+    "prefix": "ptao",
+    "body": ["PropTypes.arrayOf($0)"],
+    "description": "An array of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeArrayOfRequired": {
+    "key": "propTypeArrayOfRequired",
+    "prefix": "ptaor",
+    "body": ["PropTypes.arrayOf($0).isRequired"],
+    "description": "An array of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOf": {
+    "key": "propTypeObjectOf",
+    "prefix": "ptoo",
+    "body": ["PropTypes.objectOf($0)"],
+    "description": "An object with property values of a certain type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeObjectOfRequired": {
+    "key": "propTypeObjectOfRequired",
+    "prefix": "ptoor",
+    "body": ["PropTypes.objectOf($0).isRequired"],
+    "description": "An object with property values of a certain type required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShape": {
+    "key": "propTypeShape",
+    "prefix": "ptsh",
+    "body": ["PropTypes.shape({", "  $0", "})"],
+    "description": "An object taking on a particular shape",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeShapeRequired": {
+    "key": "propTypeShapeRequired",
+    "prefix": "ptshr",
+    "body": ["PropTypes.shape({", "  $0", "}).isRequired"],
+    "description": "An object taking on a particular shape required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExact": {
+    "key": "propTypeExact",
+    "prefix": "ptex",
+    "body": ["PropTypes.exact({", "  $0", "})"],
+    "description": "An object with warnings on extra properties",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeExactRequired": {
+    "key": "propTypeExactRequired",
+    "prefix": "ptexr",
+    "body": ["PropTypes.exact({", "  $0", "}).isRequired"],
+    "description": "An object with warnings on extra properties required",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propTypeAny": {
+    "key": "propTypeAny",
+    "prefix": "ptany",
+    "body": ["PropTypes.any"],
+    "description": "Any prop type",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponent": {
+    "key": "reactNativeComponent",
+    "prefix": "rnc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentExport": {
+    "key": "reactNativeComponentExport",
+    "prefix": "rnce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeComponentWithStyles": {
+    "key": "reactNativeComponentWithStyles",
+    "prefix": "rncs",
+    "body": [
+      "import { Text, StyleSheet, View } from 'react-native'",
+      "import React, { Component } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponent": {
+    "key": "reactNativeFunctionalComponent",
+    "prefix": "rnf",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalComponentWithStyles": {
+    "key": "reactNativeFunctionalComponentWithStyles",
+    "prefix": "rnfs",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "export default function ${1:${TM_FILENAME_BASE}}() {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponent": {
+    "key": "reactNativeFunctionalExportComponent",
+    "prefix": "rnfe",
+    "body": [
+      "import { View, Text } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeFunctionalExportComponentWithStyles": {
+    "key": "reactNativeFunctionalExportComponentWithStyles",
+    "prefix": "rnfes",
+    "body": [
+      "import { StyleSheet, Text, View } from 'react-native'",
+      "import React from 'react'",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = () => {",
+      "  return (",
+      "    <View>",
+      "      <Text>${1:first}</Text>",
+      "    </View>",
+      "  )",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}",
+      "",
+      "const styles = StyleSheet.create({})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeImport": {
+    "key": "reactNativeImport",
+    "prefix": "imrn",
+    "body": ["import { ${1:first} } from 'react-native'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponent": {
+    "key": "reactNativePureComponent",
+    "prefix": "rnpc",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativePureComponentExport": {
+    "key": "reactNativePureComponentExport",
+    "prefix": "rnpce",
+    "body": [
+      "import { Text, View } from 'react-native'",
+      "import React, { PureComponent } from 'react'",
+      "",
+      "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
+      "  render() {",
+      "    return (",
+      "      <View>",
+      "        <Text>${1:first}</Text>",
+      "      </View>",
+      "    )",
+      "  }",
+      "}",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reactNativeStyles": {
+    "key": "reactNativeStyles",
+    "prefix": "rnstyle",
+    "body": ["const styles = StyleSheet.create({${1:first}})"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "importReduxConnect": {
+    "key": "importReduxConnect",
+    "prefix": "redux",
+    "body": ["import { connect } from 'react-redux'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxAction": {
+    "key": "reduxAction",
+    "prefix": "rxaction",
+    "body": [
+      "export const ${1:first} = (payload) => ({",
+      "  type: ${2:second},",
+      "  payload",
+      "})",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxConst": {
+    "key": "reduxConst",
+    "prefix": "rxconst",
+    "body": ["export const ${1:first} = '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxReducer": {
+    "key": "reduxReducer",
+    "prefix": "rxreducer",
+    "body": [
+      "const initialState = {}",
+      "",
+      "export default (state = initialState, { type, payload }) => {",
+      "  switch (type) {",
+      "",
+      "  case ${1:first}:",
+      "    return { ...state, ...payload }",
+      "",
+      "  default:",
+      "    return state",
+      "  }",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSelector": {
+    "key": "reduxSelector",
+    "prefix": "rxselect",
+    "body": [
+      "import { createSelector } from 'reselect'",
+      "",
+      "export const ${1:first} = state => state.${2:second}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "reduxSlice": {
+    "key": "reduxSlice",
+    "prefix": "rxslice",
+    "body": [
+      "import { createSlice } from '@reduxjs/toolkit'",
+      "",
+      "const initialState = {",
+      "",
+      "}",
+      "",
+      "const ${1:${TM_FILENAME_BASE}} = createSlice({",
+      "  name: ${2:second},",
+      "  initialState,",
+      "  reducers: {}",
+      "});",
+      "",
+      "export const {} = ${1:${TM_FILENAME_BASE}}.actions",
+      "",
+      "export default ${1:${TM_FILENAME_BASE}}.reducer"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "mappingToProps": {
+    "key": "mappingToProps",
+    "prefix": "reduxmap",
+    "body": [
+      "const mapStateToProps = (state) => ({})",
+      "",
+      "const mapDispatchToProps = {}"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "describeBlock": {
+    "key": "describeBlock",
+    "prefix": "desc",
+    "body": ["describe('${1:first}', () => { ${2:second} })"],
+    "description": "Testing `describe` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itAsyncBlock": {
+    "key": "itAsyncBlock",
+    "prefix": "tita",
+    "body": ["it('should ${1:first}', async () => { ${2:second} })"],
+    "description": "Testing asynchronous `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "itBlock": {
+    "key": "itBlock",
+    "prefix": "tit",
+    "body": ["it('should ${1:first}', () => { ${2:second} })"],
+    "description": "Testing `it` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactComponentTestWithRedux": {
+    "key": "setupReactComponentTestWithRedux",
+    "prefix": "srtest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "     <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "description": "Create test component",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTest": {
+    "key": "setupReactNativeTest",
+    "prefix": "sntest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactNativeTestWithRedux": {
+    "key": "setupReactNativeTestWithRedux",
+    "prefix": "snrtest",
+    "body": [
+      "import 'react-native'",
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "import { Provider } from 'react-redux'",
+      "",
+      "import store from '~/store'",
+      "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(",
+      "    <Provider store={store}>",
+      "      <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
+      "    </Provider>,",
+      "  )",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setupReactTest": {
+    "key": "setupReactTest",
+    "prefix": "stest",
+    "body": [
+      "import React from 'react'",
+      "import renderer from 'react-test-renderer'",
+      "",
+      "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
+      "",
+      "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
+      "  const defaultProps = {}",
+      "  const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
+      "",
+      "  test('render', () => {",
+      "    expect(wrapper).toMatchSnapshot()",
+      "  })",
+      "})"
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testAsyncBlock": {
+    "key": "testAsyncBlock",
+    "prefix": "testa",
+    "body": ["test('should ${1:first}', async () => { ${2:second} })"],
+    "description": "Testing `asynchronous test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "testBlock": {
+    "key": "testBlock",
+    "prefix": "test",
+    "body": ["test('should ${1:first}', () => { ${2:second} })"],
+    "description": "Testing `test` block",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefault": {
+    "key": "exportDefault",
+    "prefix": "exp",
+    "body": ["export default ${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDestructing": {
+    "key": "exportDestructing",
+    "prefix": "exd",
+    "body": ["export { ${2:second} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportAs": {
+    "key": "exportAs",
+    "prefix": "exa",
+    "body": ["export { ${2:second} as ${3:third} } from '${1:first}'"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportNamedFunction": {
+    "key": "exportNamedFunction",
+    "prefix": "enf",
+    "body": ["export const ${1:first} = (${2:second}) => {${3:third}}"],
+    "description": "Export named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultFunction": {
+    "key": "exportDefaultFunction",
+    "prefix": "edf",
+    "body": ["export default (${1:first}) => {${2:second}}"],
+    "description": "Export default function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "exportDefaultNamedFunction": {
+    "key": "exportDefaultNamedFunction",
+    "prefix": "ednf",
+    "body": ["export default function ${1:first}(${2:second}) {${3:third}}"],
+    "description": "Export default named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "method": {
+    "key": "method",
+    "prefix": "met",
+    "body": ["${1:first} = (${2:second}) => {${3:third}}"],
+    "description": "Creates a method inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertyGet": {
+    "key": "propertyGet",
+    "prefix": "pge",
+    "body": ["get ${1:first}() {", "  return this.${2:second}", "}"],
+    "description": "Creates a getter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "propertySet": {
+    "key": "propertySet",
+    "prefix": "pse",
+    "body": ["set ${1:first}(${2:second}) {${3:third}}"],
+    "description": "Creates a setter property inside a class",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forEach": {
+    "key": "forEach",
+    "prefix": "fre",
+    "body": ["${1:first}.forEach(${2:second} => {${3:third}})"],
+    "description": "Creates a forEach statement",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forOf": {
+    "key": "forOf",
+    "prefix": "fof",
+    "body": ["for(let ${1:first} of ${2:second}) {${3:third}}"],
+    "description": "Iterating over property names of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "forIn": {
+    "key": "forIn",
+    "prefix": "fin",
+    "body": ["for(let ${1:first} in ${2:second}) {${3:third}}"],
+    "description": "Iterating over property values of iterable objects",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "anonymousFunction": {
+    "key": "anonymousFunction",
+    "prefix": "anfn",
+    "body": ["(${1:first}) => { ${2:second} }"],
+    "description": "Creates an anonymous function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "namedFunction": {
+    "key": "namedFunction",
+    "prefix": "nfn",
+    "body": ["const ${1:first} = (${2:second}) => { ${3:third} }"],
+    "description": "Creates a named function",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingObject": {
+    "key": "destructingObject",
+    "prefix": "dob",
+    "body": ["const {${2:second}} = ${1:first}"],
+    "description": "Creates and assigns a local variable using object destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructingArray": {
+    "key": "destructingArray",
+    "prefix": "dar",
+    "body": ["const [${2:second}] = ${1:first}"],
+    "description": "Creates and assigns a local variable using array destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setInterval": {
+    "key": "setInterval",
+    "prefix": "sti",
+    "body": ["setInterval(() => { ${1:first} }, ${2:second})"],
+    "description": "Executes the given function at specified intervals",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "setTimeOut": {
+    "key": "setTimeOut",
+    "prefix": "sto",
+    "body": ["setTimeout(() => { ${1:first} }, ${2:second})"],
+    "description": "Executes the given function after the specified delay",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "promise": {
+    "key": "promise",
+    "prefix": "prom",
+    "body": ["return new Promise((resolve, reject) => { ${1:first} })"],
+    "description": "Creates and returns a new Promise in the standard ES7 syntax",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructProps": {
+    "key": "destructProps",
+    "prefix": "cp",
+    "body": ["const { ${1:first} } = this.props"],
+    "description": "Creates and assigns a local variable using props destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "destructState": {
+    "key": "destructState",
+    "prefix": "cs",
+    "body": ["const { ${1:first} } = this.state"],
+    "description": "Creates and assigns a local variable using state destructing",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "classConstructor": {
+    "key": "classConstructor",
+    "prefix": "rconst",
+    "body": [
+      "constructor(props) {",
+      "  super(props)",
+      "",
+      "  this.state = {",
+      "     ${1:first}",
+      "  }",
+      "}"
+    ],
+    "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "emptyState": {
+    "key": "emptyState",
+    "prefix": "est",
+    "body": ["state = { ${1:first} }"],
+    "description": "Creates empty state object. To be used in a constructor.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidMount": {
+    "key": "componentDidMount",
+    "prefix": "cdm",
+    "body": ["componentDidMount() { ${1:first} }"],
+    "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "shouldComponentUpdate": {
+    "key": "shouldComponentUpdate",
+    "prefix": "scu",
+    "body": ["shouldComponentUpdate(nextProps, nextState) { ${1:first} }"],
+    "description": "Invoked before rendering when new props or state are being received. ",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentDidUpdate": {
+    "key": "componentDidUpdate",
+    "prefix": "cdup",
+    "body": ["componentDidUpdate(prevProps, prevState) { ${1:first}} "],
+    "description": "Invoked immediately after the component's updates are flushed to the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentWillUnmount": {
+    "key": "componentWillUnmount",
+    "prefix": "cwun",
+    "body": ["componentWillUnmount() {${1:first} }"],
+    "description": "Invoked immediately before a component is unmounted from the DOM.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getDerivedStateFromProps": {
+    "key": "getDerivedStateFromProps",
+    "prefix": "gdsfp",
+    "body": ["static getDerivedStateFromProps(props, state) {${1:first}}"],
+    "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates.",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "getSnapshotBeforeUpdate": {
+    "key": "getSnapshotBeforeUpdate",
+    "prefix": "gsbu",
+    "body": [
+      "getSnapshotBeforeUpdate = (prevProps, prevState) => {${1:first}}"
+    ],
+    "description": "Called right before mutations are made (e.g. before the DOM is updated)",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createContext": {
+    "key": "createContext",
+    "prefix": "rcontext",
+    "body": ["const ${1:first} = React.createContext()"],
+    "description": "Create React context",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "createRef": {
+    "key": "createRef",
+    "prefix": "cref",
+    "body": ["this.${1:first}Ref = React.createRef()"],
+    "description": "Create ref statement used inside constructor",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateObject": {
+    "key": "componentSetStateObject",
+    "prefix": "sst",
+    "body": ["this.setState({${1:first}})"],
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentSetStateFunc": {
+    "key": "componentSetStateFunc",
+    "prefix": "ssf",
+    "body": ["this.setState((state, props) => { return { ${1:first} }})"],
+    "description": "Performs a shallow merge of nextState into current state",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentProps": {
+    "key": "componentProps",
+    "prefix": "props",
+    "body": ["this.props.${1:first}"],
+    "description": "Access component's props",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "componentState": {
+    "key": "componentState",
+    "prefix": "state",
+    "body": ["this.state.${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "bindThis": {
+    "key": "bindThis",
+    "prefix": "bnd",
+    "body": ["this.${1:first} = this.${1:first}.bind(this)"],
+    "description": "Binds this to a method",
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "commentBigBlock": {
+    "key": "commentBigBlock",
+    "prefix": "cmmb",
+    "body": ["/**", " * ${1:first}", " */"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponentWithRedux": {
+    "key": "hocComponentWithRedux",
+    "prefix": "hocredux",
+    "body": [
+      "import React from 'react'",
+      "import { connect } from 'react-redux'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export const mapStateToProps = state => ({})",
+      "",
+      "export const mapDispatchToProps = {}",
+      "",
+      "export const ${1:first} = (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      "",
+      "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:first}(WrapperComponent))",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "hocComponent": {
+    "key": "hocComponent",
+    "prefix": "hoc",
+    "body": [
+      "import React from 'react'",
+      "import PropTypes from 'prop-types'",
+      "",
+      "export default (WrappedComponent) => {",
+      "  const hocComponent = ({ ...props }) => <WrappedComponent {...props} />",
+      "",
+      "  hocComponent.propTypes = {}",
+      "",
+      "  return hocComponent",
+      "}",
+      ""
+    ],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  },
+  "typeofSnippet": {
+    "key": "typeofSnippet",
+    "prefix": "tpf",
+    "body": ["typeof ${1:first}"],
+    "scope": "typescript,typescriptreact,javascript,javascriptreact"
+  }
+}

From 5c68701f8dbe0f788971911bc1fc20b617be769b Mon Sep 17 00:00:00 2001
From: Damian Sznajder <damsznajder@gmail.com>
Date: Fri, 18 Feb 2022 14:12:39 +0100
Subject: [PATCH 17/18] 4.4.3

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 2e6362f..12df135 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "es7-react-js-snippets",
   "displayName": "ES7+ React/Redux/React-Native snippets",
   "description": "Extensions for React, React-Native and Redux in JS/TS with ES7+ syntax. Customizable. Built-in integration with prettier.",
-  "version": "4.4.2",
+  "version": "4.4.3",
   "publisher": "dsznajder",
   "icon": "images/logo.png",
   "browser": "./lib/index.js",

From 185bb91a0b692c54136663464e8225872c434637 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 10 Apr 2022 07:23:52 +0000
Subject: [PATCH 18/18] chore(deps): bump minimist from 1.2.5 to 1.2.6

Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 README.md | 7 -------
 yarn.lock | 6 +++---
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index b00b32a..38808d5 100644
--- a/README.md
+++ b/README.md
@@ -41,13 +41,6 @@ Manage pull requests and conduct code reviews in your IDE with full source-tree
 
 <br>
 
-<a title="Try Duckly" href="https://bit.ly/34IZ7H1"><img src="https://storage.googleapis.com/gitduck/img/duckly-sponsor-vsc-opt.png"></a>
-
-<p>Easy pair programming with any IDE. Duckly enables you to talk, share your code inreal-time, server and terminal with people using different IDEs <a title="Try it out for free" href="https://bit.ly/34IZ7H1">Try it out for free</a>
-</p>
-
-<br>
-
 ### Conquer of Completion
 
 It is possible to use this package in your vim/neovim text editor, to make this possible, make sure you have the `coc.nvim` previously configured, then add this command to your `init.vim`
diff --git a/yarn.lock b/yarn.lock
index 598ecad..3956e33 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1321,9 +1321,9 @@ minimatch@^3.0.4:
     brace-expansion "^1.1.7"
 
 minimist@^1.2.0:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
-  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
 
 ms@2.0.0:
   version "2.0.0"
