Add roadmap migrator command

astro
Kamran Ahmed 2 years ago
parent 451c36dca4
commit 16ebf98164
  1. 1
      bin/developer-roadmap
  2. 116
      bin/roadmap-metas.cjs
  3. 132
      bin/roadmap-migrator.cjs
  4. 30
      bin/sync-content.sh
  5. 6
      package.json
  6. 147
      pnpm-lock.yaml
  7. 18249
      public/jsons/backend.json
  8. 112
      public/jsons/blockchain.json
  9. 7578
      public/jsons/devops.json
  10. 6126
      public/jsons/frontend.json
  11. 4786
      public/jsons/graphql.json
  12. 3195
      public/jsons/python.json
  13. 6824
      public/jsons/react.json
  14. BIN
      public/pdfs/angular.pdf
  15. BIN
      public/pdfs/aspnet-core.pdf
  16. BIN
      public/pdfs/backend.pdf
  17. BIN
      public/pdfs/blockchain.pdf
  18. BIN
      public/pdfs/computer-science.pdf
  19. BIN
      public/pdfs/design-system.pdf
  20. BIN
      public/pdfs/devops.pdf
  21. BIN
      public/pdfs/flutter.pdf
  22. BIN
      public/pdfs/frontend.pdf
  23. BIN
      public/pdfs/golang.pdf
  24. BIN
      public/pdfs/graphql.pdf
  25. BIN
      public/pdfs/java.pdf
  26. BIN
      public/pdfs/javascript.pdf
  27. BIN
      public/pdfs/nodejs.pdf
  28. BIN
      public/pdfs/python.pdf
  29. BIN
      public/pdfs/qa.pdf
  30. BIN
      public/pdfs/react.pdf
  31. BIN
      public/pdfs/software-design-architecture.pdf
  32. BIN
      public/pdfs/vue.pdf
  33. BIN
      public/roadmaps/android.png
  34. BIN
      public/roadmaps/android/build-an-application.png
  35. BIN
      public/roadmaps/android/git-github.png
  36. BIN
      public/roadmaps/android/pick-language.png
  37. 49
      public/roadmaps/android/pick-language.svg
  38. BIN
      public/roadmaps/android/roadmap.png
  39. 559
      public/roadmaps/android/roadmap.svg
  40. BIN
      public/roadmaps/android/the-fundamentals.png
  41. BIN
      public/roadmaps/angular.png
  42. BIN
      public/roadmaps/aspnet-core.png
  43. BIN
      public/roadmaps/backend.png
  44. BIN
      public/roadmaps/blockchain.png
  45. BIN
      public/roadmaps/computer-science.png
  46. BIN
      public/roadmaps/design-system.png
  47. BIN
      public/roadmaps/devops.png
  48. BIN
      public/roadmaps/flutter.png
  49. BIN
      public/roadmaps/frontend.png
  50. BIN
      public/roadmaps/golang.png
  51. BIN
      public/roadmaps/graphql.png
  52. BIN
      public/roadmaps/intro.png
  53. BIN
      public/roadmaps/java.png
  54. BIN
      public/roadmaps/javascript.png
  55. BIN
      public/roadmaps/nodejs.png
  56. BIN
      public/roadmaps/python.png
  57. BIN
      public/roadmaps/qa.png
  58. BIN
      public/roadmaps/react.png
  59. BIN
      public/roadmaps/software-architect.png
  60. BIN
      public/roadmaps/software-design-architecture.png
  61. BIN
      public/roadmaps/vue.png
  62. 2
      scripts/migrate-content.sh
  63. 2
      src/pages/[...topicId].astro
  64. 13
      src/roadmaps/android/android.md
  65. 1
      src/roadmaps/angular/angular.md
  66. 11
      src/roadmaps/angular/content/100-typescript-basics/100-what-is-typescript.md
  67. 7
      src/roadmaps/angular/content/100-typescript-basics/101-why-use-typescript.md
  68. 9
      src/roadmaps/angular/content/100-typescript-basics/102-structural-typing.md
  69. 7
      src/roadmaps/angular/content/100-typescript-basics/103-type-inference.md
  70. 7
      src/roadmaps/angular/content/100-typescript-basics/104-union-types.md
  71. 7
      src/roadmaps/angular/content/100-typescript-basics/105-builtin-types.md
  72. 5
      src/roadmaps/angular/content/100-typescript-basics/106-type-guard.md
  73. 6
      src/roadmaps/angular/content/100-typescript-basics/readme.md
  74. 5
      src/roadmaps/angular/content/101-rxjs-basics/100-observable-pattern.md
  75. 5
      src/roadmaps/angular/content/101-rxjs-basics/101-observable-lifecycle.md
  76. 9
      src/roadmaps/angular/content/101-rxjs-basics/102-marble-diagrams.md
  77. 12
      src/roadmaps/angular/content/101-rxjs-basics/103-rxjs-vs-promises.md
  78. 12
      src/roadmaps/angular/content/101-rxjs-basics/104-operators/readme.md
  79. 0
      src/roadmaps/angular/content/101-rxjs-basics/readme.md
  80. 7
      src/roadmaps/angular/content/102-angular-basics/100-angularjs-vs-angular.md
  81. 7
      src/roadmaps/angular/content/102-angular-basics/101-angular-components.md
  82. 7
      src/roadmaps/angular/content/102-angular-basics/102-angular-templates.md
  83. 5
      src/roadmaps/angular/content/102-angular-basics/103-angular-modules.md
  84. 7
      src/roadmaps/angular/content/102-angular-basics/104-dependency-injection.md
  85. 11
      src/roadmaps/angular/content/102-angular-basics/105-services.md
  86. 7
      src/roadmaps/angular/content/102-angular-basics/106-routing.md
  87. 0
      src/roadmaps/angular/content/102-angular-basics/readme.md
  88. 7
      src/roadmaps/angular/content/103-angular-cli/100-ng-build.md
  89. 7
      src/roadmaps/angular/content/103-angular-cli/101-ng-serve.md
  90. 7
      src/roadmaps/angular/content/103-angular-cli/102-ng-generate.md
  91. 7
      src/roadmaps/angular/content/103-angular-cli/103-ng-test.md
  92. 7
      src/roadmaps/angular/content/103-angular-cli/104-ng-e2e.md
  93. 7
      src/roadmaps/angular/content/103-angular-cli/105-ng-new.md
  94. 7
      src/roadmaps/angular/content/103-angular-cli/106-schematics.md
  95. 10
      src/roadmaps/angular/content/103-angular-cli/index.md
  96. 9
      src/roadmaps/angular/content/103-angular-cli/readme.md
  97. 5
      src/roadmaps/angular/content/104-templates/100-interpolation.md
  98. 6
      src/roadmaps/angular/content/104-templates/101-property-binding.md
  99. 6
      src/roadmaps/angular/content/104-templates/102-template-statements.md
  100. 6
      src/roadmaps/angular/content/104-templates/103-binding-data-props-attrs-events.md
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1 @@
Subproject commit e0685ea2eac50051b41dd186b752905e85f4143d

@ -0,0 +1,116 @@
module.exports = {
angular: {
dimensions: {
width: 968,
height: 2277.8,
},
},
'aspnet-core': {
dimensions: {
width: 968,
height: 2773.45,
},
},
backend: {
dimensions: {
width: 968,
height: 2840.4,
},
},
blockchain: {
dimensions: {
width: 968,
height: 2173.87,
},
},
'computer-science': {
dimensions: {
width: 968,
height: 3009.05,
},
},
'design-system': {
dimensions: {
width: 968,
height: 2309.7,
},
},
devops: {
dimensions: {
width: 968,
height: 2527.46,
},
},
flutter: {
dimensions: {
width: 968,
height: 2042.2,
},
},
frontend: {
dimensions: {
width: 968,
height: 2734.48,
},
},
golang: {
dimensions: {
width: 968,
height: 1495.21,
},
},
java: {
dimensions: {
width: 968,
height: 1167.29,
},
},
javascript: {
dimensions: {
width: 968,
height: 2438.9,
},
},
nodejs: {
dimensions: {
width: 968,
height: 2474.06,
},
},
python: {
dimensions: {
width: 992,
height: 1259.03,
},
},
qa: {
dimensions: {
width: 968,
height: 2107.75,
},
},
react: {
dimensions: {
width: 968,
height: 2570.26,
},
},
'software-architect': {
dimensions: {
width: 968,
height: 1882.18,
},
},
'software-design-architecture': {
dimensions: {
width: 968,
height: 1764.66,
},
},
vue: {
dimensions: {
width: 968,
height: 1657.07,
},
},
};

@ -0,0 +1,132 @@
const fs = require('fs');
const path = require('path');
const yaml = require('json-to-pretty-yaml');
const roadmapMetas = require('./roadmap-metas.cjs');
const oldAssetsPath = path.join(__dirname, 'developer-roadmap/public');
const newAssetsPath = path.join(__dirname, '../public/');
// Create JSONs dir
const newJsonsPath = path.join(newAssetsPath, 'jsons');
if (fs.existsSync(newJsonsPath)) {
fs.rmSync(newJsonsPath, { recursive: true });
}
fs.mkdirSync(newJsonsPath);
// Create PDFs dir
const newPdfsPath = path.join(newAssetsPath, 'pdfs');
if (fs.existsSync(newPdfsPath)) {
fs.rmSync(newPdfsPath, { recursive: true });
}
fs.mkdirSync(newPdfsPath);
const oldRoadmapsDirPath = path.join(__dirname, 'developer-roadmap/content/roadmaps');
const newRoadmapsDirPath = path.join(__dirname, '../src/roadmaps');
if (fs.existsSync(newRoadmapsDirPath)) {
fs.rmSync(newRoadmapsDirPath, { recursive: true });
}
fs.mkdirSync(newRoadmapsDirPath);
const oldRoadmaps = fs
.readdirSync(oldRoadmapsDirPath)
.map((roadmapDirName) => path.join(oldRoadmapsDirPath, roadmapDirName));
const orderInfo = {};
const typeCounter = {
role: 1,
tool: 1,
};
// Calculate the sorting information for the roadmaps
oldRoadmaps.forEach((oldRoadmapPath) => {
const roadmapId = path.basename(oldRoadmapPath).replace(/\d+-/g, '').toLowerCase();
const oldRoadmapMeta = require(path.join(oldRoadmapPath, 'meta.json'));
orderInfo[roadmapId] = typeCounter[oldRoadmapMeta.type];
typeCounter[oldRoadmapMeta.type] += 1;
});
// Iterate and create new roadmaps
oldRoadmaps.forEach((oldRoadmapPath) => {
const roadmapId = path.basename(oldRoadmapPath).replace(/\d+-/g, '').toLowerCase();
const metaToMerge = roadmapMetas[roadmapId] ?? {};
const oldRoadmapMeta = require(path.join(oldRoadmapPath, 'meta.json'));
const isTextual = oldRoadmapMeta?.landingPath?.endsWith('.md');
const hasContentDir = fs.existsSync(path.join(oldRoadmapPath, 'content'));
const roadmapFileContent = isTextual
? fs.readFileSync(path.join(oldRoadmapPath, oldRoadmapMeta.landingPath), 'utf8')
: '';
const roadmapFileContentWithUpdatedUrls = roadmapFileContent
.replace(/\[\!\[\]\((.+?\.png)\)\]\((.+?\.png)\)/g, '[![](/assets$1)](/assets$2)')
.replace(/\[\!\[\]\((.+?\.svg)\)\]\((.+?\.svg)\)/g, '[![](/assets$1)](/assets$2)')
.replace(/\[\!\[\]\((.+?\.svg)\)\]\((.+?\.png)\)/g, '[![](/assets$1)](/assets$2)')
.replace(/assetshttp\//g, 'http')
.replace(/assetshttps:\/\//g, 'https://')
.replace(/\/http/g, 'http')
.replace(/]\(\/roadmaps\/(.+?)\.png\)/g, '](/assets/roadmaps/$1.png)')
.replace(/]\(\/roadmaps\/(.+?)\.svg\)/g, '](/assets/roadmaps/$1.svg)')
.replace(/<iframe/g, '<iframe class="w-full aspect-video mb-5"')
.replace(/<iframe(.+?)\s?\/>/g, '<iframe$1></iframe>');
const hasJson = fs.existsSync(path.join(newAssetsPath, `/${roadmapId}.json`));
const newRoadmapMeta = {
...( hasJson ? { jsonUrl: `/jsons/${roadmapId}.json`} : {}),
pdfUrl: `/pdfs/${roadmapId}.pdf`,
order: orderInfo[roadmapId],
featuredTitle:
oldRoadmapMeta.featuredTitle === 'Software Design and Architecture'
? 'Software Design'
: oldRoadmapMeta.featuredTitle,
featuredDescription: oldRoadmapMeta.featuredDescription,
title: oldRoadmapMeta.title,
description: oldRoadmapMeta.description,
isNew: oldRoadmapMeta.isNew,
hasTopics: hasContentDir,
...metaToMerge,
seo: oldRoadmapMeta.seo,
relatedRoadmaps: oldRoadmapMeta.relatedRoadmaps,
sitemap: {
priority: 1,
changefreq: 'monthly',
},
tags: ['roadmap', 'main-sitemap', `${oldRoadmapMeta.type === 'tool' ? 'skill' : oldRoadmapMeta.type}-roadmap`],
};
const frontmatter = yaml.stringify(newRoadmapMeta);
const newRoadmapDirPath = path.join(newRoadmapsDirPath, roadmapId);
const newRoadmapFilePath = path.join(newRoadmapDirPath, `/${roadmapId}.md`);
fs.mkdirSync(newRoadmapDirPath);
fs.writeFileSync(newRoadmapFilePath, `---\n${frontmatter}---\n\n${roadmapFileContentWithUpdatedUrls}`);
const jsonFile = path.join(oldAssetsPath, oldRoadmapMeta.jsonUrl || '/unknown');
const pdfFile = path.join(oldAssetsPath, oldRoadmapMeta.pdfUrl || '/unknown');
if (fs.existsSync(jsonFile)) {
fs.copyFileSync(jsonFile, path.join(newJsonsPath, `${roadmapId}.json`));
}
if (fs.existsSync(pdfFile)) {
fs.copyFileSync(pdfFile, path.join(newPdfsPath, `${roadmapId}.pdf`));
}
// Copy the content directory
const oldRoadmapContentDir = path.join(oldRoadmapPath, 'content');
if (fs.existsSync(oldRoadmapContentDir)) {
fs.cpSync(oldRoadmapContentDir, path.join(newRoadmapDirPath, 'content'), { recursive: true });
}
});
const roadmapAssets = path.join(oldAssetsPath, 'roadmaps');
if (fs.existsSync(roadmapAssets)) {
fs.cpSync(roadmapAssets, path.join(newAssetsPath, 'roadmaps'), { recursive: true });
}

@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -e
# Change working directory to the directory of this script
cd "$(dirname "$0")"
if [ ! -d "./developer-roadmap" ]; then
git clone --depth 1 -b master git@github.com:kamranahmedse/developer-roadmap.git
fi
echo "Removing old directories"
rm -rf ../src/videos
rm -rf ../src/guides
rm -rf ../src/roadmaps
rm -rf ../public/jsons
rm -rf ../public/pdfs
echo "=== Migrating Roadmaps ==="
node roadmap-migrator.cjs
echo "=== Migrating Content ==="
# node content-migrator.cjs
echo "=== Migrating Guides ==="
# node guide-migrator.cjs
echo "=== Migrating Videos ==="
# node video-migrator.cjs

@ -1,5 +1,5 @@
{ {
"name": "@example/basics", "name": "roadmap.sh",
"type": "module", "type": "module",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
@ -8,7 +8,8 @@
"start": "astro dev", "start": "astro dev",
"build": "astro build", "build": "astro build",
"preview": "astro preview", "preview": "astro preview",
"astro": "astro" "astro": "astro",
"sync-content": "sh ./bin/sync-content.sh"
}, },
"dependencies": { "dependencies": {
"@astrojs/tailwind": "^2.1.3", "@astrojs/tailwind": "^2.1.3",
@ -19,6 +20,7 @@
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/typography": "^0.5.8", "@tailwindcss/typography": "^0.5.8",
"json-to-pretty-yaml": "^1.2.2",
"prettier": "^2.8.1", "prettier": "^2.8.1",
"prettier-plugin-astro": "^0.7.0" "prettier-plugin-astro": "^0.7.0"
} }

@ -2,16 +2,28 @@ lockfileVersion: 5.4
specifiers: specifiers:
'@astrojs/tailwind': ^2.1.3 '@astrojs/tailwind': ^2.1.3
'@tailwindcss/typography': ^0.5.8
astro: ^1.8.0 astro: ^1.8.0
json-to-pretty-yaml: ^1.2.2
node-html-parser: ^6.1.4 node-html-parser: ^6.1.4
prettier: ^2.8.1
prettier-plugin-astro: ^0.7.0
roadmap-renderer: ^1.0.1
tailwindcss: ^3.2.4 tailwindcss: ^3.2.4
dependencies: dependencies:
'@astrojs/tailwind': 2.1.3_tailwindcss@3.2.4 '@astrojs/tailwind': 2.1.3_tailwindcss@3.2.4
astro: 1.8.0 astro: 1.8.0
node-html-parser: 6.1.4 node-html-parser: 6.1.4
roadmap-renderer: 1.0.1
tailwindcss: 3.2.4 tailwindcss: 3.2.4
devDependencies:
'@tailwindcss/typography': 0.5.8_tailwindcss@3.2.4
json-to-pretty-yaml: 1.2.2
prettier: 2.8.1
prettier-plugin-astro: 0.7.0
packages: packages:
/@ampproject/remapping/2.2.0: /@ampproject/remapping/2.2.0:
@ -24,7 +36,6 @@ packages:
/@astrojs/compiler/0.29.19: /@astrojs/compiler/0.29.19:
resolution: {integrity: sha512-lvPpoOA6Fc1NpJrPT65ZOhhFieYkiBds9wzOhWX55lXMUpNPu5CUxqzgDAkNSTIoXHZxkxHfi+6EpFNnRZBBYQ==} resolution: {integrity: sha512-lvPpoOA6Fc1NpJrPT65ZOhhFieYkiBds9wzOhWX55lXMUpNPu5CUxqzgDAkNSTIoXHZxkxHfi+6EpFNnRZBBYQ==}
dev: false
/@astrojs/compiler/0.31.3: /@astrojs/compiler/0.31.3:
resolution: {integrity: sha512-WbA05QH5xkdaJ3XtzDuYOjtqsip2InW5rk156sSdaHs5qN2NroUHbzWZthHJwmNAAjQSGXVIj+O6jQj81zzX/Q==} resolution: {integrity: sha512-WbA05QH5xkdaJ3XtzDuYOjtqsip2InW5rk156sSdaHs5qN2NroUHbzWZthHJwmNAAjQSGXVIj+O6jQj81zzX/Q==}
@ -446,12 +457,10 @@ packages:
dependencies: dependencies:
'@nodelib/fs.stat': 2.0.5 '@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0 run-parallel: 1.2.0
dev: false
/@nodelib/fs.stat/2.0.5: /@nodelib/fs.stat/2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: false
/@nodelib/fs.walk/1.2.8: /@nodelib/fs.walk/1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
@ -459,7 +468,6 @@ packages:
dependencies: dependencies:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.14.0 fastq: 1.14.0
dev: false
/@pkgr/utils/2.3.1: /@pkgr/utils/2.3.1:
resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
@ -471,7 +479,6 @@ packages:
picocolors: 1.0.0 picocolors: 1.0.0
tiny-glob: 0.2.9 tiny-glob: 0.2.9
tslib: 2.4.1 tslib: 2.4.1
dev: false
/@polka/url/1.0.0-next.21: /@polka/url/1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
@ -493,6 +500,18 @@ packages:
tsm: 2.3.0 tsm: 2.3.0
dev: false dev: false
/@tailwindcss/typography/0.5.8_tailwindcss@3.2.4:
resolution: {integrity: sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.2.4
dev: true
/@types/acorn/4.0.6: /@types/acorn/4.0.6:
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
dependencies: dependencies:
@ -624,18 +643,15 @@ packages:
acorn: 7.4.1 acorn: 7.4.1
acorn-walk: 7.2.0 acorn-walk: 7.2.0
xtend: 4.0.2 xtend: 4.0.2
dev: false
/acorn-walk/7.2.0: /acorn-walk/7.2.0:
resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
dev: false
/acorn/7.4.1: /acorn/7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
dev: false
/acorn/8.8.1: /acorn/8.8.1:
resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
@ -684,11 +700,9 @@ packages:
dependencies: dependencies:
normalize-path: 3.0.0 normalize-path: 3.0.0
picomatch: 2.3.1 picomatch: 2.3.1
dev: false
/arg/5.0.2: /arg/5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
dev: false
/argparse/1.0.10: /argparse/1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@ -813,7 +827,6 @@ packages:
/binary-extensions/2.2.0: /binary-extensions/2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false
/bl/5.1.0: /bl/5.1.0:
resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
@ -850,7 +863,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
fill-range: 7.0.1 fill-range: 7.0.1
dev: false
/browserslist/4.21.4: /browserslist/4.21.4:
resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
@ -873,7 +885,6 @@ packages:
/camelcase-css/2.0.1: /camelcase-css/2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
dev: false
/camelcase/6.3.0: /camelcase/6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
@ -939,7 +950,6 @@ packages:
readdirp: 3.6.0 readdirp: 3.6.0
optionalDependencies: optionalDependencies:
fsevents: 2.3.2 fsevents: 2.3.2
dev: false
/ci-info/3.7.0: /ci-info/3.7.0:
resolution: {integrity: sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==} resolution: {integrity: sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==}
@ -987,7 +997,6 @@ packages:
/color-name/1.1.4: /color-name/1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: false
/comma-separated-tokens/2.0.3: /comma-separated-tokens/2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
@ -1013,7 +1022,6 @@ packages:
path-key: 3.1.1 path-key: 3.1.1
shebang-command: 2.0.0 shebang-command: 2.0.0
which: 2.0.2 which: 2.0.2
dev: false
/css-select/5.1.0: /css-select/5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
@ -1034,7 +1042,6 @@ packages:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
dev: false
/data-uri-to-buffer/4.0.0: /data-uri-to-buffer/4.0.0:
resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
@ -1078,7 +1085,6 @@ packages:
/define-lazy-prop/2.0.0: /define-lazy-prop/2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false
/define-properties/1.1.4: /define-properties/1.1.4:
resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
@ -1090,7 +1096,6 @@ packages:
/defined/1.0.1: /defined/1.0.1:
resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
dev: false
/dequal/2.0.3: /dequal/2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
@ -1109,7 +1114,6 @@ packages:
acorn-node: 1.8.2 acorn-node: 1.8.2
defined: 1.0.1 defined: 1.0.1
minimist: 1.2.7 minimist: 1.2.7
dev: false
/devalue/4.2.0: /devalue/4.2.0:
resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==}
@ -1117,7 +1121,6 @@ packages:
/didyoumean/1.2.2: /didyoumean/1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: false
/diff/5.1.0: /diff/5.1.0:
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
@ -1126,7 +1129,6 @@ packages:
/dlv/1.1.3: /dlv/1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: false
/dom-serializer/2.0.0: /dom-serializer/2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@ -1487,13 +1489,11 @@ packages:
glob-parent: 5.1.2 glob-parent: 5.1.2
merge2: 1.4.1 merge2: 1.4.1
micromatch: 4.0.5 micromatch: 4.0.5
dev: false
/fastq/1.14.0: /fastq/1.14.0:
resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==}
dependencies: dependencies:
reusify: 1.0.4 reusify: 1.0.4
dev: false
/fetch-blob/3.2.0: /fetch-blob/3.2.0:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
@ -1508,7 +1508,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
dev: false
/find-up/4.1.0: /find-up/4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@ -1549,12 +1548,10 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/function-bind/1.1.1: /function-bind/1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: false
/gensync/1.0.0-beta.2: /gensync/1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
@ -1583,14 +1580,12 @@ packages:
engines: {node: '>= 6'} engines: {node: '>= 6'}
dependencies: dependencies:
is-glob: 4.0.3 is-glob: 4.0.3
dev: false
/glob-parent/6.0.2: /glob-parent/6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
dependencies: dependencies:
is-glob: 4.0.3 is-glob: 4.0.3
dev: false
/global-agent/3.0.0: /global-agent/3.0.0:
resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
@ -1618,11 +1613,9 @@ packages:
/globalyzer/0.1.0: /globalyzer/0.1.0:
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
dev: false
/globrex/0.1.2: /globrex/0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
dev: false
/graceful-fs/4.2.10: /graceful-fs/4.2.10:
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
@ -1670,7 +1663,6 @@ packages:
engines: {node: '>= 0.4.0'} engines: {node: '>= 0.4.0'}
dependencies: dependencies:
function-bind: 1.1.1 function-bind: 1.1.1
dev: false
/hast-to-hyperscript/10.0.1: /hast-to-hyperscript/10.0.1:
resolution: {integrity: sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==} resolution: {integrity: sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==}
@ -1820,7 +1812,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
binary-extensions: 2.2.0 binary-extensions: 2.2.0
dev: false
/is-buffer/2.0.5: /is-buffer/2.0.5:
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
@ -1831,7 +1822,6 @@ packages:
resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
dependencies: dependencies:
has: 1.0.3 has: 1.0.3
dev: false
/is-decimal/2.0.1: /is-decimal/2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@ -1841,7 +1831,6 @@ packages:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
hasBin: true hasBin: true
dev: false
/is-docker/3.0.0: /is-docker/3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
@ -1857,7 +1846,6 @@ packages:
/is-extglob/2.1.1: /is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/is-fullwidth-code-point/3.0.0: /is-fullwidth-code-point/3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
@ -1869,7 +1857,6 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dependencies: dependencies:
is-extglob: 2.1.1 is-extglob: 2.1.1
dev: false
/is-hexadecimal/2.0.1: /is-hexadecimal/2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
@ -1883,7 +1870,6 @@ packages:
/is-number/7.0.0: /is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'} engines: {node: '>=0.12.0'}
dev: false
/is-plain-obj/4.1.0: /is-plain-obj/4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
@ -1905,11 +1891,9 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
is-docker: 2.2.1 is-docker: 2.2.1
dev: false
/isexe/2.0.0: /isexe/2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: false
/js-tokens/4.0.0: /js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@ -1933,6 +1917,14 @@ packages:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
dev: false dev: false
/json-to-pretty-yaml/1.2.2:
resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==}
engines: {node: '>= 0.2.0'}
dependencies:
remedial: 1.0.8
remove-trailing-spaces: 1.0.8
dev: true
/json5/2.2.2: /json5/2.2.2:
resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==} resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -1965,7 +1957,6 @@ packages:
/lilconfig/2.0.6: /lilconfig/2.0.6:
resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: false
/load-yaml-file/0.2.0: /load-yaml-file/0.2.0:
resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
@ -1991,6 +1982,18 @@ packages:
p-locate: 5.0.0 p-locate: 5.0.0
dev: false dev: false
/lodash.castarray/4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
dev: true
/lodash.isplainobject/4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
dev: true
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
/log-symbols/5.1.0: /log-symbols/5.1.0:
resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -2187,7 +2190,6 @@ packages:
/merge2/1.4.1: /merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: false
/micromark-core-commonmark/1.0.6: /micromark-core-commonmark/1.0.6:
resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
@ -2487,7 +2489,6 @@ packages:
dependencies: dependencies:
braces: 3.0.2 braces: 3.0.2
picomatch: 2.3.1 picomatch: 2.3.1
dev: false
/mime/3.0.0: /mime/3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
@ -2507,7 +2508,6 @@ packages:
/minimist/1.2.7: /minimist/1.2.7:
resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
dev: false
/mri/1.2.0: /mri/1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@ -2527,7 +2527,6 @@ packages:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
dev: false
/nlcst-to-string/3.1.0: /nlcst-to-string/3.1.0:
resolution: {integrity: sha512-Y8HQWKw/zrHTCnu2zcFBN1dV6vN0NUG7s5fkEj380G8tF3R+vA2KG+tDl2QoHVQCTHGHVXwoni2RQkDSFQb1PA==} resolution: {integrity: sha512-Y8HQWKw/zrHTCnu2zcFBN1dV6vN0NUG7s5fkEj380G8tF3R+vA2KG+tDl2QoHVQCTHGHVXwoni2RQkDSFQb1PA==}
@ -2563,7 +2562,6 @@ packages:
/normalize-path/3.0.0: /normalize-path/3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/normalize-range/0.1.2: /normalize-range/0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
@ -2586,7 +2584,6 @@ packages:
/object-hash/3.0.0: /object-hash/3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
dev: false
/object-keys/1.1.1: /object-keys/1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@ -2614,7 +2611,6 @@ packages:
define-lazy-prop: 2.0.0 define-lazy-prop: 2.0.0
is-docker: 2.2.1 is-docker: 2.2.1
is-wsl: 2.2.0 is-wsl: 2.2.0
dev: false
/ora/6.1.2: /ora/6.1.2:
resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==} resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==}
@ -2701,7 +2697,6 @@ packages:
/path-key/3.1.1: /path-key/3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false
/path-key/4.0.0: /path-key/4.0.0:
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
@ -2710,7 +2705,6 @@ packages:
/path-parse/1.0.7: /path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: false
/path-to-regexp/6.2.1: /path-to-regexp/6.2.1:
resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
@ -2718,17 +2712,14 @@ packages:
/picocolors/1.0.0: /picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: false
/picomatch/2.3.1: /picomatch/2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
dev: false
/pify/2.3.0: /pify/2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/pify/4.0.1: /pify/4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
@ -2752,7 +2743,6 @@ packages:
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
read-cache: 1.0.0 read-cache: 1.0.0
resolve: 1.22.1 resolve: 1.22.1
dev: false
/postcss-js/4.0.0_postcss@8.4.20: /postcss-js/4.0.0_postcss@8.4.20:
resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
@ -2762,7 +2752,6 @@ packages:
dependencies: dependencies:
camelcase-css: 2.0.1 camelcase-css: 2.0.1
postcss: 8.4.20 postcss: 8.4.20
dev: false
/postcss-load-config/3.1.4_postcss@8.4.20: /postcss-load-config/3.1.4_postcss@8.4.20:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
@ -2779,7 +2768,6 @@ packages:
lilconfig: 2.0.6 lilconfig: 2.0.6
postcss: 8.4.20 postcss: 8.4.20
yaml: 1.10.2 yaml: 1.10.2
dev: false
/postcss-nested/6.0.0_postcss@8.4.20: /postcss-nested/6.0.0_postcss@8.4.20:
resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
@ -2789,7 +2777,14 @@ packages:
dependencies: dependencies:
postcss: 8.4.20 postcss: 8.4.20
postcss-selector-parser: 6.0.11 postcss-selector-parser: 6.0.11
dev: false
/postcss-selector-parser/6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
dev: true
/postcss-selector-parser/6.0.11: /postcss-selector-parser/6.0.11:
resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
@ -2797,11 +2792,9 @@ packages:
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
util-deprecate: 1.0.2 util-deprecate: 1.0.2
dev: false
/postcss-value-parser/4.2.0: /postcss-value-parser/4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: false
/postcss/8.4.20: /postcss/8.4.20:
resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==}
@ -2810,7 +2803,6 @@ packages:
nanoid: 3.3.4 nanoid: 3.3.4
picocolors: 1.0.0 picocolors: 1.0.0
source-map-js: 1.0.2 source-map-js: 1.0.2
dev: false
/preferred-pm/3.0.3: /preferred-pm/3.0.3:
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
@ -2830,13 +2822,11 @@ packages:
prettier: 2.8.1 prettier: 2.8.1
sass-formatter: 0.7.5 sass-formatter: 0.7.5
synckit: 0.8.4 synckit: 0.8.4
dev: false
/prettier/2.8.1: /prettier/2.8.1:
resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
hasBin: true hasBin: true
dev: false
/prismjs/1.29.0: /prismjs/1.29.0:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
@ -2857,18 +2847,15 @@ packages:
/queue-microtask/1.2.3: /queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: false
/quick-lru/5.1.1: /quick-lru/5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: false
/read-cache/1.0.0: /read-cache/1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies: dependencies:
pify: 2.3.0 pify: 2.3.0
dev: false
/readable-stream/3.6.0: /readable-stream/3.6.0:
resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
@ -2884,7 +2871,6 @@ packages:
engines: {node: '>=8.10.0'} engines: {node: '>=8.10.0'}
dependencies: dependencies:
picomatch: 2.3.1 picomatch: 2.3.1
dev: false
/recast/0.20.5: /recast/0.20.5:
resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==} resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==}
@ -2969,6 +2955,14 @@ packages:
unist-util-visit: 4.1.1 unist-util-visit: 4.1.1
dev: false dev: false
/remedial/1.0.8:
resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==}
dev: true
/remove-trailing-spaces/1.0.8:
resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==}
dev: true
/resolve/1.22.1: /resolve/1.22.1:
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
hasBin: true hasBin: true
@ -2976,7 +2970,6 @@ packages:
is-core-module: 2.11.0 is-core-module: 2.11.0
path-parse: 1.0.7 path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0 supports-preserve-symlinks-flag: 1.0.0
dev: false
/restore-cursor/4.0.0: /restore-cursor/4.0.0:
resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
@ -3024,6 +3017,9 @@ packages:
/reusify/1.0.4: /reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'} engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
/roadmap-renderer/1.0.1:
resolution: {integrity: sha512-f71DLNMfBNtwNwa5ffkXVRBL24loYJ7YMcyyeAUhbJMzEQYp9vWaArVGualylBIw95APy/UIgBZ9KuqiW1Y4UA==}
dev: false dev: false
/roarr/2.15.4: /roarr/2.15.4:
@ -3050,11 +3046,9 @@ packages:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies: dependencies:
queue-microtask: 1.2.3 queue-microtask: 1.2.3
dev: false
/s.color/0.0.15: /s.color/0.0.15:
resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==}
dev: false
/sade/1.8.1: /sade/1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
@ -3071,7 +3065,6 @@ packages:
resolution: {integrity: sha512-NKFP8ddjhUYi6A/iD1cEtzkEs91U61kzqe3lY9SVNuvX7LGc88xnEN0mmsWL7Ol//YTi2GL/ol7b9XZ2+hgXuA==} resolution: {integrity: sha512-NKFP8ddjhUYi6A/iD1cEtzkEs91U61kzqe3lY9SVNuvX7LGc88xnEN0mmsWL7Ol//YTi2GL/ol7b9XZ2+hgXuA==}
dependencies: dependencies:
suf-log: 2.5.3 suf-log: 2.5.3
dev: false
/section-matter/1.0.0: /section-matter/1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
@ -3110,12 +3103,10 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
shebang-regex: 3.0.0 shebang-regex: 3.0.0
dev: false
/shebang-regex/3.0.0: /shebang-regex/3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false
/shiki/0.11.1: /shiki/0.11.1:
resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==} resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==}
@ -3150,7 +3141,6 @@ packages:
/source-map-js/1.0.2: /source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/source-map/0.6.1: /source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
@ -3249,7 +3239,6 @@ packages:
resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==}
dependencies: dependencies:
s.color: 0.0.15 s.color: 0.0.15
dev: false
/supports-color/5.5.0: /supports-color/5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
@ -3274,7 +3263,6 @@ packages:
/supports-preserve-symlinks-flag/1.0.0: /supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dev: false
/synckit/0.8.4: /synckit/0.8.4:
resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==} resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==}
@ -3282,7 +3270,6 @@ packages:
dependencies: dependencies:
'@pkgr/utils': 2.3.1 '@pkgr/utils': 2.3.1
tslib: 2.4.1 tslib: 2.4.1
dev: false
/tailwindcss/3.2.4: /tailwindcss/3.2.4:
resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
@ -3314,14 +3301,12 @@ packages:
resolve: 1.22.1 resolve: 1.22.1
transitivePeerDependencies: transitivePeerDependencies:
- ts-node - ts-node
dev: false
/tiny-glob/0.2.9: /tiny-glob/0.2.9:
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
dependencies: dependencies:
globalyzer: 0.1.0 globalyzer: 0.1.0
globrex: 0.1.2 globrex: 0.1.2
dev: false
/to-fast-properties/2.0.0: /to-fast-properties/2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
@ -3333,7 +3318,6 @@ packages:
engines: {node: '>=8.0'} engines: {node: '>=8.0'}
dependencies: dependencies:
is-number: 7.0.0 is-number: 7.0.0
dev: false
/totalist/3.0.0: /totalist/3.0.0:
resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
@ -3361,7 +3345,6 @@ packages:
/tslib/2.4.1: /tslib/2.4.1:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
dev: false
/tsm/2.3.0: /tsm/2.3.0:
resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==} resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==}
@ -3489,7 +3472,6 @@ packages:
/util-deprecate/1.0.2: /util-deprecate/1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: false
/uvu/0.5.6: /uvu/0.5.6:
resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
@ -3664,7 +3646,6 @@ packages:
hasBin: true hasBin: true
dependencies: dependencies:
isexe: 2.0.0 isexe: 2.0.0
dev: false
/widest-line/4.0.1: /widest-line/4.0.1:
resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
@ -3685,7 +3666,6 @@ packages:
/xtend/4.0.2: /xtend/4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'} engines: {node: '>=0.4'}
dev: false
/yallist/3.1.1: /yallist/3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@ -3698,7 +3678,6 @@ packages:
/yaml/1.10.2: /yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
dev: false
/yargs-parser/21.1.1: /yargs-parser/21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}

File diff suppressed because it is too large Load Diff

@ -5399,6 +5399,118 @@
} }
} }
}, },
{
"ID": "1330",
"typeID": "__group__",
"zOrder": "145",
"measuredW": "158",
"measuredH": "44",
"w": "158",
"h": "44",
"x": "1215",
"y": "773",
"properties": {
"controlName": "101-blockchain-general-knowledge:blockchains:ton"
},
"children": {
"controls": {
"control": [
{
"ID": "0",
"typeID": "TextArea",
"zOrder": "0",
"w": "147",
"h": "44",
"measuredW": "200",
"measuredH": "140",
"x": "0",
"y": "0",
"properties": {
"color": "16770457"
}
},
{
"ID": "1",
"typeID": "Label",
"zOrder": "1",
"measuredW": "117",
"measuredH": "25",
"x": "56",
"y": "9",
"properties": {
"size": "17",
"text": "TON"
}
},
{
"ID": "2",
"typeID": "__group__",
"zOrder": "2",
"measuredW": "24",
"measuredH": "24",
"w": "24",
"h": "24",
"x": "134",
"y": "9",
"children": {
"controls": {
"control": [
{
"ID": "0",
"typeID": "Icon",
"zOrder": "0",
"measuredW": "24",
"measuredH": "24",
"x": "0",
"y": "0",
"properties": {
"color": "16777215",
"icon": {
"ID": "circle",
"size": "small"
}
}
},
{
"ID": "1",
"typeID": "Icon",
"zOrder": "1",
"measuredW": "24",
"measuredH": "24",
"x": "0",
"y": "0",
"properties": {
"color": "16777215",
"icon": {
"ID": "circle",
"size": "small"
}
}
},
{
"ID": "2",
"typeID": "Icon",
"zOrder": "2",
"measuredW": "24",
"measuredH": "24",
"x": "0",
"y": "0",
"properties": {
"color": "3700253",
"icon": {
"ID": "check-circle",
"size": "small"
}
}
}
]
}
}
}
]
}
}
},
{ {
"ID": "1331", "ID": "1331",
"typeID": "__group__", "typeID": "__group__",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 KiB

@ -1,2 +0,0 @@
#!/usr/bin/env bash

@ -6,7 +6,7 @@ import { getTopicPathMapping, TopicFileType } from "../lib/roadmap";
export async function getStaticPaths() { export async function getStaticPaths() {
const topicPathMapping = await getTopicPathMapping(); const topicPathMapping = await getTopicPathMapping();
console.log(topicPathMapping); // console.log(topicPathMapping);
return Object.keys(topicPathMapping).map((topicSlug) => ({ return Object.keys(topicPathMapping).map((topicSlug) => ({
params: { topicId: topicSlug }, params: { topicId: topicSlug },

@ -43,7 +43,7 @@ There are multiple ways to develop applications for the android; you can go down
Here is the full version of the roadmap in a single image and after that we have the broken down version with the resources and links to learn more about each of the boxes. Here is the full version of the roadmap in a single image and after that we have the broken down version with the resources and links to learn more about each of the boxes.
<img alt='Android Developer Roadmap' style='--aspect-ratio:1076px/1243px' src="/assets/roadmaps/android/roadmap.png" fetchpriority="high" /> [![](/assets/roadmaps/android/roadmap.svg)](/assets/roadmaps/android/roadmap.png)
## Broken Down Version ## Broken Down Version
Below is the broken down version of the roadmap with links and resources to learn more about each of the items listed in the complete roadmap above. Below is the broken down version of the roadmap with links and resources to learn more about each of the items listed in the complete roadmap above.
@ -51,14 +51,14 @@ Below is the broken down version of the roadmap with links and resources to lear
## Pick a Language ## Pick a Language
For the languages, you can develop android apps either by using Kotlin or Java. For the languages, you can develop android apps either by using Kotlin or Java.
[![Pick a Language](/assets/roadmaps/android/pick-language.svg)](/assets/roadmaps/android/pick-language.svg) [![](/assets/roadmaps/android/pick-language.svg)](/assets/roadmaps/android/pick-language.svg)
Although, you can use both [Kotlin](https://en.wikipedia.org/wiki/Kotlin_(programming_language)) and [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) to develop native android apps, [Google announced in 2019](https://android-developers.googleblog.com/2019/05/google-io-2019-empowering-developers-to-build-experiences-on-Android-Play.html) to make Kotlin the preferred way of developing android applications. If you were to start learning android development today, Kotlin should be your language of choice. Although, you can use both [Kotlin](https://en.wikipedia.org/wiki/Kotlin_(programming_language)) and [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) to develop native android apps, [Google announced in 2019](https://android-developers.googleblog.com/2019/05/google-io-2019-empowering-developers-to-build-experiences-on-Android-Play.html) to make Kotlin the preferred way of developing android applications. If you were to start learning android development today, Kotlin should be your language of choice.
## The Fundamentals ## The Fundamentals
Install the [Android Studio](https://developer.android.com/studio) and learn the basics of Kotlin to get started. Install the [Android Studio](https://developer.android.com/studio) and learn the basics of Kotlin to get started.
[![Android Fundamentals](/assets/roadmaps/android/the-fundamentals.png)](/assets/roadmaps/android/the-fundamentals.png) [![](/assets/roadmaps/android/the-fundamentals.png)](/assets/roadmaps/android/the-fundamentals.png)
We have also listed down some free resources which you can use for the items listed in the image above. If you have some better ones, please do suggest. Also, you don't need to go through all of them, just go through them and pick what you like. We have also listed down some free resources which you can use for the items listed in the image above. If you have some better ones, please do suggest. Also, you don't need to go through all of them, just go through them and pick what you like.
@ -74,7 +74,7 @@ Note: Android Studio comes with a working installation of Gradle, so you don’t
## Version Control Systems ## Version Control Systems
Version control systems record your changes to the codebase and allow you to recall specific versions later. There are multiple Version Control Systems available but [Git](https://git-scm.com/) is the most common one these days. Version control systems record your changes to the codebase and allow you to recall specific versions later. There are multiple Version Control Systems available but [Git](https://git-scm.com/) is the most common one these days.
[![Version Control Systems](/assets/roadmaps/android/git-github.png)](/assets/roadmaps/android/git-github.png) [![](/assets/roadmaps/android/git-github.png)](/assets/roadmaps/android/git-github.png)
Here are some of the resources to get you started. Feel free to google and find something else that you find easier. Here are some of the resources to get you started. Feel free to google and find something else that you find easier.
@ -85,7 +85,7 @@ Here are some of the resources to get you started. Feel free to google and find
Here is the list of items that you are going to need when developing Android applications. Please note that, this is an exhaustive list, and you don't need to know it all from the get-go. Get an idea of the items listed, and just start building some apps and keep the items listed in the back of your mind and have a deep dive when using them. Here is the list of items that you are going to need when developing Android applications. Please note that, this is an exhaustive list, and you don't need to know it all from the get-go. Get an idea of the items listed, and just start building some apps and keep the items listed in the back of your mind and have a deep dive when using them.
[![Building an Application](/assets/roadmaps/android/build-an-application.png)](/assets/roadmaps/android/build-an-application.png) [![](/assets/roadmaps/android/build-an-application.png)](/assets/roadmaps/android/build-an-application.png)
To learn more about the items listed in the image above, here are the links to the relevant docs To learn more about the items listed in the image above, here are the links to the relevant docs
@ -125,3 +125,6 @@ I would highly recommend watching [this free course](https://www.udacity.com/cou
That wraps it up for the android developer roadmap. Again, remember to not be exhausted by the list; just learn the basics and start working on some project, rest of the learnings will come along the way. Good luck! That wraps it up for the android developer roadmap. Again, remember to not be exhausted by the list; just learn the basics and start working on some project, rest of the learnings will come along the way. Good luck!
For any suggestions, improvements and feedback, feel free to [submit an issue](https://github.com/kamranahmedse/developer-roadmap) or reach out to me on twitter [@kamranahmedse](https://twitter.com/kamranahmedse). For any suggestions, improvements and feedback, feel free to [submit an issue](https://github.com/kamranahmedse/developer-roadmap) or reach out to me on twitter [@kamranahmedse](https://twitter.com/kamranahmedse).
<!-- @fixme add padding to the container -->
<br /><br /><br />

@ -1,5 +1,4 @@
--- ---
jsonUrl: "/jsons/angular.json"
pdfUrl: "/pdfs/angular.pdf" pdfUrl: "/pdfs/angular.pdf"
order: 3 order: 3
featuredTitle: "Angular" featuredTitle: "Angular"

@ -2,9 +2,8 @@
TypeScript is a strongly typed, object-oriented, compiled programming language that builds on JavaScript. It is a superset of the JavaScript language, designed to give you better tooling at any scale. TypeScript calls itself “JavaScript with syntax for types.” In short, it is JavaScript with some additional features. The secret to the success of TypeScript is in the type checking, ensuring that the data flowing through the program is of the correct kind of data. TypeScript is a strongly typed, object-oriented, compiled programming language that builds on JavaScript. It is a superset of the JavaScript language, designed to give you better tooling at any scale. TypeScript calls itself “JavaScript with syntax for types.” In short, it is JavaScript with some additional features. The secret to the success of TypeScript is in the type checking, ensuring that the data flowing through the program is of the correct kind of data.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://thenewstack.io/what-is-typescript/", "What is TypeScript" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://thenewstack.io/what-is-typescript/'>What is TypeScript</BadgeLink>
{% Blog "https://www.w3schools.com/typescript/", "W3Schools – TypeScript Tutorial" %} <BadgeLink badgeText='Read' colorScheme="yellow" href='https://www.w3schools.com/typescript/'>W3Schools – TypeScript Tutorial</BadgeLink>
{% Blog "https://www.tutorialspoint.com/typescript/index.htm", "Tutorials point – TypeScript Tutorial" %} <BadgeLink badgeText='Read' colorScheme="yellow" href='https://www.tutorialspoint.com/typescript/index.htm'>Tutorials point – TypeScript Tutorial</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=d56mG7DezGs", "TypeScript Crash Course for Beginners" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=d56mG7DezGs'>TypeScript Crash Course for Beginners</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
TypeScript extends JavaScript, providing a better developer experience. The benefits of using TypeScript over JavaScript include.Static typing – TypeScript comes with optional static typing and a type inference system, which means that a variable declared with no type may be inferred by TypeScript based on its value. Object-oriented programming – TypeScript supports object-oriented programming concepts like classes, inheritance, etc. Compile time checks – JavaScript is an interpreted programming language. There is no compilation involved. Hence, the errors get caught during the runtime. Since TypeScript compiles into JavaScript, errors get reported during the compile time rather than the runtime. Code editor support – IDEs or code editors like VS Code support autocomplete for a TypeScript codebase. They also provide inline documentation and highlight the errors. Use existing packages – You might want to use an npm package written in JavaScript. Since TypeScript is a superset of JavaScript, you can import and use that package. Moreover, the TypeScript community creates and maintains type definitions for popular packages that can be utilized in your project. TypeScript extends JavaScript, providing a better developer experience. The benefits of using TypeScript over JavaScript include.Static typing – TypeScript comes with optional static typing and a type inference system, which means that a variable declared with no type may be inferred by TypeScript based on its value. Object-oriented programming – TypeScript supports object-oriented programming concepts like classes, inheritance, etc. Compile time checks – JavaScript is an interpreted programming language. There is no compilation involved. Hence, the errors get caught during the runtime. Since TypeScript compiles into JavaScript, errors get reported during the compile time rather than the runtime. Code editor support – IDEs or code editors like VS Code support autocomplete for a TypeScript codebase. They also provide inline documentation and highlight the errors. Use existing packages – You might want to use an npm package written in JavaScript. Since TypeScript is a superset of JavaScript, you can import and use that package. Moreover, the TypeScript community creates and maintains type definitions for popular packages that can be utilized in your project.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://linguinecode.com/post/5-reasons-why-to-use-typescript", "linguinecode - Reasons to use TypeScript" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://linguinecode.com/post/5-reasons-why-to-use-typescript'>linguinecode - Reasons to use TypeScript</BadgeLink>
{% Blog "https://www.codemotion.com/magazine/backend/why-you-should-use-typescript-for-your-next-project/", "Codemotion - Reasons to use TypeScript" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.codemotion.com/magazine/backend/why-you-should-use-typescript-for-your-next-project/'>Codemotion - Reasons to use TypeScript</BadgeLink>
{% endresources %}

@ -4,9 +4,8 @@ Type compatibility in TypeScript is based on structural subtyping. `Structural t
TypeScript’s structural type system was designed based on how JavaScript code is typically written. Because JavaScript widely uses anonymous objects like function expressions and object literals, it’s much more natural to represent the relationships found in JavaScript libraries with a structural type system instead of a nominal one. TypeScript’s structural type system was designed based on how JavaScript code is typically written. Because JavaScript widely uses anonymous objects like function expressions and object literals, it’s much more natural to represent the relationships found in JavaScript libraries with a structural type system instead of a nominal one.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://medium.com/redox-techblog/structural-typing-in-typescript-4b89f21d6004", "Structural typings — Medium" %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://medium.com/redox-techblog/structural-typing-in-typescript-4b89f21d6004'>Structural typings — Medium</BadgeLink>
{% Blog "https://www.typescriptlang.org/docs/handbook/type-compatibility.html", "Structural typings — Typescriptlang" %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.typescriptlang.org/docs/handbook/type-compatibility.html'>Structural typings — Typescriptlang</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=kWtwsX_rT3k", "Structural typing video for Beginners" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=kWtwsX_rT3k'>Structural typing video for Beginners</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
In TypeScript, several places where `type inference` is used to provide type information when there is no explicit type annotation. The type of the x variable is inferred to be a number. This inference occurs when variables and members are initialized, set parameter default values are, and determine function return types. For example, `let x: number`. In most cases, type inference is straightforward. In the following sections, we’ll explore some nuances in how types are inferred. For example, `let x: (number | null)[]` In TypeScript, several places where `type inference` is used to provide type information when there is no explicit type annotation. The type of the x variable is inferred to be a number. This inference occurs when variables and members are initialized, set parameter default values are, and determine function return types. For example, `let x: number`. In most cases, type inference is straightforward. In the following sections, we’ll explore some nuances in how types are inferred. For example, `let x: (number | null)[]`
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://www.typescriptlang.org/docs/handbook/type-inference.html", "Type Interface - typescriptlang" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.typescriptlang.org/docs/handbook/type-inference.html'>Type Interface - typescriptlang</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=3ui_st7rtfA", "Type Inference video for Beginners" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=3ui_st7rtfA'>Type Inference video for Beginners</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
In TypeScript, we can define a variable that can have multiple types of values. In other words, TypeScript can combine one or two types of data (i.e., number, string, etc.) in a single type, a union type. Union types are a powerful way to express a variable with multiple types. Two or more data types can be combined using the pipe ('|') symbol between the types. For example, `(type1 | type2 | type3 | .. | typeN)`. In TypeScript, we can define a variable that can have multiple types of values. In other words, TypeScript can combine one or two types of data (i.e., number, string, etc.) in a single type, a union type. Union types are a powerful way to express a variable with multiple types. Two or more data types can be combined using the pipe ('|') symbol between the types. For example, `(type1 | type2 | type3 | .. | typeN)`.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html", "Union Types - typescriptlang" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html'>Union Types - typescriptlang</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=uxjpm4W5pCo", "Union Type video for Beginners" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=uxjpm4W5pCo'>Union Type video for Beginners</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
The Builtin types represent the different types of values supported by the language. The builtin types check the validity of the supplied values before they are stored or manipulated by the program. This ensures that the code behaves as expected. The Builtin types further allow for richer code hinting and automated documentation too. The Builtin types represent the different types of values supported by the language. The builtin types check the validity of the supplied values before they are stored or manipulated by the program. This ensures that the code behaves as expected. The Builtin types further allow for richer code hinting and automated documentation too.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://www.tutorialspoint.com/typescript/typescript_types.htm", "TypeScript Types - Tutorialspoint" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://www.tutorialspoint.com/typescript/typescript_types.htm'>TypeScript Types - Tutorialspoint</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=Nt9ajBrqV_M", "Builtin Type video for Beginners" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=Nt9ajBrqV_M'>Builtin Type video for Beginners</BadgeLink>
{% endresources %}

@ -6,6 +6,5 @@ TypeScript uses built-in JavaScript operators like `typeof`, `instanceof`, and t
Type guards are typically used for narrowing a type and are pretty similar to feature detection, allowing you to detect the correct methods, prototypes, and properties of a value. Therefore, you can quickly figure out how to handle that value. Type guards are typically used for narrowing a type and are pretty similar to feature detection, allowing you to detect the correct methods, prototypes, and properties of a value. Therefore, you can quickly figure out how to handle that value.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://blog.logrocket.com/how-to-use-type-guards-typescript/", "Types Guards - Blog" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://blog.logrocket.com/how-to-use-type-guards-typescript/'>Types Guards - Blog</BadgeLink>
{% endresources %}

@ -2,7 +2,5 @@
In order to enter into the world of Angular application development, typescript is necessary and it is the primary language here. Typescript is a superset of JavaScript. It comes with design-time support which is useful for type safety and tooling. Since, browsers cannot execute the TypeScript directly, it will be 'Transpiled' into JavaScript using the tsc compiler. In order to enter into the world of Angular application development, typescript is necessary and it is the primary language here. Typescript is a superset of JavaScript. It comes with design-time support which is useful for type safety and tooling. Since, browsers cannot execute the TypeScript directly, it will be 'Transpiled' into JavaScript using the tsc compiler.
{% resources %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://medium.com/jspoint/typescript-a-beginners-guide-6956fe8bcf9e'>Typescript a Beginners Guide</BadgeLink>
{% Blog "https://medium.com/jspoint/typescript-a-beginners-guide-6956fe8bcf9e", "Typescript a Beginners Guide" %} <BadgeLink colorScheme='green' badgeText='Visit' href='https://www.typescriptlang.org/play'>TypeScript Playground</BadgeLink>
{% Blog "https://www.typescriptlang.org/play", "TypeScript Playground" %}
{% endresources %}

@ -4,6 +4,5 @@ The observer pattern is a software design pattern in which an object, named the
Angular uses the Observer pattern which simply means — Observable objects are registered, and other objects observe (in Angular using the subscribe method) them and take action when the observable object is acted on in some way. Angular uses the Observer pattern which simply means — Observable objects are registered, and other objects observe (in Angular using the subscribe method) them and take action when the observable object is acted on in some way.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Blog "https://medium.com/fuzzycloud/angular-and-observable-4bf890b2a282", "Angular and Observable" %} <BadgeLink badgeText='Read' colorScheme='yellow' href='https://medium.com/fuzzycloud/angular-and-observable-4bf890b2a282'>Angular and Observable</BadgeLink>
{% endresources %}

@ -8,6 +8,5 @@ There are 4 stages for a life cycle of an observable.
- Execution - Execution
- Destruction - Destruction
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://medium.com/analytics-vidhya/understanding-rxjs-observables-ad5b34d9607f", "Understanding Observable LifeCycle" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://medium.com/analytics-vidhya/understanding-rxjs-observables-ad5b34d9607f'>Understanding Observable LifeCycle</BadgeLink>
{% endresources %}

@ -1 +1,8 @@
# Marble diagrams # Marble Diagrams
Marble testing allows you to test asynchronous RxJS code synchronously and step-by-step with the help of RxJS TestScheduler test utility and using virtual time steps.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.altamira.ai/blog/angular-marble-testing-a-brief-introduction/'>Angular Marble Testing: A Brief Introduction</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://medium.com/@jshvarts/read-marble-diagrams-like-a-pro-3d72934d3ef5'>IUnderstanding Marble Diagrams for Reactive Streams</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://rxmarbles.com/#from'>Interactive Diagrams</BadgeLink>

@ -1 +1,11 @@
# Rxjs vs promises # RxJS vs Promises
In a nutshell, the main differences between the Promise and the Observable are as follows:
- The Promise is eager, whereas the Observable is lazy,
- The Promise is always asynchronous, while the Observable can be either asynchronous or synchronous,
- The Promise can provide a single value, whereas the Observable is a stream of values (from 0 to multiple values),
you can apply RxJS operators to the Observable to get a new tailored stream.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://javascript.plainenglish.io/why-rxjs-rxjs-vs-promises-b28962771d68'>Why RxJS? RxJS vs Promises</BadgeLink>

@ -31,8 +31,12 @@ import { interval } from 'rxjs';
const observable = interval(1000 /* number of milliseconds */); const observable = interval(1000 /* number of milliseconds */);
``` ```
{% resources %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://rxjs.dev/guide/operators#creation-operators-list'>List of creation operators</BadgeLink>
{% Official "https://rxjs.dev/guide/operators#creation-operators-list", "List of creation operators" %}
{% Official "https://rxjs.dev/guide/operators", "Full RxJS Operators Documentation" %}
{% endresources %} ## Higher-order Observables
Observables most commonly emit ordinary values like strings and numbers, but surprisingly often, it is necessary to handle Observables of Observables, so-called higher-order Observables.
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://rxjs.dev/guide/operators'>Full RxJS Operators Documentation</BadgeLink>

@ -2,7 +2,6 @@
AngularJS was the older version of Angular, whose support officially ended in January 2022. Angular is a component-based front-end development framework built on TypeScript, which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more. AngularJS was the older version of Angular, whose support officially ended in January 2022. Angular is a component-based front-end development framework built on TypeScript, which includes a collection of well-integrated libraries that include features like routing, forms management, client-server communication, and more.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angularjs.org/", "AngularJS Website" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angularjs.org/'>AngularJS Website</BadgeLink>
{% Official "https://angular.io/start", "Official - Getting started with Angular" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/start'>Official - Getting started with Angular</BadgeLink>
{% endresources %}

@ -7,7 +7,6 @@ Components are the main building block for Angular applications. Each component
* A CSS selector that defines how the component is used in a template * A CSS selector that defines how the component is used in a template
* Optionally, CSS styles applied to the template * Optionally, CSS styles applied to the template
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/component-overview", "Angular Components Overview" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/component-overview'>Angular Components Overview</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=x5PZwb4XurU", "Standalone Components in Angular" %} <BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=x5PZwb4XurU'>Standalone Components in Angular</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
A Template is a form of HTML which tells Angular to go towards another component. To create many Angular features, special syntax within the templates is used. A Template is a form of HTML which tells Angular to go towards another component. To create many Angular features, special syntax within the templates is used.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/template-overview", "Understanding Templates" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/template-overview'>Understanding Templates</BadgeLink>
{% Official "https://angular.io/guide/template-syntax", "Template Syntax" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/template-syntax'>Template Syntax</BadgeLink>
{% endresources %}

@ -2,6 +2,5 @@
Modules in Angular act like a container where we can group the components, directives, pipes, and services, related to the application. Modules in Angular act like a container where we can group the components, directives, pipes, and services, related to the application.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/architecture-modules", "Introduction to Modules" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/architecture-modules'>Introduction to Modules</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
Dependency Injection is one of the fundamental concepts in Angular. DI is wired into the Angular framework and allows classes with Angular decorators, such as Components, Directives, Pipes, and Injectables, to configure dependencies that they need. Dependency Injection is one of the fundamental concepts in Angular. DI is wired into the Angular framework and allows classes with Angular decorators, such as Components, Directives, Pipes, and Injectables, to configure dependencies that they need.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/dependency-injection", "Understanding Dependency Injection" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/dependency-injection'>Understanding Dependency Injection</BadgeLink>
{% Official "https://angular.io/guide/dependency-injection-in-action", "Dependency Injection in Action" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/dependency-injection-in-action'>Dependency Injection in Action</BadgeLink>
{% endresources %}

@ -2,9 +2,8 @@
Services let you define code or functionalities that are then accessible and reusable in many other components in the Angular project. It also helps you with the abstraction of logic and data that is hosted independently but can be shared across other components. Services let you define code or functionalities that are then accessible and reusable in many other components in the Angular project. It also helps you with the abstraction of logic and data that is hosted independently but can be shared across other components.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/tutorial/toh-pt4", "Services" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/tutorial/toh-pt4'>Services</BadgeLink>
{% Blog "https://www.javatpoint.com/what-is-an-angular-service", "What is an Angular Service" %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.javatpoint.com/what-is-an-angular-service'>What is an Angular Service</BadgeLink>
{% Blog "https://www.knowledgehut.com/blog/web-development/make-api-calls-angular", "Service for API Calls" %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.knowledgehut.com/blog/web-development/make-api-calls-angular'>Service for API Calls</BadgeLink>
{% Blog "https://www.positronx.io/angular-service-tutorial-with-example/", "Service Tutorial with Example" %} <BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.positronx.io/angular-service-tutorial-with-example/'>Service Tutorial with Example</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
Routing in Angular allows the users to create a single-page application with multiple views and allows navigation between them. Routing in Angular allows the users to create a single-page application with multiple views and allows navigation between them.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/routing-overview", "Angular Routing" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/routing-overview'>Angular Routing</BadgeLink>
{% Official "https://angular.io/guide/router", "Common Routing Tasks" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/router'>Common Routing Tasks</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
The command can be used to build a project of type "application" or "library". When used to build a library, a different builder is invoked, and only the ts-config, configuration, and watch options are applied. All other options apply only to building applications. The command can be used to build a project of type "application" or "library". When used to build a library, a different builder is invoked, and only the ts-config, configuration, and watch options are applied. All other options apply only to building applications.
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/build", "Ng Build - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/build'>Ng Build - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=VB6WuCPDwz0", "Building an Angular project" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=VB6WuCPDwz0'>Building an Angular project</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
ng serve — This command builds, deploy, serves and every time watches your code changes. if find any change in code it builds and serves that code automatically. How do Angular builds? After coding our Angular apps using TypeScript, we use the Angular CLI command to build the app. ng serve — This command builds, deploy, serves and every time watches your code changes. if find any change in code it builds and serves that code automatically. How do Angular builds? After coding our Angular apps using TypeScript, we use the Angular CLI command to build the app.
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/serve", "Ng serve - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/serve'>Ng serve - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=-w-RfHcLt5U", "Running a project with ng serve" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=-w-RfHcLt5U'>Running a project with ng serve</BadgeLink>
{% endresources %}

@ -3,7 +3,6 @@
ng generate is used to create the component in angular project. These are the two main ways to generate a new component in Angular: using ng g c <component_name>, and using ng generate component <component_name>. Using either of these two commands, the new component can be generated pretty easily and followed by the suitable component name of your choice. ng generate is used to create the component in angular project. These are the two main ways to generate a new component in Angular: using ng g c <component_name>, and using ng generate component <component_name>. Using either of these two commands, the new component can be generated pretty easily and followed by the suitable component name of your choice.
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/generate", "Ng generate - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/generate'>Ng generate - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=NlHlu_zzmo4", "Angular cli generate component" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=NlHlu_zzmo4'>Angular cli generate component</BadgeLink>
{% endresources %}

@ -5,7 +5,6 @@ ng test is used to runs unit tests in angular project.
`ng test <project> [options]` | `ng t <project> [options]` `ng test <project> [options]` | `ng t <project> [options]`
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/test", "Ng test - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/test'>Ng test - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=n1O_eRwzRKA", "Angular Ng test commands" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=n1O_eRwzRKA'>Angular Ng test commands</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
End-to-end testing (E2E) of Angular applications is performed using the Protractor testing framework, which is created by the Angular team themselves. Protractor can perform end to end tests on Angular applications that are running in a real browser by interacting with it, similar to that of an end-user. End-to-end testing (E2E) of Angular applications is performed using the Protractor testing framework, which is created by the Angular team themselves. Protractor can perform end to end tests on Angular applications that are running in a real browser by interacting with it, similar to that of an end-user.
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/e2e", "Ng e2e - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/e2e'>Ng e2e - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=3vFnhzEGfew", "Angular cli generate component" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=3vFnhzEGfew'>Angular cli generate component</BadgeLink>
{% endresources %}

@ -6,7 +6,6 @@ That’s the default usage of the command and creating a new project folder with
The default Angular project, All dependencies installed in node_modules folder , Testing files for each components The default Angular project, All dependencies installed in node_modules folder , Testing files for each components
{% resources %} <ResourceGroupTitle>Free Resources</ResourceGroupTitle>
{% Official "https://angular.io/cli/new", "Ng New - Angular.io" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli/new'>Ng New - Angular.io</BadgeLink>
{% Blog "https://www.youtube.com/watch?v=NdEpZezptkQ", "ng New command" %} <BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=NdEpZezptkQ'>ng New command</BadgeLink>
{% endresources %}

@ -2,7 +2,6 @@
A schematic is a template-based code generator that supports complex logic. It is a set of instructions for transforming a software project by generating or modifying code. A schematic is a template-based code generator that supports complex logic. It is a set of instructions for transforming a software project by generating or modifying code.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/schematics#:~:text=A%20schematic%20is%20a%20template,collections%20and%20installed%20with%20npm.", "Angular Website" %} <BadgeLink colorScheme='yellow' badgeText='Official Website' href='https://angular.io/guide/schematics#:~:text=A%20schematic%20is%20a%20template,collections%20and%20installed%20with%20npm.'>Angular Website</BadgeLink>
{% Official "https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2?gi=ad9571373944", "Angular Blog" %} <BadgeLink colorScheme='yellow' badgeText='Official Website' href='https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2?gi=ad9571373944'>Angular Blog</BadgeLink>
{% endresources %}

@ -1,10 +0,0 @@
# Angular CLI
The Angular CLI is a command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications directly from a command shell. we can install angular latest CLI using the following command
`npm install -g @angular/cli`
{% resources %}
{% Official "https://angular.io/cli", "Angular CLI - Angular.io" %}
{% Blog "https://www.youtube.com/watch?v=mZnzX3J5XKI", "Angular CLI - setup" %}
{% endresources %}

@ -0,0 +1,9 @@
# Angular CLI
The Angular CLI is a command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications directly from a command shell. we can install angular latest CLI using the following command
`npm install -g @angular/cli`
<ResourceGroupTitle>Free Resources</ResourceGroupTitle>
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/cli'>Angular CLI - Angular.io</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='watch' href='https://www.youtube.com/watch?v=mZnzX3J5XKI'>Angular CLI - setup</BadgeLink>

@ -2,6 +2,5 @@
Interpolation refers to embedding expressions into marked up text. By default, interpolation uses the double curly braces {{ and }} as delimiters. Angular replaces currentCustomer with the string value of the corresponding component property. Interpolation refers to embedding expressions into marked up text. By default, interpolation uses the double curly braces {{ and }} as delimiters. Angular replaces currentCustomer with the string value of the corresponding component property.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "ttps://angular.io/guide/interpolation", "Angular Official Website" %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='ttps://angular.io/guide/interpolation'>Angular Official Website</BadgeLink>
{% endresources %}

@ -2,6 +2,6 @@
Property binding helps you set values for properties of HTML elements or directives. To bind to an element's property, enclose it in square brackets `[]` which causes Angular to evaluate the right-hand side of the assignment as a dynamic expression. Property binding helps you set values for properties of HTML elements or directives. To bind to an element's property, enclose it in square brackets `[]` which causes Angular to evaluate the right-hand side of the assignment as a dynamic expression.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/property-binding", "Angular Official Website" %}
{% endresources %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/property-binding'>Angular Official Website</BadgeLink>

@ -2,6 +2,6 @@
Template statements are methods or properties that you can use in your HTML to respond to user events. With template statements, your application can engage users through actions such as displaying dynamic content or submitting forms. Enclose the event in `()` which causes Angular to evaluate the right hand side of the assignment as one or more template statements chained together using semicolon `;`. Template statements are methods or properties that you can use in your HTML to respond to user events. With template statements, your application can engage users through actions such as displaying dynamic content or submitting forms. Enclose the event in `()` which causes Angular to evaluate the right hand side of the assignment as one or more template statements chained together using semicolon `;`.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/template-statements", "Angular Official Website" %}
{% endresources %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/template-statements'>Angular Official Website</BadgeLink>

@ -7,6 +7,6 @@ In an Angular template, a binding creates a live connection between view and the
- **event**: lets you listen for and respond to user actions such as keystrokes, mouse movements, clicks, and touches. - **event**: lets you listen for and respond to user actions such as keystrokes, mouse movements, clicks, and touches.
- **data**: It's a combination of property and event binding and helps you share data between components. - **data**: It's a combination of property and event binding and helps you share data between components.
{% resources %} <ResourceGroupTitle>Free Content</ResourceGroupTitle>
{% Official "https://angular.io/guide/binding-overview", "Angular Official Website" %}
{% endresources %} <BadgeLink colorScheme='blue' badgeText='Official Website' href='https://angular.io/guide/binding-overview'>Angular Official Website</BadgeLink>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save