From fda6c4b82745b0af2b0bdb2bb4d0d55c173db148 Mon Sep 17 00:00:00 2001 From: Luccas Mateus de Medeiros Gomes Date: Mon, 10 Apr 2023 22:22:34 -0300 Subject: [PATCH] [monorepo][lg] - start of monorepo --- .babelrc | 7 - .editorconfig | 13 + .eslintignore | 1 + .eslintrc.json | 35 + .../workflows/examples-catalog-cypress.yml | 17 - .github/workflows/examples-catalog-test.yml | 30 - .github/workflows/main.yml | 39 - .gitignore | 58 +- .prettierignore | 3 + .prettierrc | 3 + .vscode/extensions.json | 8 + DESIGN.md | 83 - README.md | 831 +- SECURITY.md | 5 - apps/.gitkeep | 0 apps/data-literate-e2e/.eslintrc.json | 10 + apps/data-literate-e2e/cypress.config.ts | 6 + apps/data-literate-e2e/project.json | 30 + apps/data-literate-e2e/src/e2e/app.cy.ts | 13 + .../src/fixtures/example.json | 4 + apps/data-literate-e2e/src/support/app.po.ts | 1 + .../data-literate-e2e/src/support/commands.ts | 14 +- .../data-literate-e2e/src/support/e2e.ts | 3 - apps/data-literate-e2e/tsconfig.json | 10 + apps/data-literate/.eslintrc.json | 34 + {examples => apps}/data-literate/README.md | 0 .../data-literate/components/DataLiterate.js | 0 .../data-literate/components/Excel.js | 0 .../data-literate/components/Layout.js | 0 .../data-literate/components/LineChart.js | 0 .../data-literate/components/Table.js | 0 .../data-literate/components/TableGrid.js | 2 +- .../data-literate/content/demo.mdx | 0 .../data-literate/datahub-portal-local-cli.js | 0 apps/data-literate/index.d.ts | 6 + apps/data-literate/jest.config.ts | 11 + .../data-literate/lib/markdown.js | 0 {site => apps/data-literate}/lib/mdxUtils.js | 2 +- .../ckan => apps/data-literate}/next-env.d.ts | 1 - apps/data-literate/next.config.js | 17 + .../data-literate/pages/[...slug].js | 0 .../data-literate/pages/_app.js | 0 .../data-literate/pages/api/proxy.js | 0 apps/data-literate/postcss.config.js | 15 + apps/data-literate/project.json | 69 + apps/data-literate/public/.gitkeep | 0 ....analysis.summary_series.global.annual.csv | 0 ...e-suprasecular-decline-1311-2018-data.xlsx | Bin .../data-literate/public/datopian-logo.png | Bin .../data-literate/public/favicon.ico | Bin apps/data-literate/specs/index.spec.tsx | 11 + .../data-literate/styles/globals.css | 0 .../data-literate/styles/tailwind.css | 0 apps/data-literate/tailwind.config.js | 17 + apps/data-literate/tsconfig.json | 23 + apps/data-literate/tsconfig.spec.json | 21 + apps/site-e2e/.eslintrc.json | 10 + apps/site-e2e/cypress.config.ts | 6 + apps/site-e2e/project.json | 30 + apps/site-e2e/src/e2e/app.cy.ts | 13 + apps/site-e2e/src/fixtures/example.json | 4 + apps/site-e2e/src/support/app.po.ts | 1 + apps/site-e2e/src/support/commands.ts | 33 + apps/site-e2e/src/support/e2e.ts | 17 + apps/site-e2e/tsconfig.json | 10 + apps/site/.eslintrc.json | 31 + {site => apps/site}/components/CustomLink.js | 0 .../site}/components/DataLiterate.js | 0 {site => apps/site}/components/Excel.js | 2 +- .../site}/components/ExcelViewerApp.js | 0 {site => apps/site}/components/Layout.js | 0 {site => apps/site}/components/LineChart.js | 0 {site => apps/site}/components/Nav.js | 17 +- {site => apps/site}/components/Table.js | 0 {site => apps/site}/content/data-literate.md | 0 .../site}/content/data-literate/demo.mdx | 0 {site => apps/site}/content/docs.md | 0 .../site}/content/docs/components.md | 6 +- .../site}/content/docs/references.md | 0 {site => apps/site}/content/gallery.md | 0 {site => apps/site}/content/learn.md | 0 {site => apps/site}/content/learn/ckan.md | 0 .../site}/content/learn/deploy-to-gh-pages.md | 0 .../learn/single-frictionless-dataset.md | 0 apps/site/index.d.ts | 6 + apps/site/jest.config.ts | 11 + {site => apps/site}/lib/markdown.js | 0 .../site}/lib/mdxUtils.js | 2 +- {site => apps/site}/lib/utils.js | 0 apps/site/next-env.d.ts | 5 + apps/site/next.config.js | 17 + {site => apps/site}/pages/[...slug].js | 0 .../site}/pages/_app.js | 0 {site => apps/site}/pages/api/proxy.js | 0 {site => apps/site}/pages/excel-viewer.js | 0 {site => apps/site}/pages/index.js | 0 apps/site/postcss.config.js | 15 + apps/site/project.json | 69 + apps/site/public/.gitkeep | 0 ....analysis.summary_series.global.annual.csv | 0 ...e-suprasecular-decline-1311-2018-data.xlsx | Bin {site => apps/site}/public/datopian-logo.png | Bin .../default => apps/site}/public/favicon.ico | Bin .../site}/public/portaljs-screen-update.png | Bin .../site}/public/portaljs-screen.png | Bin .../scripts/actions/single-dataset-ssg.yml | 0 .../public/scripts/assets/sdnocommit.png | Bin .../site}/public/scripts/assets/secrets.png | Bin .../public/scripts/gh-page-builder-action.yml | 0 .../public/scripts/single-dataset-commit.sh | 0 .../scripts/single-dataset-no-commit.sh | 0 apps/site/specs/index.spec.tsx | 11 + {site => apps/site}/styles/globals.css | 0 .../site}/styles/tailwind.css | 0 apps/site/tailwind.config.js | 17 + apps/site/tsconfig.json | 23 + apps/site/tsconfig.spec.json | 21 + babel.config.json | 3 + bin/.gitignore | 104 - bin/README.md | 98 - bin/index.js | 135 - bin/package-lock.json | 4725 -- bin/package.json | 28 - dist/index.cjs.js | 839 - dist/index.esm.js | 788 - examples/ckan/.babelrc | 3 - examples/ckan/.eslintrc.js | 46 - examples/ckan/.gitignore | 1 - examples/ckan/.prettierignore | 24 - examples/ckan/.prettierrc.js | 8 - examples/ckan/README.md | 306 - .../__tests__/components/search/Form.test.tsx | 23 - .../search/__snapshots__/Form.test.tsx.snap | 47 - .../ckan/components/_shared/CustomLink.tsx | 15 - examples/ckan/components/_shared/Error.tsx | 17 - examples/ckan/components/_shared/Table.tsx | 53 - examples/ckan/components/_shared/index.ts | 5 - examples/ckan/components/dataset/About.tsx | 83 - examples/ckan/components/dataset/Org.tsx | 23 - .../ckan/components/dataset/Resources.tsx | 76 - examples/ckan/components/home/Footer.tsx | 61 - examples/ckan/components/home/Hero.tsx | 7 - .../ckan/components/home/HeroTemplate.tsx | 130 - examples/ckan/components/home/Nav.tsx | 14 - examples/ckan/components/home/NavTemplate.tsx | 118 - examples/ckan/components/home/Recent.tsx | 96 - examples/ckan/components/home/Stats.tsx | 54 - examples/ckan/components/org/About.tsx | 154 - examples/ckan/components/resource/About.tsx | 78 - examples/ckan/components/resource/Preview.tsx | 32 - examples/ckan/components/resource/View.tsx | 24 - examples/ckan/components/search/Form.tsx | 42 - examples/ckan/components/search/List.tsx | 72 - examples/ckan/components/search/Total.tsx | 23 - examples/ckan/components/static/List.tsx | 39 - examples/ckan/components/static/Page.tsx | 32 - examples/ckan/components/static/Post.tsx | 32 - examples/ckan/config/jest/cssTransform.js | 8 - examples/ckan/cypress.json | 3 - examples/ckan/cypress/fixtures/example.json | 5 - .../integration/pages/homepage-spec.js | 32 - .../cypress/integration/pages/search-spec.js | 21 - examples/ckan/cypress/plugins/index.js | 21 - examples/ckan/cypress/tsconfig.json | 12 - examples/ckan/graphql/queries.ts | 166 - examples/ckan/jest.config.js | 29 - examples/ckan/lib/apolloClient.ts | 92 - examples/ckan/locales/en/common.json | 4 - examples/ckan/locales/fr/common.json | 4 - examples/ckan/mocks/index.js | 155 - examples/ckan/next.config.js | 48 - examples/ckan/package.json | 95 - examples/ckan/pages/[org]/[dataset]/index.tsx | 53 - .../[org]/[dataset]/r/[resource]/index.tsx | 56 - examples/ckan/pages/[org]/index.tsx | 49 - examples/ckan/pages/_app.tsx | 55 - examples/ckan/pages/_document.tsx | 34 - examples/ckan/pages/blog/[post]/index.tsx | 45 - examples/ckan/pages/blog/index.tsx | 35 - examples/ckan/pages/index.tsx | 59 - examples/ckan/pages/p/[page]/index.tsx | 45 - examples/ckan/pages/search.tsx | 49 - examples/ckan/postcss.config.js | 8 - examples/ckan/public/favicon.ico | Bin 318 -> 0 bytes examples/ckan/public/images/banner.svg | 1 - examples/ckan/public/images/logo.svg | 1 - examples/ckan/setupTests.js | 1 - examples/ckan/styles/globals.css | 3 - examples/ckan/tailwind.config.js | 11 - examples/ckan/themes/base.ts | 13 - examples/ckan/themes/index.ts | 11 - examples/ckan/themes/primary.ts | 6 - examples/ckan/themes/utils.ts | 47 - examples/ckan/tsconfig.json | 32 - examples/ckan/utils/index.js | 541 - examples/ckan/yarn.lock | 18868 ------ examples/data-literate/package-lock.json | 51745 ---------------- examples/data-literate/package.json | 39 - examples/data-literate/postcss.config.js | 8 - examples/data-literate/tailwind.config.js | 33 - examples/dataset-frictionless/.babelrc | 5 - examples/dataset-frictionless/.gitignore | 30 - examples/dataset-frictionless/README.md | 39 - examples/dataset-frictionless/assets/demo.gif | Bin 9041182 -> 0 bytes examples/dataset-frictionless/lib/dataset.js | 70 - examples/dataset-frictionless/lib/utils.js | 110 - examples/dataset-frictionless/package.json | 38 - examples/dataset-frictionless/pages/index.js | 109 - .../dataset-frictionless/postcss.config.js | 8 - .../public/country-codes/README.md | 77 - .../country-codes/archive/country-codes.csv | 251 - .../country-codes/data/country-codes_csv.csv | 251 - .../public/country-codes/datapackage.json | 908 - .../public/dataset/README.md | 57 - .../public/dataset/data/vix-daily.csv | 3726 -- .../public/dataset/datapackage.json | 84 - .../dataset-frictionless/public/favicon.ico | Bin 15086 -> 0 bytes .../dataset-frictionless/styles/globals.css | 3 - .../dataset-frictionless/tailwind.config.js | 13 - examples/dataset-frictionless/yarn.lock | 14100 ----- examples/default/.gitignore | 34 - examples/default/README.md | 13 - examples/default/package.json | 20 - examples/default/pages/_app.js | 7 - examples/default/pages/api/hello.js | 5 - examples/default/pages/index.js | 78 - examples/default/postcss.config.js | 8 - examples/default/public/portaljs-logo.svg | 25 - examples/default/tailwind.config.js | 12 - examples/default/yarn.lock | 931 - examples/nextjs-tailwind-mdx/.gitignore | 34 - examples/nextjs-tailwind-mdx/README.md | 56 - .../nextjs-tailwind-mdx/components/Layout.js | 37 - .../nextjs-tailwind-mdx/components/MDX.js | 30 - .../nextjs-tailwind-mdx/components/Nav.js | 83 - .../nextjs-tailwind-mdx/config/navLinks.js | 5 - .../nextjs-tailwind-mdx/config/siteConfig.js | 29 - examples/nextjs-tailwind-mdx/content/about.md | 19 - examples/nextjs-tailwind-mdx/lib/gtag.js | 17 - examples/nextjs-tailwind-mdx/lib/mdx.js | 33 - .../nextjs-tailwind-mdx/package-lock.json | 8472 --- examples/nextjs-tailwind-mdx/package.json | 29 - .../nextjs-tailwind-mdx/pages/[...slug].js | 68 - examples/nextjs-tailwind-mdx/pages/_app.js | 65 - examples/nextjs-tailwind-mdx/pages/index.js | 20 - .../nextjs-tailwind-mdx/postcss.config.js | 8 - .../nextjs-tailwind-mdx/tailwind.config.js | 9 - jest.config.js | 8 - jest.config.ts | 5 + jest.preset.js | 3 + libs/.gitkeep | 0 libs/portaljs-components/.babelrc | 4 + libs/portaljs-components/.eslintrc.json | 18 + libs/portaljs-components/README.md | 7 + libs/portaljs-components/jest.config.ts | 13 + libs/portaljs-components/package.json | 4 + libs/portaljs-components/project.json | 50 + .../src}/assets/download.svg | 0 .../portaljs-components/src}/assets/file.svg | 0 .../portaljs-components/src}/assets/files.svg | 0 .../src}/components/blog/Post.js | 0 .../src}/components/blog/PostList.js | 0 .../src}/components/dataset/DataExplorer.js | 0 .../src}/components/dataset/KeyInfo.js | 0 .../src}/components/dataset/Org.js | 0 .../src}/components/dataset/Readme.js | 0 .../src}/components/dataset/ResourceInfo.js | 0 .../src}/components/misc/CustomLink.js | 0 .../src}/components/misc/Error.js | 0 .../src}/components/search/Form.js | 0 .../src}/components/search/Item.js | 0 .../src}/components/search/Total.js | 0 .../src}/components/ui/Nav.js | 0 .../src}/components/ui/Recent.js | 0 .../src}/components/views/Chart.js | 4 +- .../src}/components/views/Table.js | 0 .../portaljs-components/src}/index.js | 0 libs/portaljs-components/tsconfig.json | 20 + libs/portaljs-components/tsconfig.lib.json | 23 + libs/portaljs-components/tsconfig.spec.json | 20 + license | 21 - nx.json | 58 + package-lock.json | 46844 ++++++++++++++ package.json | 139 +- postcss.config.js | 8 - rollup.config.js | 20 - site/.gitignore | 34 - site/README.md | 19 - site/package.json | 38 - site/pages/_app.js | 8 - site/postcss.config.js | 8 - site/public/favicon.ico | Bin 15406 -> 0 bytes site/styles/tailwind.css | 3 - site/tailwind.config.js | 33 - site/yarn.lock | 4819 -- tailwind.config.js | 13 - tools/generators/.gitkeep | 0 tools/tsconfig.tools.json | 12 + tsconfig.base.json | 30 + yarn.lock | 13687 ---- 300 files changed, 47972 insertions(+), 130858 deletions(-) delete mode 100644 .babelrc create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 .github/workflows/examples-catalog-cypress.yml delete mode 100644 .github/workflows/examples-catalog-test.yml delete mode 100644 .github/workflows/main.yml create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json delete mode 100644 DESIGN.md delete mode 100644 SECURITY.md create mode 100644 apps/.gitkeep create mode 100644 apps/data-literate-e2e/.eslintrc.json create mode 100644 apps/data-literate-e2e/cypress.config.ts create mode 100644 apps/data-literate-e2e/project.json create mode 100644 apps/data-literate-e2e/src/e2e/app.cy.ts create mode 100644 apps/data-literate-e2e/src/fixtures/example.json create mode 100644 apps/data-literate-e2e/src/support/app.po.ts rename examples/ckan/cypress/support/commands.js => apps/data-literate-e2e/src/support/commands.ts (67%) rename examples/ckan/cypress/support/index.js => apps/data-literate-e2e/src/support/e2e.ts (89%) create mode 100644 apps/data-literate-e2e/tsconfig.json create mode 100644 apps/data-literate/.eslintrc.json rename {examples => apps}/data-literate/README.md (100%) rename {examples => apps}/data-literate/components/DataLiterate.js (100%) rename {examples => apps}/data-literate/components/Excel.js (100%) rename {examples => apps}/data-literate/components/Layout.js (100%) rename {examples => apps}/data-literate/components/LineChart.js (100%) rename {examples => apps}/data-literate/components/Table.js (100%) rename {examples => apps}/data-literate/components/TableGrid.js (97%) rename {examples => apps}/data-literate/content/demo.mdx (100%) rename {examples => apps}/data-literate/datahub-portal-local-cli.js (100%) create mode 100644 apps/data-literate/index.d.ts create mode 100644 apps/data-literate/jest.config.ts rename {examples => apps}/data-literate/lib/markdown.js (100%) rename {site => apps/data-literate}/lib/mdxUtils.js (89%) rename {examples/ckan => apps/data-literate}/next-env.d.ts (82%) create mode 100644 apps/data-literate/next.config.js rename {examples => apps}/data-literate/pages/[...slug].js (100%) rename {examples => apps}/data-literate/pages/_app.js (100%) rename {examples => apps}/data-literate/pages/api/proxy.js (100%) create mode 100644 apps/data-literate/postcss.config.js create mode 100644 apps/data-literate/project.json create mode 100644 apps/data-literate/public/.gitkeep rename {examples => apps}/data-literate/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv (100%) rename {examples => apps}/data-literate/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx (100%) rename {examples => apps}/data-literate/public/datopian-logo.png (100%) rename {examples => apps}/data-literate/public/favicon.ico (100%) create mode 100644 apps/data-literate/specs/index.spec.tsx rename {examples => apps}/data-literate/styles/globals.css (100%) rename {examples => apps}/data-literate/styles/tailwind.css (100%) create mode 100644 apps/data-literate/tailwind.config.js create mode 100644 apps/data-literate/tsconfig.json create mode 100644 apps/data-literate/tsconfig.spec.json create mode 100644 apps/site-e2e/.eslintrc.json create mode 100644 apps/site-e2e/cypress.config.ts create mode 100644 apps/site-e2e/project.json create mode 100644 apps/site-e2e/src/e2e/app.cy.ts create mode 100644 apps/site-e2e/src/fixtures/example.json create mode 100644 apps/site-e2e/src/support/app.po.ts create mode 100644 apps/site-e2e/src/support/commands.ts create mode 100644 apps/site-e2e/src/support/e2e.ts create mode 100644 apps/site-e2e/tsconfig.json create mode 100644 apps/site/.eslintrc.json rename {site => apps/site}/components/CustomLink.js (100%) rename {site => apps/site}/components/DataLiterate.js (100%) rename {site => apps/site}/components/Excel.js (98%) rename {site => apps/site}/components/ExcelViewerApp.js (100%) rename {site => apps/site}/components/Layout.js (100%) rename {site => apps/site}/components/LineChart.js (100%) rename {site => apps/site}/components/Nav.js (87%) rename {site => apps/site}/components/Table.js (100%) rename {site => apps/site}/content/data-literate.md (100%) rename {site => apps/site}/content/data-literate/demo.mdx (100%) rename {site => apps/site}/content/docs.md (100%) rename {site => apps/site}/content/docs/components.md (98%) rename {site => apps/site}/content/docs/references.md (100%) rename {site => apps/site}/content/gallery.md (100%) rename {site => apps/site}/content/learn.md (100%) rename {site => apps/site}/content/learn/ckan.md (100%) rename {site => apps/site}/content/learn/deploy-to-gh-pages.md (100%) rename {site => apps/site}/content/learn/single-frictionless-dataset.md (100%) create mode 100644 apps/site/index.d.ts create mode 100644 apps/site/jest.config.ts rename {site => apps/site}/lib/markdown.js (100%) rename {examples/data-literate => apps/site}/lib/mdxUtils.js (90%) rename {site => apps/site}/lib/utils.js (100%) create mode 100644 apps/site/next-env.d.ts create mode 100644 apps/site/next.config.js rename {site => apps/site}/pages/[...slug].js (100%) rename {examples/dataset-frictionless => apps/site}/pages/_app.js (100%) rename {site => apps/site}/pages/api/proxy.js (100%) rename {site => apps/site}/pages/excel-viewer.js (100%) rename {site => apps/site}/pages/index.js (100%) create mode 100644 apps/site/postcss.config.js create mode 100644 apps/site/project.json create mode 100644 apps/site/public/.gitkeep rename {site => apps/site}/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv (100%) rename {site => apps/site}/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx (100%) rename {site => apps/site}/public/datopian-logo.png (100%) rename {examples/default => apps/site}/public/favicon.ico (100%) rename {site => apps/site}/public/portaljs-screen-update.png (100%) rename {site => apps/site}/public/portaljs-screen.png (100%) rename {site => apps/site}/public/scripts/actions/single-dataset-ssg.yml (100%) rename {site => apps/site}/public/scripts/assets/sdnocommit.png (100%) rename {site => apps/site}/public/scripts/assets/secrets.png (100%) rename {site => apps/site}/public/scripts/gh-page-builder-action.yml (100%) rename {site => apps/site}/public/scripts/single-dataset-commit.sh (100%) rename {site => apps/site}/public/scripts/single-dataset-no-commit.sh (100%) create mode 100644 apps/site/specs/index.spec.tsx rename {site => apps/site}/styles/globals.css (100%) rename {examples/dataset-frictionless => apps/site}/styles/tailwind.css (100%) create mode 100644 apps/site/tailwind.config.js create mode 100644 apps/site/tsconfig.json create mode 100644 apps/site/tsconfig.spec.json create mode 100644 babel.config.json delete mode 100644 bin/.gitignore delete mode 100644 bin/README.md delete mode 100755 bin/index.js delete mode 100644 bin/package-lock.json delete mode 100644 bin/package.json delete mode 100644 dist/index.cjs.js delete mode 100644 dist/index.esm.js delete mode 100644 examples/ckan/.babelrc delete mode 100644 examples/ckan/.eslintrc.js delete mode 100644 examples/ckan/.gitignore delete mode 100644 examples/ckan/.prettierignore delete mode 100644 examples/ckan/.prettierrc.js delete mode 100644 examples/ckan/README.md delete mode 100644 examples/ckan/__tests__/components/search/Form.test.tsx delete mode 100644 examples/ckan/__tests__/components/search/__snapshots__/Form.test.tsx.snap delete mode 100644 examples/ckan/components/_shared/CustomLink.tsx delete mode 100644 examples/ckan/components/_shared/Error.tsx delete mode 100644 examples/ckan/components/_shared/Table.tsx delete mode 100644 examples/ckan/components/_shared/index.ts delete mode 100644 examples/ckan/components/dataset/About.tsx delete mode 100644 examples/ckan/components/dataset/Org.tsx delete mode 100644 examples/ckan/components/dataset/Resources.tsx delete mode 100644 examples/ckan/components/home/Footer.tsx delete mode 100644 examples/ckan/components/home/Hero.tsx delete mode 100644 examples/ckan/components/home/HeroTemplate.tsx delete mode 100644 examples/ckan/components/home/Nav.tsx delete mode 100644 examples/ckan/components/home/NavTemplate.tsx delete mode 100644 examples/ckan/components/home/Recent.tsx delete mode 100644 examples/ckan/components/home/Stats.tsx delete mode 100644 examples/ckan/components/org/About.tsx delete mode 100644 examples/ckan/components/resource/About.tsx delete mode 100644 examples/ckan/components/resource/Preview.tsx delete mode 100644 examples/ckan/components/resource/View.tsx delete mode 100644 examples/ckan/components/search/Form.tsx delete mode 100644 examples/ckan/components/search/List.tsx delete mode 100644 examples/ckan/components/search/Total.tsx delete mode 100644 examples/ckan/components/static/List.tsx delete mode 100644 examples/ckan/components/static/Page.tsx delete mode 100644 examples/ckan/components/static/Post.tsx delete mode 100644 examples/ckan/config/jest/cssTransform.js delete mode 100644 examples/ckan/cypress.json delete mode 100644 examples/ckan/cypress/fixtures/example.json delete mode 100644 examples/ckan/cypress/integration/pages/homepage-spec.js delete mode 100644 examples/ckan/cypress/integration/pages/search-spec.js delete mode 100644 examples/ckan/cypress/plugins/index.js delete mode 100644 examples/ckan/cypress/tsconfig.json delete mode 100644 examples/ckan/graphql/queries.ts delete mode 100644 examples/ckan/jest.config.js delete mode 100644 examples/ckan/lib/apolloClient.ts delete mode 100644 examples/ckan/locales/en/common.json delete mode 100644 examples/ckan/locales/fr/common.json delete mode 100644 examples/ckan/mocks/index.js delete mode 100644 examples/ckan/next.config.js delete mode 100644 examples/ckan/package.json delete mode 100644 examples/ckan/pages/[org]/[dataset]/index.tsx delete mode 100644 examples/ckan/pages/[org]/[dataset]/r/[resource]/index.tsx delete mode 100644 examples/ckan/pages/[org]/index.tsx delete mode 100644 examples/ckan/pages/_app.tsx delete mode 100644 examples/ckan/pages/_document.tsx delete mode 100644 examples/ckan/pages/blog/[post]/index.tsx delete mode 100644 examples/ckan/pages/blog/index.tsx delete mode 100644 examples/ckan/pages/index.tsx delete mode 100644 examples/ckan/pages/p/[page]/index.tsx delete mode 100644 examples/ckan/pages/search.tsx delete mode 100644 examples/ckan/postcss.config.js delete mode 100644 examples/ckan/public/favicon.ico delete mode 100644 examples/ckan/public/images/banner.svg delete mode 100644 examples/ckan/public/images/logo.svg delete mode 100644 examples/ckan/setupTests.js delete mode 100644 examples/ckan/styles/globals.css delete mode 100644 examples/ckan/tailwind.config.js delete mode 100644 examples/ckan/themes/base.ts delete mode 100644 examples/ckan/themes/index.ts delete mode 100644 examples/ckan/themes/primary.ts delete mode 100644 examples/ckan/themes/utils.ts delete mode 100644 examples/ckan/tsconfig.json delete mode 100644 examples/ckan/utils/index.js delete mode 100644 examples/ckan/yarn.lock delete mode 100644 examples/data-literate/package-lock.json delete mode 100644 examples/data-literate/package.json delete mode 100644 examples/data-literate/postcss.config.js delete mode 100644 examples/data-literate/tailwind.config.js delete mode 100644 examples/dataset-frictionless/.babelrc delete mode 100644 examples/dataset-frictionless/.gitignore delete mode 100644 examples/dataset-frictionless/README.md delete mode 100644 examples/dataset-frictionless/assets/demo.gif delete mode 100644 examples/dataset-frictionless/lib/dataset.js delete mode 100644 examples/dataset-frictionless/lib/utils.js delete mode 100644 examples/dataset-frictionless/package.json delete mode 100644 examples/dataset-frictionless/pages/index.js delete mode 100644 examples/dataset-frictionless/postcss.config.js delete mode 100644 examples/dataset-frictionless/public/country-codes/README.md delete mode 100644 examples/dataset-frictionless/public/country-codes/archive/country-codes.csv delete mode 100644 examples/dataset-frictionless/public/country-codes/data/country-codes_csv.csv delete mode 100644 examples/dataset-frictionless/public/country-codes/datapackage.json delete mode 100644 examples/dataset-frictionless/public/dataset/README.md delete mode 100644 examples/dataset-frictionless/public/dataset/data/vix-daily.csv delete mode 100644 examples/dataset-frictionless/public/dataset/datapackage.json delete mode 100644 examples/dataset-frictionless/public/favicon.ico delete mode 100644 examples/dataset-frictionless/styles/globals.css delete mode 100644 examples/dataset-frictionless/tailwind.config.js delete mode 100644 examples/dataset-frictionless/yarn.lock delete mode 100644 examples/default/.gitignore delete mode 100644 examples/default/README.md delete mode 100644 examples/default/package.json delete mode 100644 examples/default/pages/_app.js delete mode 100644 examples/default/pages/api/hello.js delete mode 100644 examples/default/pages/index.js delete mode 100644 examples/default/postcss.config.js delete mode 100644 examples/default/public/portaljs-logo.svg delete mode 100644 examples/default/tailwind.config.js delete mode 100644 examples/default/yarn.lock delete mode 100644 examples/nextjs-tailwind-mdx/.gitignore delete mode 100644 examples/nextjs-tailwind-mdx/README.md delete mode 100644 examples/nextjs-tailwind-mdx/components/Layout.js delete mode 100644 examples/nextjs-tailwind-mdx/components/MDX.js delete mode 100644 examples/nextjs-tailwind-mdx/components/Nav.js delete mode 100644 examples/nextjs-tailwind-mdx/config/navLinks.js delete mode 100644 examples/nextjs-tailwind-mdx/config/siteConfig.js delete mode 100644 examples/nextjs-tailwind-mdx/content/about.md delete mode 100644 examples/nextjs-tailwind-mdx/lib/gtag.js delete mode 100644 examples/nextjs-tailwind-mdx/lib/mdx.js delete mode 100644 examples/nextjs-tailwind-mdx/package-lock.json delete mode 100644 examples/nextjs-tailwind-mdx/package.json delete mode 100644 examples/nextjs-tailwind-mdx/pages/[...slug].js delete mode 100644 examples/nextjs-tailwind-mdx/pages/_app.js delete mode 100644 examples/nextjs-tailwind-mdx/pages/index.js delete mode 100644 examples/nextjs-tailwind-mdx/postcss.config.js delete mode 100644 examples/nextjs-tailwind-mdx/tailwind.config.js delete mode 100644 jest.config.js create mode 100644 jest.config.ts create mode 100644 jest.preset.js create mode 100644 libs/.gitkeep create mode 100644 libs/portaljs-components/.babelrc create mode 100644 libs/portaljs-components/.eslintrc.json create mode 100644 libs/portaljs-components/README.md create mode 100644 libs/portaljs-components/jest.config.ts create mode 100644 libs/portaljs-components/package.json create mode 100644 libs/portaljs-components/project.json rename {src => libs/portaljs-components/src}/assets/download.svg (100%) rename {src => libs/portaljs-components/src}/assets/file.svg (100%) rename {src => libs/portaljs-components/src}/assets/files.svg (100%) rename {src => libs/portaljs-components/src}/components/blog/Post.js (100%) rename {src => libs/portaljs-components/src}/components/blog/PostList.js (100%) rename {src => libs/portaljs-components/src}/components/dataset/DataExplorer.js (100%) rename {src => libs/portaljs-components/src}/components/dataset/KeyInfo.js (100%) rename {src => libs/portaljs-components/src}/components/dataset/Org.js (100%) rename {src => libs/portaljs-components/src}/components/dataset/Readme.js (100%) rename {src => libs/portaljs-components/src}/components/dataset/ResourceInfo.js (100%) rename {src => libs/portaljs-components/src}/components/misc/CustomLink.js (100%) rename {src => libs/portaljs-components/src}/components/misc/Error.js (100%) rename {src => libs/portaljs-components/src}/components/search/Form.js (100%) rename {src => libs/portaljs-components/src}/components/search/Item.js (100%) rename {src => libs/portaljs-components/src}/components/search/Total.js (100%) rename {src => libs/portaljs-components/src}/components/ui/Nav.js (100%) rename {src => libs/portaljs-components/src}/components/ui/Recent.js (100%) rename {src => libs/portaljs-components/src}/components/views/Chart.js (90%) rename {src => libs/portaljs-components/src}/components/views/Table.js (100%) rename {src => libs/portaljs-components/src}/index.js (100%) create mode 100644 libs/portaljs-components/tsconfig.json create mode 100644 libs/portaljs-components/tsconfig.lib.json create mode 100644 libs/portaljs-components/tsconfig.spec.json delete mode 100644 license create mode 100644 nx.json create mode 100644 package-lock.json delete mode 100644 postcss.config.js delete mode 100644 rollup.config.js delete mode 100644 site/.gitignore delete mode 100644 site/README.md delete mode 100644 site/package.json delete mode 100644 site/pages/_app.js delete mode 100644 site/postcss.config.js delete mode 100644 site/public/favicon.ico delete mode 100644 site/styles/tailwind.css delete mode 100644 site/tailwind.config.js delete mode 100644 site/yarn.lock delete mode 100644 tailwind.config.js create mode 100644 tools/generators/.gitkeep create mode 100644 tools/tsconfig.tools.json create mode 100644 tsconfig.base.json delete mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 803b73d6..00000000 --- a/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presets": [ - ["@babel/preset-react", { - "runtime": "automatic" - }] - ] -} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..6e87a003 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..06cc47d9 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,35 @@ +{ + "root": true, + "ignorePatterns": ["**/*"], + "plugins": ["@nrwl/nx"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@nrwl/nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": ["*"] + } + ] + } + ] + } + }, + { + "files": ["*.ts", "*.tsx"], + "extends": ["plugin:@nrwl/nx/typescript"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "extends": ["plugin:@nrwl/nx/javascript"], + "rules": {} + } + ] +} diff --git a/.github/workflows/examples-catalog-cypress.yml b/.github/workflows/examples-catalog-cypress.yml deleted file mode 100644 index e8acc33b..00000000 --- a/.github/workflows/examples-catalog-cypress.yml +++ /dev/null @@ -1,17 +0,0 @@ -# name: Cypress Integration Tests -# on: [push] -# jobs: -# cypress-run: -# runs-on: ubuntu-16.04 -# steps: -# - name: Checkout -# uses: actions/checkout@v1 - -# - name: Cypress run -# uses: cypress-io/github-action@v2 -# with: -# working-directory: examples/catalog -# browser: chrome -# build: yarn run build -# start: yarn start -# wait-on: "http://localhost:3000" diff --git a/.github/workflows/examples-catalog-test.yml b/.github/workflows/examples-catalog-test.yml deleted file mode 100644 index 572939e0..00000000 --- a/.github/workflows/examples-catalog-test.yml +++ /dev/null @@ -1,30 +0,0 @@ -# name: Portal-Catalog-Tests -# on: push -# jobs: -# build: -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v2 -# - name: Install modules -# run: | -# cd examples/catalog -# yarn -# - name: Run tests -# run: | -# cd examples/catalog -# yarn test -u - -# cypress-run: -# runs-on: ubuntu-16.04 -# steps: -# - name: Checkout -# uses: actions/checkout@v1 - -# - name: Cypress run -# uses: cypress-io/github-action@v2 -# with: -# working-directory: examples/catalog -# browser: chrome -# build: yarn run build -# start: yarn start -# wait-on: "http://localhost:3000" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index f689d632..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,39 +0,0 @@ -# name: github pages - -# on: -# push: -# branches: -# - main - -# jobs: -# deploy: -# runs-on: ubuntu-18.04 -# steps: -# - uses: actions/checkout@v2 - -# - name: Setup Node -# uses: actions/setup-node@v2.1.2 -# with: -# node-version: '12.x' - -# - name: Get yarn cache -# id: yarn-cache -# run: echo "::set-output name=dir::$(yarn cache dir)" - -# - name: Cache dependencies -# uses: actions/cache@v2 -# with: -# path: ${{ steps.yarn-cache.outputs.dir }} -# key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} -# restore-keys: | -# ${{ runner.os }}-yarn- - -# - run: yarn install --frozen-lockfile -# - run: yarn build -# - run: yarn export - -# - name: Deploy -# uses: peaceiris/actions-gh-pages@v3 -# with: -# github_token: ${{ secrets.GITHUB_TOKEN }} -# publish_dir: ./out \ No newline at end of file diff --git a/.gitignore b/.gitignore index b5ccbcc0..794fab1f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +dist +tmp +/out-tsc + # dependencies -node_modules/ -.pnp -.pnp.js +node_modules -# testing -coverage -cypress/videos +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace -# next.js -.next/ -/out/ - -# production -/build +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json # misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files .DS_Store +Thumbs.db -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env -.env.local -.env.development.local -.env.test.local -.env.production.local +# Next.js +.next \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..9481e77e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +# Add files here to ignore them from prettier formatting +/dist +/coverage \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..544138be --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..64553b17 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "nrwl.angular-console", + "esbenp.prettier-vscode", + "firsttris.vscode-jest-runner", + "dbaeumer.vscode-eslint" + ] +} diff --git a/DESIGN.md b/DESIGN.md deleted file mode 100644 index 007513de..00000000 --- a/DESIGN.md +++ /dev/null @@ -1,83 +0,0 @@ -# Design Notes - -## Roadmap - -General comment: let's do "README" (docs) driven development here. - -* [x] [show] Local functionality for Frictionless datasets with CSV #528 - * [x] Move in new work (portal-experiment) into portal.js and refactor https://github.com/datopian/portal.js.bak/issues/59 -* [ ] [show] Uber Epic covering all functionality **See below** - * [ ] [show] README only + data datasets (don’t have to be frictionless) - * (?) Graphs direct in README with say visdown … - * [ ] [show] SQL interface to the data (alasql or sql.js … https://github.com/agershun/alasql/wiki/Performance-Tests) - * [ ] file/resource subpages ... (for datasets with lots of resources) -* [ ] Docs **80% analysed** # -* [ ] Create portal components and library i.e. have a Table, Graph, Dataset component - * [ ] publish to @datopian/portal - * [ ] Examples -* [ ] Catalog functionality **20% analysed** - -## [uber][epic] Show functionality for single datasets - -### Features - -* Elegant -* Description (README/Description) -* Data preview and exploration (for tablular) - * Basic: some sample data shown - * Data exploration v1: filterable - * Data Exploration v2: can do sql etc ... -* Graphs / visualization -* Validation: this row does not match schema in column X -* Summarization e.g. this columns has this range of values, this average value, this number of nulls - -### Dataset structure support (in rough order of priority / like implementation) - -* Frictionless -* Plain README (with frontmatter) -* README (no frontmatter) and LICENSE file (?) - -Data has roughly two dimensions that are relevant - -* Format - * CSV - * xlsx - * JSON - * ... -* Size - * Small: < 5mb (can just load inline ...) - * Medium < 100mb - * Large < 5Gb - * xlarge > 5Gb - -* TODO: How does show/build work with remote files e.g. a resource ... - - ``` - path: abc.csv - remote_storage_url: s3://.../.../.../ - ``` - - Options: - - * We clone the data into path locally ... - * Possible problem if data is big ... - * Load data direct from remote_storage_url (as long as supports CORs) - - - - -## Architecture - -Portal.js is a React and NextJS based framework for building dataset/resources pages and catalogs. It consists of: - -* React components for data portal functionality e.g. data tables, graphs, dataset pages etc -* Tooling to load data (based on Frictionless) -* Template sites you can reuse using `create-next-app` - * Single dataset micro-site - * Github backed catalog - * CKAN backed catalog - * ... -* Local development environment -* Deployment integration with DataHub.io - -In summary, technically PortalJS is: NextJS + data specific react components + data loading glue (mostly using frictionless-js). diff --git a/README.md b/README.md index 6df994c1..2f057f93 100644 --- a/README.md +++ b/README.md @@ -1,830 +1,21 @@ -

-🌀 Portal.JS -
-Create a gateway to your data -

+# Portaljs -* [What is Portal.JS ?](#What-is-Portal.JS) - * [Features](#Features) - * [For developers](#For-developers) -* [Installation and setup](#Installation-and-setup) -* [Getting Started](#Getting-Started) -* [Tutorial](#Tutorial) - * [Build a single Frictionless dataset portal](#Build-a-single-Frictionless-dataset-portal) - * [Build a CKAN powered dataset portal](#Build-a-CKAN-powered-dataset-portal) -* [Architecture / Reference](#Architecture--Reference) - * [Component List](#Component-List) - * [UI Components](#UI-Components) - * [Dataset Components](#Dataset-Components) - * [View Components](#View-Components) - * [Search Components](#Search-Components) - * [Blog Components](#Blog-Components) - * [Misc Components](#Misc-Components) - * [Concepts and Terms](#Concepts-and-Terms) - * [Dataset](#Dataset) - * [Resource](#Resource) - * [View Spec](#view-spec) -* [Appendix](#Appendix) - * [What happened to Recline?](#What-happened-to-Recline?) + -# What is Portal.JS -🌀 `portal.js` is a framework for rapidly building rich data portal frontends using a modern frontend approach. `portal.js` can be used to present a single dataset or build a full-scale data catalog/portal. +✨ **This workspace has been generated by [Nx, a Smart, fast and extensible build system.](https://nx.dev)** ✨ -`portal.js` is built in Javascript and React on top of the popular [Next.js](https://nextjs.com/) framework. `portal` assumes a "decoupled" approach where the frontend is a separate service from the backend and interacts with backend(s) via an API. It can be used with any backend and has out of the box support for [CKAN](https://ckan.org/). +## Development server -## Features +Run `nx serve portaljs` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files. -- 🗺️ Unified sites: present data and content in one seamless site, pulling datasets from a DMS (e.g. CKAN) and content from a CMS (e.g. wordpress) with a common internal API. -- 👩‍💻 Developer friendly: built with familiar frontend tech Javascript, React etc -- 🔋 Batteries included: Full set of portal components out of the box e.g. catalog search, dataset showcase, blog etc. -- 🎨 Easy to theme and customize: installable themes, use standard CSS and React+CSS tooling. Add new routes quickly. -- 🧱 Extensible: quickly extend and develop/import your own React components -- 📝 Well documented: full set of documentation plus the documentation of NextJS and Apollo. +## Understand this workspace -### For developers +Run `nx graph` to see a diagram of the dependencies of the projects. -- 🏗 Build with modern, familiar frontend tech such as Javascript and React. -- 🚀 NextJS framework: so everything in NextJS for free React, SSR, static site generation, huge number of examples and integrations etc. - - SSR => unlimited number of pages, SEO etc whilst still using React. - - Static Site Generation (SSG) (good for small sites) => ultra-simple deployment, great performance and lighthouse scores etc +## Remote caching -# Installation and setup -Before installation, ensure your system satisfies the following requirements: +Run `npx nx connect-to-nx-cloud` to enable [remote caching](https://nx.app) and make CI faster. -- Node.js 10.13 or later -- Nextjs 10.0.3 -- MacOS, Windows (including WSL), and Linux are supported +## Further help -> Note: We also recommend instead of npm using `yarn` instead of `npm`. -> -Portal.js is built with React on top of Nextjs framework, so for a quick setup, you can bootstrap a Nextjs app and install portal.js as demonstrated in the code below: - -```bash= -## Create a react app -npx create-next-app -# or -yarn create next-app -``` -After the installation is complete, follow the instructions to start the development server. Try editing pages/index.js and see the result on your browser. - -> For more information on how to use create-next-app, you can review the [create-next-app](https://nextjs.org/docs/api-reference/create-next-app) documentation. - -Once you have Nextjs created, you can install portal.js: - -```bash= -yarn add https://github.com/datopian/portal.js.git -``` - -You're now ready to use portal.js in your next app. To test portal.js, open your `index.js` file in the pages folder. By default you should have some autogenerated code in the `index.js` file: - - -Which outputs a page with the following content: - -![](https://i.imgur.com/GVh0P6p.png) - -Now, we are going to do some clean up and add a table component. In the `index.js` file, import a [Table]() component from portal as shown below: - -```javascript -import Head from 'next/head' -import { Table } from 'portal' //import Table component -import styles from '../styles/Home.module.css' - -export default function Home() { - - const columns = [ - { field: 'id', headerName: 'ID' }, - { field: 'firstName', headerName: 'First name' }, - { field: 'lastName', headerName: 'Last name' }, - { field: 'age', headerName: 'Age' } - ]; - - const rows = [ - { id: 1, lastName: 'Snow', firstName: 'Jon', age: 35 }, - { id: 2, lastName: 'Lannister', firstName: 'Cersei', age: 42 }, - { id: 3, lastName: 'Lannister', firstName: 'Jaime', age: 45 }, - { id: 4, lastName: 'Stark', firstName: 'Arya', age: 16 }, - { id: 7, lastName: 'Clifford', firstName: 'Ferrara', age: 44 }, - { id: 8, lastName: 'Frances', firstName: 'Rossini', age: 36 }, - { id: 9, lastName: 'Roxie', firstName: 'Harvey', age: 65 }, - ]; - - return ( -
- - Create Portal App - - - -

- Welcome to Portal.JS -

- - {/* Use table component */} - - - - ) -} -``` - -Now, your page should look like the following: - -![](https://i.imgur.com/n0vSjY4.png) - -> **Note**: You can learn more about individual portal components, as well as their prop types in the [components reference](#Component-List). - -___ - -# Getting Started - -If you're new to Portal.js we recommend that you start with the step-by-step guide below. You can also check out the following examples of projects built with portal.js. - -* [A portal for a single Frictionless dataset](#Build-a-single-Frictionless-dataset-portal) -* [A portal with a CKAN backend](#Build-a-CKAN-powered-dataset-portal) - -> The [`examples` directory](https://github.com/datopian/portal.js/tree/main/examples) is regularly updated with different portal examples. - -If you have questions about anything related to Portal.js, you're always welcome to ask our community on [GitHub Discussions](https://github.com/datopian/portal.js/discussions). -___ - -# Tutorial - -## Build a single Frictionless dataset portal -This tutorial will guide you through building a portal for a single Frictionless dataset. - -[Here’s](https://portal-js.vercel.app/) an example of the final result. - -### Setup -The dataset should be a Frictionless Dataset i.e. it should have a [datapackage.json](https://specs.frictionlessdata.io/data-package/). - -Create a frictionless dataset portal app from the template: -``` -npx create-next-app -e https://github.com/datopian/portal.js/tree/main/examples/dataset-frictionless -#choose a name for your portal when prompted e.g. your-portal -``` -Go into your portal's directory and set the path to your dataset directory that contains the `datapackage.json`: -``` -cd -export PORTAL_DATASET_PATH= -``` -Start the server: -``` -yarn dev -``` -Visit the Page to view your dataset portal. - -## Build a CKAN powered dataset portal - -See [the CKAN Portal.JS example](./examples/ckan). - -___ - - -# Architecture / Reference - -## Component List - -Portal.js supports many components that can help you build amazing data portals similar to [this](https://catalog-portal-js.vercel.app/) and [this](https://portal-js.vercel.app/). - -In this section, we'll cover all supported components in depth, and help you understand their use as well as the expected properties. - -Components are grouped under the following sections: -* [UI](https://github.com/datopian/portal.js/tree/main/src/components/ui): Components like Nav bar, Footer, e.t.c -* [Dataset](https://github.com/datopian/portal.js/tree/main/src/components/dataset): Components used for displaying a Frictionless dataset and resources -* [Search](https://github.com/datopian/portal.js/tree/main/src/components/search): Components used for building a search interface for datasets -* [Blog](https://github.com/datopian/portal.js/tree/main/src/components/blog): Components for building a simple blog for datasets -* [Views](https://github.com/datopian/portal.js/tree/main/src/components/views): Components like charts, tables, maps for generating data views -* [Misc](https://github.com/datopian/portal.js/tree/main/src/components/misc): Miscellaneous components like errors, custom links, etc used for extra design. - -### UI Components - -In the UI we group all components that can be used for building generic page sections. These are components for building sections like the Navigation bar, Footer, Side pane, Recent datasets, e.t.c. - -#### [Nav Component](https://github.com/datopian/portal.js/blob/main/src/components/ui/Nav.js) - -To build a navigation bar, you can use the `Nav` component as demonstrated below: - -```javascript -import { Nav } from 'portal' - -export default function Home(){ - - const navMenu = [{ title: 'Blog', path: '/blog' }, - { title: 'Search', path: '/search' }] - - return ( - <> -
- ) -} - -``` -> Note: Under the hood, Table component uses the [DataGrid Material UI table](https://material-ui.com/components/data-grid/), and as such all supported params in data and columns are supported. - - -#### Table Component Prop Types - -Table component accepts two properties: -* **data**: An array of column names with properties: e.g [{field: "col1", headerName: "col1"}, {field: "col2", headerName: "col2"}] -* **columns**: An array of data objects e.g. [ {col1: 1, col2: 2}, {col1: 5, col2: 7} ] - - -### [Search Components](https://github.com/datopian/portal.js/tree/main/src/components/search) - -Search components groups together components that can be used for creating a search interface. This includes search forms, search item as well as search result list. - -#### [Form Component](https://github.com/datopian/portal.js/blob/main/src/components/search/Form.js) - -The search`Form` component is a simple search input and submit button. See example of a search form [here](https://catalog-portal-js.vercel.app/search). - -The search `form` requires a submit handler (`handleSubmit`). This handler function receives the search term, and handles actual search. - -In the example below, we demonstrate how to use the `Form` component. - -```javascript -import { Form } from 'portal' - -export default function Home() { - - const handleSearchSubmit = (searchQuery) => { - // Write your custom code to perform search in db - console.log(searchQuery); - } - - return ( - - ) -} -``` - -#### Form Component Prop Types - -The `Form` component accepts a single property: -* **handleSubmit**: A function that receives the search text, and can be customize to perform the actual search. - -#### [Item Component](https://github.com/datopian/portal.js/blob/main/src/components/search/Item.js) - -The search`Item` component can be used to display a single search result. - -In the example below, we demonstrate how to use the `Item` component. - -```javascript -import { Item } from 'portal' - -export default function Home() { - const datapackage = { - "name": "finance-vix", - "title": "VIX - CBOE Volatility Index", - "homepage": "http://www.cboe.com/micro/VIX/", - "version": "0.1.0", - "description": "This is a test organization description", - "resources": [ - { - "name": "vix-daily", - "path": "vix-daily.csv", - "format": "csv", - "size": 20982, - "mediatype": "text/csv", - } - ] - } - - return ( - - ) -} -``` - -#### Item Component Prop Types - -The `Item` component accepts a single property: -* **dataset**: A [Frictionless data package descriptor](https://specs.frictionlessdata.io/data-package/#descriptor) - - -#### [ItemTotal Component](https://github.com/datopian/portal.js/blob/main/src/components/search/Item.js) - -The search`ItemTotal` is a simple component for displaying the total search result - -In the example below, we demonstrate how to use the `ItemTotal` component. - -```javascript -import { ItemTotal } from 'portal' - -export default function Home() { - //do some custom search to get results - const search = (text) => { - return [{ name: "data1" }, { name: "data2" }] - } - //get the total result count - const searchTotal = search("some text").length - - return ( - - ) -} -``` - -#### ItemTotal Component Prop Types - -The `ItemTotal` component accepts a single property: -* **count**: An integer of the total number of results. - - -### [Blog Components](https://github.com/datopian/portal.js/tree/main/src/components/blog) - -These are group of components for building a portal blog. See example of portal blog [here](https://catalog-portal-js.vercel.app/blog) - -#### [PostList Components](https://github.com/datopian/portal.js/tree/main/src/components/misc) - -The `PostList` component is used to display a list of blog posts with the title and a short excerpts from the content. - -In the example below, we demonstrate how to use the `PostList` component. - -```javascript -import { PostList } from 'portal' - -export default function Home() { - - const posts = [ - { title: "Blog post 1", excerpt: "This is the first blog excerpts in this list." }, - { title: "Blog post 2", excerpt: "This is the second blog excerpts in this list." }, - { title: "Blog post 3", excerpt: "This is the third blog excerpts in this list." }, - ] - return ( - - ) -} -``` - -#### PostList Component Prop Types - -The `PostList` component accepts a single property: -* **posts**: An array of post list objects with the following properties: - ```javascript - [ - { - title: "The title of the blog post", - excerpt: "A short excerpt from the post content", - }, - ] - ``` - -#### [Post Components](https://github.com/datopian/portal.js/tree/main/src/components/misc) - -The `Post` component is used to display a blog post. See an example of a blog post [here](https://catalog-portal-js.vercel.app/blog/nyt-pa-platformen-opdateringsfrekvens-og-andres-data) - -In the example below, we demonstrate how to use the `Post` component. - -```javascript -import { Post } from 'portal' -import * as dayjs from 'dayjs' //For converting UTC time to relative format -import relativeTime from 'dayjs/plugin/relativeTime' - -dayjs.extend(relativeTime) - -export default function Home() { - - const post = { - title: "This is a sample blog post", - content: `

A simple header

- The PostList component is used to display a list of blog posts - with the title and a short excerpts from the content. - In the example below, we demonstrate how to use the PostList component.`, - createdAt: dayjs().to(dayjs(1620649596902)), - featuredImage: "https://pixabay.com/get/ge9a766d1f7b5fe0eccbf0f439501a2cf2b191997290e7ab15e6a402574acc2fdba48a82d278dca3547030e0202b7906d_640.jpg" - } - - return ( - - ) -} -``` - -#### Post Component Prop Types - -The `Post` component accepts a single property: -* **post**: An object with the following properties: -```javascript - { - title: - content: - createdAt: - featuredImage: < Url/relative url to post cover image> - } -``` - - -### [Misc Components](https://github.com/datopian/portal.js/tree/main/src/components/misc) - -These are group of miscellaneous/extra components for extending your portal. They include components like Errors, custom links, etc. - -#### [Error Component](https://github.com/datopian/portal.js/blob/main/src/components/misc/Error.js) - -The `Error` component is used to display a custom error message. - -In the example below, we demonstrate how to use the `Error` component. - -```javascript -import { Error } from 'portal' - -export default function Home() { - - return ( - - ) -} -``` - -#### Error Component Prop Types - -The `Error` component accepts a single property: -* **message**: A string with the error message to display. - - -#### [Custom Component](https://github.com/datopian/portal.js/blob/main/src/components/misc/Error.js) - -The `CustomLink` component is used to create a link with a consistent style to other portal components. - -In the example below, we demonstrate how to use the `CustomLink` component. - -```javascript -import { CustomLink } from 'portal' - -export default function Home() { - - return ( - - ) -} -``` - -#### CustomLink Component Prop Types - -The `CustomLink` component accepts the following properties: - -* **url**: A string. The relative or absolute url of the link. -* **title**: A string. The title of the link - - -___ - -## Concepts and Terms -In this section, we explain some of the terms and concepts used throughtout the portal.js documentation. -> Some of these concepts are part of official specs, and when appropriate, we'll link to the sources where you can get more details. -### Dataset -A dataset extends the [Frictionless data package](https://specs.frictionlessdata.io/data-package/#metadata) to add an extra organization property. The organization property describes the organization the dataset belongs to, and it should have the following properties: -```javascript -organization = { - name: "some org name", - title: "Some optional org title", - description: "A description of the organization" -} -``` -An example of dataset with organization properties is given below: -```javascript -datasets = [{ - organization: { - name: "some org name", - title: "Some optional org title", - description: "A description of the organization" - }, - title: "Data package title", - name: "Data package name", - description: "description of data package", - resources: [...], - licences: [...], - sources: [...] - } -] -``` - -### Resource -TODO - -### view spec - ---- - -## Deploying portal build to github pages - -[Deploying single frictionless dataset to Github](https://portaljs.org/publish) - -## Showcases - -### Single Dataset with Default Theme - -![Single Dataset Example](./examples/dataset-frictionless/assets/demo.gif) - ---- - -# Appendix - -## What happened to Recline? - -Portal.JS used to be Recline(JS). If you are looking for the old Recline codebase it still exists: see the [`recline` branch](https://github.com/datopian/portal.js/tree/recline). If you want context for the rename see [this issue](https://github.com/datopian/portal.js/issues/520). +Visit the [Nx Documentation](https://nx.dev) to learn more. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index b4bc1380..00000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -Please report security issues to `security@datopian.com` \ No newline at end of file diff --git a/apps/.gitkeep b/apps/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/data-literate-e2e/.eslintrc.json b/apps/data-literate-e2e/.eslintrc.json new file mode 100644 index 00000000..696cb8b1 --- /dev/null +++ b/apps/data-literate-e2e/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/data-literate-e2e/cypress.config.ts b/apps/data-literate-e2e/cypress.config.ts new file mode 100644 index 00000000..22f7c84e --- /dev/null +++ b/apps/data-literate-e2e/cypress.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'cypress'; +import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset'; + +export default defineConfig({ + e2e: nxE2EPreset(__dirname), +}); diff --git a/apps/data-literate-e2e/project.json b/apps/data-literate-e2e/project.json new file mode 100644 index 00000000..214c992e --- /dev/null +++ b/apps/data-literate-e2e/project.json @@ -0,0 +1,30 @@ +{ + "name": "data-literate-e2e", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/data-literate-e2e/src", + "projectType": "application", + "targets": { + "e2e": { + "executor": "@nrwl/cypress:cypress", + "options": { + "cypressConfig": "apps/data-literate-e2e/cypress.config.ts", + "devServerTarget": "data-literate:serve:development", + "testingType": "e2e" + }, + "configurations": { + "production": { + "devServerTarget": "data-literate:serve:production" + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/data-literate-e2e/**/*.{js,ts}"] + } + } + }, + "tags": [], + "implicitDependencies": ["data-literate"] +} diff --git a/apps/data-literate-e2e/src/e2e/app.cy.ts b/apps/data-literate-e2e/src/e2e/app.cy.ts new file mode 100644 index 00000000..3fcabc19 --- /dev/null +++ b/apps/data-literate-e2e/src/e2e/app.cy.ts @@ -0,0 +1,13 @@ +import { getGreeting } from '../support/app.po'; + +describe('data-literate', () => { + beforeEach(() => cy.visit('/')); + + it('should display welcome message', () => { + // Custom command example, see `../support/commands.ts` file + cy.login('my-email@something.com', 'myPassword'); + + // Function helper example, see `../support/app.po.ts` file + getGreeting().contains('Welcome data-literate'); + }); +}); diff --git a/apps/data-literate-e2e/src/fixtures/example.json b/apps/data-literate-e2e/src/fixtures/example.json new file mode 100644 index 00000000..294cbed6 --- /dev/null +++ b/apps/data-literate-e2e/src/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/apps/data-literate-e2e/src/support/app.po.ts b/apps/data-literate-e2e/src/support/app.po.ts new file mode 100644 index 00000000..32934246 --- /dev/null +++ b/apps/data-literate-e2e/src/support/app.po.ts @@ -0,0 +1 @@ +export const getGreeting = () => cy.get('h1'); diff --git a/examples/ckan/cypress/support/commands.js b/apps/data-literate-e2e/src/support/commands.ts similarity index 67% rename from examples/ckan/cypress/support/commands.js rename to apps/data-literate-e2e/src/support/commands.ts index ca4d256f..310f1fa0 100644 --- a/examples/ckan/cypress/support/commands.js +++ b/apps/data-literate-e2e/src/support/commands.ts @@ -7,11 +7,19 @@ // commands please read more here: // https://on.cypress.io/custom-commands // *********************************************** -// + +// eslint-disable-next-line @typescript-eslint/no-namespace +declare namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + login(email: string, password: string): void; + } +} // // -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }) -// +Cypress.Commands.add('login', (email, password) => { + console.log('Custom command example: Login', email, password); +}); // // -- This is a child command -- // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) diff --git a/examples/ckan/cypress/support/index.js b/apps/data-literate-e2e/src/support/e2e.ts similarity index 89% rename from examples/ckan/cypress/support/index.js rename to apps/data-literate-e2e/src/support/e2e.ts index 37a498fb..3d469a6b 100644 --- a/examples/ckan/cypress/support/index.js +++ b/apps/data-literate-e2e/src/support/e2e.ts @@ -15,6 +15,3 @@ // Import commands.js using ES2015 syntax: import './commands'; - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/apps/data-literate-e2e/tsconfig.json b/apps/data-literate-e2e/tsconfig.json new file mode 100644 index 00000000..cc509a73 --- /dev/null +++ b/apps/data-literate-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "sourceMap": false, + "outDir": "../../dist/out-tsc", + "allowJs": true, + "types": ["cypress", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"] +} diff --git a/apps/data-literate/.eslintrc.json b/apps/data-literate/.eslintrc.json new file mode 100644 index 00000000..82b9aa29 --- /dev/null +++ b/apps/data-literate/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": [ + "plugin:@nrwl/nx/react-typescript", + "next", + "next/core-web-vitals", + "../../.eslintrc.json" + ], + "ignorePatterns": ["!**/*", ".next/**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@next/next/no-html-link-for-pages": [ + "error", + "apps/data-literate/pages" + ] + } + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ], + "rules": { + "@next/next/no-html-link-for-pages": "off" + }, + "env": { + "jest": true + } +} diff --git a/examples/data-literate/README.md b/apps/data-literate/README.md similarity index 100% rename from examples/data-literate/README.md rename to apps/data-literate/README.md diff --git a/examples/data-literate/components/DataLiterate.js b/apps/data-literate/components/DataLiterate.js similarity index 100% rename from examples/data-literate/components/DataLiterate.js rename to apps/data-literate/components/DataLiterate.js diff --git a/examples/data-literate/components/Excel.js b/apps/data-literate/components/Excel.js similarity index 100% rename from examples/data-literate/components/Excel.js rename to apps/data-literate/components/Excel.js diff --git a/examples/data-literate/components/Layout.js b/apps/data-literate/components/Layout.js similarity index 100% rename from examples/data-literate/components/Layout.js rename to apps/data-literate/components/Layout.js diff --git a/examples/data-literate/components/LineChart.js b/apps/data-literate/components/LineChart.js similarity index 100% rename from examples/data-literate/components/LineChart.js rename to apps/data-literate/components/LineChart.js diff --git a/examples/data-literate/components/Table.js b/apps/data-literate/components/Table.js similarity index 100% rename from examples/data-literate/components/Table.js rename to apps/data-literate/components/Table.js diff --git a/examples/data-literate/components/TableGrid.js b/apps/data-literate/components/TableGrid.js similarity index 97% rename from examples/data-literate/components/TableGrid.js rename to apps/data-literate/components/TableGrid.js index be4eaa73..fb844fca 100644 --- a/examples/data-literate/components/TableGrid.js +++ b/apps/data-literate/components/TableGrid.js @@ -1,6 +1,6 @@ import axios from 'axios' import React, { useEffect } from 'react' -import { Table } from 'portal' +import { Table } from '@portaljs/components' const papa = require("papaparse") diff --git a/examples/data-literate/content/demo.mdx b/apps/data-literate/content/demo.mdx similarity index 100% rename from examples/data-literate/content/demo.mdx rename to apps/data-literate/content/demo.mdx diff --git a/examples/data-literate/datahub-portal-local-cli.js b/apps/data-literate/datahub-portal-local-cli.js similarity index 100% rename from examples/data-literate/datahub-portal-local-cli.js rename to apps/data-literate/datahub-portal-local-cli.js diff --git a/apps/data-literate/index.d.ts b/apps/data-literate/index.d.ts new file mode 100644 index 00000000..7ba08fa1 --- /dev/null +++ b/apps/data-literate/index.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +declare module '*.svg' { + const content: any; + export const ReactComponent: any; + export default content; +} diff --git a/apps/data-literate/jest.config.ts b/apps/data-literate/jest.config.ts new file mode 100644 index 00000000..f1d7ee0e --- /dev/null +++ b/apps/data-literate/jest.config.ts @@ -0,0 +1,11 @@ +/* eslint-disable */ +export default { + displayName: 'data-literate', + preset: '../../jest.preset.js', + transform: { + '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', + '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nrwl/next/babel'] }], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/apps/data-literate', +}; diff --git a/examples/data-literate/lib/markdown.js b/apps/data-literate/lib/markdown.js similarity index 100% rename from examples/data-literate/lib/markdown.js rename to apps/data-literate/lib/markdown.js diff --git a/site/lib/mdxUtils.js b/apps/data-literate/lib/mdxUtils.js similarity index 89% rename from site/lib/mdxUtils.js rename to apps/data-literate/lib/mdxUtils.js index d89b09f4..34c69a48 100644 --- a/site/lib/mdxUtils.js +++ b/apps/data-literate/lib/mdxUtils.js @@ -3,7 +3,7 @@ import glob from 'glob' import path from 'path' // POSTS_PATH is useful when you want to get the path to a specific file -export const POSTS_PATH = path.join(process.cwd(), 'content') +export const POSTS_PATH = path.join(process.cwd(), '/apps/data-literate/content') const walkSync = (dir, filelist = []) => { fs.readdirSync(dir).forEach(file => { diff --git a/examples/ckan/next-env.d.ts b/apps/data-literate/next-env.d.ts similarity index 82% rename from examples/ckan/next-env.d.ts rename to apps/data-literate/next-env.d.ts index 9bc3dd46..4f11a03d 100644 --- a/examples/ckan/next-env.d.ts +++ b/apps/data-literate/next-env.d.ts @@ -1,5 +1,4 @@ /// -/// /// // NOTE: This file should not be edited diff --git a/apps/data-literate/next.config.js b/apps/data-literate/next.config.js new file mode 100644 index 00000000..90460201 --- /dev/null +++ b/apps/data-literate/next.config.js @@ -0,0 +1,17 @@ +//@ts-check + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { withNx } = require('@nrwl/next/plugins/with-nx'); + +/** + * @type {import('@nrwl/next/plugins/with-nx').WithNxOptions} + **/ +const nextConfig = { + nx: { + // Set this to true if you would like to use SVGR + // See: https://github.com/gregberge/svgr + svgr: false, + }, +}; + +module.exports = withNx(nextConfig); diff --git a/examples/data-literate/pages/[...slug].js b/apps/data-literate/pages/[...slug].js similarity index 100% rename from examples/data-literate/pages/[...slug].js rename to apps/data-literate/pages/[...slug].js diff --git a/examples/data-literate/pages/_app.js b/apps/data-literate/pages/_app.js similarity index 100% rename from examples/data-literate/pages/_app.js rename to apps/data-literate/pages/_app.js diff --git a/examples/data-literate/pages/api/proxy.js b/apps/data-literate/pages/api/proxy.js similarity index 100% rename from examples/data-literate/pages/api/proxy.js rename to apps/data-literate/pages/api/proxy.js diff --git a/apps/data-literate/postcss.config.js b/apps/data-literate/postcss.config.js new file mode 100644 index 00000000..c72626d6 --- /dev/null +++ b/apps/data-literate/postcss.config.js @@ -0,0 +1,15 @@ +const { join } = require('path'); + +// Note: If you use library-specific PostCSS/Tailwind configuration then you should remove the `postcssConfig` build +// option from your application's configuration (i.e. project.json). +// +// See: https://nx.dev/guides/using-tailwind-css-in-react#step-4:-applying-configuration-to-libraries + +module.exports = { + plugins: { + tailwindcss: { + config: join(__dirname, 'tailwind.config.js'), + }, + autoprefixer: {}, + }, +}; diff --git a/apps/data-literate/project.json b/apps/data-literate/project.json new file mode 100644 index 00000000..5002a4e0 --- /dev/null +++ b/apps/data-literate/project.json @@ -0,0 +1,69 @@ +{ + "name": "data-literate", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/data-literate", + "projectType": "application", + "targets": { + "build": { + "executor": "@nrwl/next:build", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "root": "apps/data-literate", + "outputPath": "dist/apps/data-literate" + }, + "configurations": { + "development": { + "outputPath": "apps/data-literate" + }, + "production": {} + } + }, + "serve": { + "executor": "@nrwl/next:server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "data-literate:build", + "dev": true + }, + "configurations": { + "development": { + "buildTarget": "data-literate:build:development", + "dev": true + }, + "production": { + "buildTarget": "data-literate:build:production", + "dev": false + } + } + }, + "export": { + "executor": "@nrwl/next:export", + "options": { + "buildTarget": "data-literate:build:production" + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/data-literate/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/data-literate/**/*.{ts,tsx,js,jsx}"] + } + } + }, + "tags": [] +} diff --git a/apps/data-literate/public/.gitkeep b/apps/data-literate/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/examples/data-literate/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv b/apps/data-literate/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv similarity index 100% rename from examples/data-literate/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv rename to apps/data-literate/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv diff --git a/examples/data-literate/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx b/apps/data-literate/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx similarity index 100% rename from examples/data-literate/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx rename to apps/data-literate/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx diff --git a/examples/data-literate/public/datopian-logo.png b/apps/data-literate/public/datopian-logo.png similarity index 100% rename from examples/data-literate/public/datopian-logo.png rename to apps/data-literate/public/datopian-logo.png diff --git a/examples/data-literate/public/favicon.ico b/apps/data-literate/public/favicon.ico similarity index 100% rename from examples/data-literate/public/favicon.ico rename to apps/data-literate/public/favicon.ico diff --git a/apps/data-literate/specs/index.spec.tsx b/apps/data-literate/specs/index.spec.tsx new file mode 100644 index 00000000..42c94022 --- /dev/null +++ b/apps/data-literate/specs/index.spec.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { render } from '@testing-library/react'; + +import Index from '../pages/index'; + +describe('Index', () => { + it('should render successfully', () => { + const { baseElement } = render(); + expect(baseElement).toBeTruthy(); + }); +}); diff --git a/examples/data-literate/styles/globals.css b/apps/data-literate/styles/globals.css similarity index 100% rename from examples/data-literate/styles/globals.css rename to apps/data-literate/styles/globals.css diff --git a/examples/data-literate/styles/tailwind.css b/apps/data-literate/styles/tailwind.css similarity index 100% rename from examples/data-literate/styles/tailwind.css rename to apps/data-literate/styles/tailwind.css diff --git a/apps/data-literate/tailwind.config.js b/apps/data-literate/tailwind.config.js new file mode 100644 index 00000000..9a942e21 --- /dev/null +++ b/apps/data-literate/tailwind.config.js @@ -0,0 +1,17 @@ +const { createGlobPatternsForDependencies } = require('@nrwl/react/tailwind'); +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join( + __dirname, + '{src,pages,components}/**/*!(*.stories|*.spec).{ts,tsx,html,js,jsx}' + ), + ...createGlobPatternsForDependencies(__dirname), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/data-literate/tsconfig.json b/apps/data-literate/tsconfig.json new file mode 100644 index 00000000..7a9f3ecf --- /dev/null +++ b/apps/data-literate/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "jsx": "preserve", + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": true, + "types": ["jest", "node"] + }, + "include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "next-env.d.ts"], + "exclude": [ + "node_modules", + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts" + ] +} diff --git a/apps/data-literate/tsconfig.spec.json b/apps/data-literate/tsconfig.spec.json new file mode 100644 index 00000000..214b2cc2 --- /dev/null +++ b/apps/data-literate/tsconfig.spec.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "jsx": "react" + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/apps/site-e2e/.eslintrc.json b/apps/site-e2e/.eslintrc.json new file mode 100644 index 00000000..696cb8b1 --- /dev/null +++ b/apps/site-e2e/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/site-e2e/cypress.config.ts b/apps/site-e2e/cypress.config.ts new file mode 100644 index 00000000..22f7c84e --- /dev/null +++ b/apps/site-e2e/cypress.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'cypress'; +import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset'; + +export default defineConfig({ + e2e: nxE2EPreset(__dirname), +}); diff --git a/apps/site-e2e/project.json b/apps/site-e2e/project.json new file mode 100644 index 00000000..b6cd0d87 --- /dev/null +++ b/apps/site-e2e/project.json @@ -0,0 +1,30 @@ +{ + "name": "site-e2e", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/site-e2e/src", + "projectType": "application", + "targets": { + "e2e": { + "executor": "@nrwl/cypress:cypress", + "options": { + "cypressConfig": "apps/site-e2e/cypress.config.ts", + "devServerTarget": "site:serve:development", + "testingType": "e2e" + }, + "configurations": { + "production": { + "devServerTarget": "site:serve:production" + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/site-e2e/**/*.{js,ts}"] + } + } + }, + "tags": [], + "implicitDependencies": ["site"] +} diff --git a/apps/site-e2e/src/e2e/app.cy.ts b/apps/site-e2e/src/e2e/app.cy.ts new file mode 100644 index 00000000..3a752dd4 --- /dev/null +++ b/apps/site-e2e/src/e2e/app.cy.ts @@ -0,0 +1,13 @@ +import { getGreeting } from '../support/app.po'; + +describe('site', () => { + beforeEach(() => cy.visit('/')); + + it('should display welcome message', () => { + // Custom command example, see `../support/commands.ts` file + cy.login('my-email@something.com', 'myPassword'); + + // Function helper example, see `../support/app.po.ts` file + getGreeting().contains('Welcome site'); + }); +}); diff --git a/apps/site-e2e/src/fixtures/example.json b/apps/site-e2e/src/fixtures/example.json new file mode 100644 index 00000000..294cbed6 --- /dev/null +++ b/apps/site-e2e/src/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/apps/site-e2e/src/support/app.po.ts b/apps/site-e2e/src/support/app.po.ts new file mode 100644 index 00000000..32934246 --- /dev/null +++ b/apps/site-e2e/src/support/app.po.ts @@ -0,0 +1 @@ +export const getGreeting = () => cy.get('h1'); diff --git a/apps/site-e2e/src/support/commands.ts b/apps/site-e2e/src/support/commands.ts new file mode 100644 index 00000000..310f1fa0 --- /dev/null +++ b/apps/site-e2e/src/support/commands.ts @@ -0,0 +1,33 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +// eslint-disable-next-line @typescript-eslint/no-namespace +declare namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + login(email: string, password: string): void; + } +} +// +// -- This is a parent command -- +Cypress.Commands.add('login', (email, password) => { + console.log('Custom command example: Login', email, password); +}); +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/apps/site-e2e/src/support/e2e.ts b/apps/site-e2e/src/support/e2e.ts new file mode 100644 index 00000000..3d469a6b --- /dev/null +++ b/apps/site-e2e/src/support/e2e.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; diff --git a/apps/site-e2e/tsconfig.json b/apps/site-e2e/tsconfig.json new file mode 100644 index 00000000..cc509a73 --- /dev/null +++ b/apps/site-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "sourceMap": false, + "outDir": "../../dist/out-tsc", + "allowJs": true, + "types": ["cypress", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"] +} diff --git a/apps/site/.eslintrc.json b/apps/site/.eslintrc.json new file mode 100644 index 00000000..12e8399a --- /dev/null +++ b/apps/site/.eslintrc.json @@ -0,0 +1,31 @@ +{ + "extends": [ + "plugin:@nrwl/nx/react-typescript", + "next", + "next/core-web-vitals", + "../../.eslintrc.json" + ], + "ignorePatterns": ["!**/*", ".next/**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@next/next/no-html-link-for-pages": ["error", "apps/site/pages"] + } + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ], + "rules": { + "@next/next/no-html-link-for-pages": "off" + }, + "env": { + "jest": true + } +} diff --git a/site/components/CustomLink.js b/apps/site/components/CustomLink.js similarity index 100% rename from site/components/CustomLink.js rename to apps/site/components/CustomLink.js diff --git a/site/components/DataLiterate.js b/apps/site/components/DataLiterate.js similarity index 100% rename from site/components/DataLiterate.js rename to apps/site/components/DataLiterate.js diff --git a/site/components/Excel.js b/apps/site/components/Excel.js similarity index 98% rename from site/components/Excel.js rename to apps/site/components/Excel.js index b96d318c..1f69d950 100644 --- a/site/components/Excel.js +++ b/apps/site/components/Excel.js @@ -1,5 +1,5 @@ import axios from 'axios' -import XLSX from 'xlsx' +import * as XLSX from 'xlsx' import React, { useEffect, useState } from 'react' import Table from './Table' diff --git a/site/components/ExcelViewerApp.js b/apps/site/components/ExcelViewerApp.js similarity index 100% rename from site/components/ExcelViewerApp.js rename to apps/site/components/ExcelViewerApp.js diff --git a/site/components/Layout.js b/apps/site/components/Layout.js similarity index 100% rename from site/components/Layout.js rename to apps/site/components/Layout.js diff --git a/site/components/LineChart.js b/apps/site/components/LineChart.js similarity index 100% rename from site/components/LineChart.js rename to apps/site/components/LineChart.js diff --git a/site/components/Nav.js b/apps/site/components/Nav.js similarity index 87% rename from site/components/Nav.js rename to apps/site/components/Nav.js index 16207a34..5009f62e 100644 --- a/site/components/Nav.js +++ b/apps/site/components/Nav.js @@ -1,6 +1,5 @@ -import { Fragment } from 'react' import { Disclosure, Menu, Transition } from '@headlessui/react' -import { BellIcon, MenuIcon, XIcon } from '@heroicons/react/outline' +import { Bars3Icon, XMarkIcon } from '@heroicons/react/24/outline' import Link from 'next/link' import GitHubButton from 'react-next-github-btn' @@ -32,27 +31,24 @@ export default function Nav() { Open main menu {open ? ( -
{navigation.map((item) => ( - - {item.name} - ))}
diff --git a/site/components/Table.js b/apps/site/components/Table.js similarity index 100% rename from site/components/Table.js rename to apps/site/components/Table.js diff --git a/site/content/data-literate.md b/apps/site/content/data-literate.md similarity index 100% rename from site/content/data-literate.md rename to apps/site/content/data-literate.md diff --git a/site/content/data-literate/demo.mdx b/apps/site/content/data-literate/demo.mdx similarity index 100% rename from site/content/data-literate/demo.mdx rename to apps/site/content/data-literate/demo.mdx diff --git a/site/content/docs.md b/apps/site/content/docs.md similarity index 100% rename from site/content/docs.md rename to apps/site/content/docs.md diff --git a/site/content/docs/components.md b/apps/site/content/docs/components.md similarity index 98% rename from site/content/docs/components.md rename to apps/site/content/docs/components.md index 234ba6e9..25496f5c 100644 --- a/site/content/docs/components.md +++ b/apps/site/content/docs/components.md @@ -42,7 +42,7 @@ export default function Home(){ Nav component accepts two properties: * **logo**: A string to an image path. Can be relative or absolute. -* **navMenu**: An array of objects with title and path. E.g : [{ title: 'Blog', path: '/blog' },{ title: 'Search', path: '/search' }] +* **navMenu**: An array of objects with title and path. E.g : [\{ title: 'Blog', path: '/blog' },\{ title: 'Search', path: '/search' }] #### [Recent Component](https://github.com/datopian/portal.js/blob/main/src/components/ui/Recent.js) @@ -346,8 +346,8 @@ export default function Home() { #### Table Component Prop Types Table component accepts two properties: -* **data**: An array of column names with properties: e.g [{field: "col1", headerName: "col1"}, {field: "col2", headerName: "col2"}] -* **columns**: An array of data objects e.g. [ {col1: 1, col2: 2}, {col1: 5, col2: 7} ] +* **data**: An array of column names with properties: e.g [\{field: "col1", headerName: "col1"}, \{field: "col2", headerName: "col2"}] +* **columns**: An array of data objects e.g. [ \{col1: 1, col2: 2}, \{col1: 5, col2: 7} ] ### [Search Components](https://github.com/datopian/portal.js/tree/main/src/components/search) diff --git a/site/content/docs/references.md b/apps/site/content/docs/references.md similarity index 100% rename from site/content/docs/references.md rename to apps/site/content/docs/references.md diff --git a/site/content/gallery.md b/apps/site/content/gallery.md similarity index 100% rename from site/content/gallery.md rename to apps/site/content/gallery.md diff --git a/site/content/learn.md b/apps/site/content/learn.md similarity index 100% rename from site/content/learn.md rename to apps/site/content/learn.md diff --git a/site/content/learn/ckan.md b/apps/site/content/learn/ckan.md similarity index 100% rename from site/content/learn/ckan.md rename to apps/site/content/learn/ckan.md diff --git a/site/content/learn/deploy-to-gh-pages.md b/apps/site/content/learn/deploy-to-gh-pages.md similarity index 100% rename from site/content/learn/deploy-to-gh-pages.md rename to apps/site/content/learn/deploy-to-gh-pages.md diff --git a/site/content/learn/single-frictionless-dataset.md b/apps/site/content/learn/single-frictionless-dataset.md similarity index 100% rename from site/content/learn/single-frictionless-dataset.md rename to apps/site/content/learn/single-frictionless-dataset.md diff --git a/apps/site/index.d.ts b/apps/site/index.d.ts new file mode 100644 index 00000000..7ba08fa1 --- /dev/null +++ b/apps/site/index.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +declare module '*.svg' { + const content: any; + export const ReactComponent: any; + export default content; +} diff --git a/apps/site/jest.config.ts b/apps/site/jest.config.ts new file mode 100644 index 00000000..5e8864ad --- /dev/null +++ b/apps/site/jest.config.ts @@ -0,0 +1,11 @@ +/* eslint-disable */ +export default { + displayName: 'site', + preset: '../../jest.preset.js', + transform: { + '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', + '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nrwl/next/babel'] }], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/apps/site', +}; diff --git a/site/lib/markdown.js b/apps/site/lib/markdown.js similarity index 100% rename from site/lib/markdown.js rename to apps/site/lib/markdown.js diff --git a/examples/data-literate/lib/mdxUtils.js b/apps/site/lib/mdxUtils.js similarity index 90% rename from examples/data-literate/lib/mdxUtils.js rename to apps/site/lib/mdxUtils.js index d89b09f4..4dc031ff 100644 --- a/examples/data-literate/lib/mdxUtils.js +++ b/apps/site/lib/mdxUtils.js @@ -3,7 +3,7 @@ import glob from 'glob' import path from 'path' // POSTS_PATH is useful when you want to get the path to a specific file -export const POSTS_PATH = path.join(process.cwd(), 'content') +export const POSTS_PATH = path.join(process.cwd(), '/apps/site/content') const walkSync = (dir, filelist = []) => { fs.readdirSync(dir).forEach(file => { diff --git a/site/lib/utils.js b/apps/site/lib/utils.js similarity index 100% rename from site/lib/utils.js rename to apps/site/lib/utils.js diff --git a/apps/site/next-env.d.ts b/apps/site/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/apps/site/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/site/next.config.js b/apps/site/next.config.js new file mode 100644 index 00000000..90460201 --- /dev/null +++ b/apps/site/next.config.js @@ -0,0 +1,17 @@ +//@ts-check + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { withNx } = require('@nrwl/next/plugins/with-nx'); + +/** + * @type {import('@nrwl/next/plugins/with-nx').WithNxOptions} + **/ +const nextConfig = { + nx: { + // Set this to true if you would like to use SVGR + // See: https://github.com/gregberge/svgr + svgr: false, + }, +}; + +module.exports = withNx(nextConfig); diff --git a/site/pages/[...slug].js b/apps/site/pages/[...slug].js similarity index 100% rename from site/pages/[...slug].js rename to apps/site/pages/[...slug].js diff --git a/examples/dataset-frictionless/pages/_app.js b/apps/site/pages/_app.js similarity index 100% rename from examples/dataset-frictionless/pages/_app.js rename to apps/site/pages/_app.js diff --git a/site/pages/api/proxy.js b/apps/site/pages/api/proxy.js similarity index 100% rename from site/pages/api/proxy.js rename to apps/site/pages/api/proxy.js diff --git a/site/pages/excel-viewer.js b/apps/site/pages/excel-viewer.js similarity index 100% rename from site/pages/excel-viewer.js rename to apps/site/pages/excel-viewer.js diff --git a/site/pages/index.js b/apps/site/pages/index.js similarity index 100% rename from site/pages/index.js rename to apps/site/pages/index.js diff --git a/apps/site/postcss.config.js b/apps/site/postcss.config.js new file mode 100644 index 00000000..c72626d6 --- /dev/null +++ b/apps/site/postcss.config.js @@ -0,0 +1,15 @@ +const { join } = require('path'); + +// Note: If you use library-specific PostCSS/Tailwind configuration then you should remove the `postcssConfig` build +// option from your application's configuration (i.e. project.json). +// +// See: https://nx.dev/guides/using-tailwind-css-in-react#step-4:-applying-configuration-to-libraries + +module.exports = { + plugins: { + tailwindcss: { + config: join(__dirname, 'tailwind.config.js'), + }, + autoprefixer: {}, + }, +}; diff --git a/apps/site/project.json b/apps/site/project.json new file mode 100644 index 00000000..4ec7b590 --- /dev/null +++ b/apps/site/project.json @@ -0,0 +1,69 @@ +{ + "name": "site", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/site", + "projectType": "application", + "targets": { + "build": { + "executor": "@nrwl/next:build", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "root": "apps/site", + "outputPath": "dist/apps/site" + }, + "configurations": { + "development": { + "outputPath": "apps/site" + }, + "production": {} + } + }, + "serve": { + "executor": "@nrwl/next:server", + "defaultConfiguration": "development", + "options": { + "buildTarget": "site:build", + "dev": true + }, + "configurations": { + "development": { + "buildTarget": "site:build:development", + "dev": true + }, + "production": { + "buildTarget": "site:build:production", + "dev": false + } + } + }, + "export": { + "executor": "@nrwl/next:export", + "options": { + "buildTarget": "site:build:production" + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/site/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/site/**/*.{ts,tsx,js,jsx}"] + } + } + }, + "tags": [] +} diff --git a/apps/site/public/.gitkeep b/apps/site/public/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/site/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv b/apps/site/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv similarity index 100% rename from site/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv rename to apps/site/public/_files/HadCRUT.5.0.1.0.analysis.summary_series.global.annual.csv diff --git a/site/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx b/apps/site/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx similarity index 100% rename from site/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx rename to apps/site/public/_files/eight-centuries-of-global-real-interest-rates-r-g-and-the-suprasecular-decline-1311-2018-data.xlsx diff --git a/site/public/datopian-logo.png b/apps/site/public/datopian-logo.png similarity index 100% rename from site/public/datopian-logo.png rename to apps/site/public/datopian-logo.png diff --git a/examples/default/public/favicon.ico b/apps/site/public/favicon.ico similarity index 100% rename from examples/default/public/favicon.ico rename to apps/site/public/favicon.ico diff --git a/site/public/portaljs-screen-update.png b/apps/site/public/portaljs-screen-update.png similarity index 100% rename from site/public/portaljs-screen-update.png rename to apps/site/public/portaljs-screen-update.png diff --git a/site/public/portaljs-screen.png b/apps/site/public/portaljs-screen.png similarity index 100% rename from site/public/portaljs-screen.png rename to apps/site/public/portaljs-screen.png diff --git a/site/public/scripts/actions/single-dataset-ssg.yml b/apps/site/public/scripts/actions/single-dataset-ssg.yml similarity index 100% rename from site/public/scripts/actions/single-dataset-ssg.yml rename to apps/site/public/scripts/actions/single-dataset-ssg.yml diff --git a/site/public/scripts/assets/sdnocommit.png b/apps/site/public/scripts/assets/sdnocommit.png similarity index 100% rename from site/public/scripts/assets/sdnocommit.png rename to apps/site/public/scripts/assets/sdnocommit.png diff --git a/site/public/scripts/assets/secrets.png b/apps/site/public/scripts/assets/secrets.png similarity index 100% rename from site/public/scripts/assets/secrets.png rename to apps/site/public/scripts/assets/secrets.png diff --git a/site/public/scripts/gh-page-builder-action.yml b/apps/site/public/scripts/gh-page-builder-action.yml similarity index 100% rename from site/public/scripts/gh-page-builder-action.yml rename to apps/site/public/scripts/gh-page-builder-action.yml diff --git a/site/public/scripts/single-dataset-commit.sh b/apps/site/public/scripts/single-dataset-commit.sh similarity index 100% rename from site/public/scripts/single-dataset-commit.sh rename to apps/site/public/scripts/single-dataset-commit.sh diff --git a/site/public/scripts/single-dataset-no-commit.sh b/apps/site/public/scripts/single-dataset-no-commit.sh similarity index 100% rename from site/public/scripts/single-dataset-no-commit.sh rename to apps/site/public/scripts/single-dataset-no-commit.sh diff --git a/apps/site/specs/index.spec.tsx b/apps/site/specs/index.spec.tsx new file mode 100644 index 00000000..42c94022 --- /dev/null +++ b/apps/site/specs/index.spec.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { render } from '@testing-library/react'; + +import Index from '../pages/index'; + +describe('Index', () => { + it('should render successfully', () => { + const { baseElement } = render(); + expect(baseElement).toBeTruthy(); + }); +}); diff --git a/site/styles/globals.css b/apps/site/styles/globals.css similarity index 100% rename from site/styles/globals.css rename to apps/site/styles/globals.css diff --git a/examples/dataset-frictionless/styles/tailwind.css b/apps/site/styles/tailwind.css similarity index 100% rename from examples/dataset-frictionless/styles/tailwind.css rename to apps/site/styles/tailwind.css diff --git a/apps/site/tailwind.config.js b/apps/site/tailwind.config.js new file mode 100644 index 00000000..9a942e21 --- /dev/null +++ b/apps/site/tailwind.config.js @@ -0,0 +1,17 @@ +const { createGlobPatternsForDependencies } = require('@nrwl/react/tailwind'); +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join( + __dirname, + '{src,pages,components}/**/*!(*.stories|*.spec).{ts,tsx,html,js,jsx}' + ), + ...createGlobPatternsForDependencies(__dirname), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/site/tsconfig.json b/apps/site/tsconfig.json new file mode 100644 index 00000000..7a9f3ecf --- /dev/null +++ b/apps/site/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "jsx": "preserve", + "allowJs": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": true, + "types": ["jest", "node"] + }, + "include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "next-env.d.ts"], + "exclude": [ + "node_modules", + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts" + ] +} diff --git a/apps/site/tsconfig.spec.json b/apps/site/tsconfig.spec.json new file mode 100644 index 00000000..214b2cc2 --- /dev/null +++ b/apps/site/tsconfig.spec.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "jsx": "react" + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 00000000..065aee77 --- /dev/null +++ b/babel.config.json @@ -0,0 +1,3 @@ +{ + "babelrcRoots": ["*"] +} diff --git a/bin/.gitignore b/bin/.gitignore deleted file mode 100644 index 67045665..00000000 --- a/bin/.gitignore +++ /dev/null @@ -1,104 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port diff --git a/bin/README.md b/bin/README.md deleted file mode 100644 index f9cbacae..00000000 --- a/bin/README.md +++ /dev/null @@ -1,98 +0,0 @@ -## DataHub CLI - -This command line tool helps you to instantly build and deploy data-driven pages. It doesn't require you to know any frontend technologies (HTML, CSS, JS) so that you can focus on your data. Simply run a command (`datahub deploy`) and get a URL for your data page. - -You can still customize the look and feel of your data-driven pages. It uses [Portal.js][] under the hood and with some basic knowledge of frontend development users can easily get started. - -[Portal.js]: https://portaljs.org/learn - -## Install - -Install the CLI tool: - -```bash -npm install -g 'https://gitpkg.now.sh/datopian/portal.js/bin?main' -# or with yarn -yarn add 'https://gitpkg.now.sh/datopian/portal.js/bin?main' -``` - -Next, confirm if the `datahub` command is available: - -```bash -which datahub -# should print path to the executable -``` - -> Note: It is recommended you install the CLI tool globally so you can run it from anywhere on your machine. - -## Features - -### Show - -Easily preview data-driven pages locally. - -I have a dataset `my-data` with the following content: - -``` -README.md -data.csv -# descriptor is optional (we infer if not there) -datapackage.json -``` - -I can do the following: - -``` -cd my-data -datahub show -``` - -The single show command gives me access to the following: - -* Elegant presentation -* Shows the data in a table etc (searchable / filterable) -* Supports other data formats e.g. json, xlsx etc -* Show graphs -* Data summary - -Show works with: - -* README + csv -* Frictionless dataset -* Frictionless resource -* Pure README with frontmatter - -### Deploy [Not implemented yet] - -Once you are ready to deploy your data: - -``` -datahub deploy -``` - -It starts building your production ready data-driven page and deploys it in the cloud. With the single command you get a URL for you page (e.g., `https://my-data-abcd123.datahub.io`). Now, share it with everyone! - -Why to deploy my data? - -* Deploys a shareable url with the content of show - * Semi-private - * Can integrate access control (?) -* Deploys a data API -* [Other integrations e.g. push to google spreadsheets] -* Dashboard showing your DataHub/Portal projects - -### Extra supported commands -You can directly specify a folder to build from: -```bash -datahub show path=\some\path\dataset -``` - -Optional args you can pass yo the show command are: - -- path: The path to a dataset directory. If blank, defaults to current working directory -- port: The port number to display your dataset in. Defaults to 3000. -- npm: Whether or not to use npm when install packages. Defaults to `false`, uses yarn. - -``` -datahub show [path=\some\path\dataset | port=4000 | npm=true] -``` diff --git a/bin/index.js b/bin/index.js deleted file mode 100755 index 700de2cf..00000000 --- a/bin/index.js +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env node -const Listr = require('listr') -const { program } = require('commander') -const chalk = require('chalk') -const path = require('path') -const figlet = require('figlet') -const { exec } = require('child_process'); -const package = require('./package.json') -const fs = require('fs') - - -console.log( - chalk.yellow(figlet.textSync('Portal App', { horizontalLayout: 'full' })) -) - -function directoryExists(filePath) { - return fs.existsSync(filePath); -} - -/** - * Executes a shell command and return it as a Promise. - * @param cmd {string} - * @return {Promise} - */ -function execShellCommand(cmd) { - return new Promise((resolve, reject) => { - exec(cmd, (error, stdout, stderr) => { - if (error) { - console.warn(error); - reject(error) - } - resolve(stdout ? stdout : stderr); - }); - }); -} - -function processArgs(args) { - const userArgs = { npm: true, override: false, port: 3000, path: process.cwd() } - args.forEach((arg) => { - if (arg.includes("=")) { - let temp = arg.split("=") - userArgs[temp[0]] = temp[1] - } - }) - return userArgs -} -// Output path to create new portal app - - -// Commander parameters to specify CLI behavior -program - .version(package.version) - .usage('show [ path=/some/path | npm=true | port=3000 ]') - .description('Creates a portal application from specified dataset', - ) - .option('npm', '[true || false] Install dependencies using npm instead yarn, defaults to false (yarn)') - .option('port', 'Server port, defaults to 3000') - .parse(process.argv,) - -const userArgs = processArgs(program.args) - - -/** - * Main method to start CLI and validate inputs - */ -async function run() { - const datasetPath = userArgs.path.trim() - - if (directoryExists(datasetPath)) { - console.log( - `${chalk.yellow(`Using dataset found in: ${chalk.cyan(datasetPath)}`)}` - ) - } else { - console.log( - `${chalk.red(`Directory: ${chalk.cyan(datasetPath)} does not exist!`)}` - ) - process.exit(1) - } - - const portalGithubRepo = 'https://github.com/datopian/portal.js/tree/main/examples/dataset-frictionless' - const portalLocalRepoDirectory = path.join(datasetPath, 'portal') - - const cloneRepoCmd = `cd ${datasetPath} && npx create-next-app portal -e ${portalGithubRepo}` - - // CD into portalLocalRepoDirectory, create an .env file and write PORTAL_DATASET_PATH={datasetPath} to it - const createEnvFileCmd = `cd ${portalLocalRepoDirectory} && touch .env && echo PORTAL_DATASET_PATH=${datasetPath} >> .env` - - const buildNextAppCmd = userArgs.npm ? `cd ${portalLocalRepoDirectory} && npm install && npm run build` : - `cd ${portalLocalRepoDirectory} && yarn && yarn build` - - const startNextAppCmd = userArgs.npm ? - `cd ${portalLocalRepoDirectory} && PORT=${userArgs.port} npm run start` : - `cd ${portalLocalRepoDirectory} && yarn start -p ${userArgs.port}` - - - //Tasks workflow - const tasks = new Listr([ - { - title: 'Getting portal tools...', - task: async () => { - try { - if (directoryExists(portalLocalRepoDirectory)) { - console.log( - chalk.cyan(`${package.name} ${chalk.yellow('already exists! Skipping this step')}`)) - } else { - await execShellCommand(cloneRepoCmd) - } - - } catch (error) { - throw error - } - }, - }, - { - title: 'Preparing app environment', - task: async () => {await execShellCommand(createEnvFileCmd)}, - }, - { - title: 'Building app...', - task: async () => { await execShellCommand(buildNextAppCmd) } - }, - { - title: `Displaying dataset at http://localhost:${userArgs.port}`, - task: () => execShellCommand(startNextAppCmd), - } - ]) - - tasks.run() -} - -run().catch((error) => { - console.log(error) - console.log() - process.exit(1) -}) diff --git a/bin/package-lock.json b/bin/package-lock.json deleted file mode 100644 index 48433e5f..00000000 --- a/bin/package-lock.json +++ /dev/null @@ -1,4725 +0,0 @@ -{ - "name": "portal-cli-app", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "portal-cli-app", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "chalk": "^4.1.0", - "commander": "^6.2.0", - "cpy": "^8.1.1", - "cross-spawn": "^7.0.3", - "figlet": "^1.5.0", - "listr": "^0.14.3", - "open": "^8.0.2", - "ora": "^5.1.0", - "prompts": "^2.4.0" - }, - "bin": { - "datahub": "index.js" - } - }, - "node_modules/@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "license": "MIT", - "dependencies": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "license": "MIT", - "dependencies": { - "any-observable": "^0.3.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } - } - }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", - "license": "MIT" - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "license": "MIT" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "license": "MIT" - }, - "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "license": "MIT", - "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "license": "MIT" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cpy": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.1.tgz", - "integrity": "sha512-vqHT+9o67sMwJ5hUd/BAOYeemkU+MuFRsK2c36Xc3eefQpAsp1kAsyDxEDcc5JS1+y9l/XHPrIsVTcyGGmkUUQ==", - "license": "MIT", - "dependencies": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "license": "MIT", - "dependencies": { - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "license": "MIT", - "dependencies": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/fast-glob/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "license": "ISC" - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "license": "BSD" - }, - "node_modules/globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "license": "ISC" - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", - "license": "MIT", - "dependencies": { - "is-glob": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "license": "MIT", - "dependencies": { - "symbol-observable": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "license": "MIT" - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "license": "MIT", - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "listr": "^0.14.2" - } - }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "license": "MIT", - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/listr-verbose-renderer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "license": "MIT" - }, - "node_modules/listr-verbose-renderer/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "license": "MIT" - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "license": "MIT" - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/open": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.0.2.tgz", - "integrity": "sha512-NV5QmWJrTaNBLHABJyrb+nd5dXI5zfea/suWawBhkHzAbVhLLiJdrqMgxMypGK9Eznp2Ltoh7SAVkQ3XAucX7Q==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-all": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", - "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "license": "MIT", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "license": "MIT" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "license": "MIT" - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rxjs": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", - "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "license": "MIT" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "license": "MIT", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "license": "ISC" - } - }, - "dependencies": { - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "requires": { - "any-observable": "^0.3.0" - } - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - } - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==" - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - } - }, - "cpy": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.1.tgz", - "integrity": "sha512-vqHT+9o67sMwJ5hUd/BAOYeemkU+MuFRsK2c36Xc3eefQpAsp1kAsyDxEDcc5JS1+y9l/XHPrIsVTcyGGmkUUQ==", - "requires": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "dependencies": { - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "requires": { - "path-type": "^3.0.0" - } - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", - "requires": { - "is-glob": "^3.0.0" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "requires": { - "chalk": "^4.0.0" - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.0.2.tgz", - "integrity": "sha512-NV5QmWJrTaNBLHABJyrb+nd5dXI5zfea/suWawBhkHzAbVhLLiJdrqMgxMypGK9Eznp2Ltoh7SAVkQ3XAucX7Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "requires": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "p-all": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", - "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", - "requires": { - "p-map": "^2.0.0" - } - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "requires": { - "p-map": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "requires": { - "p-finally": "^1.0.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rxjs": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", - "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/bin/package.json b/bin/package.json deleted file mode 100644 index 13903650..00000000 --- a/bin/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "portal-cli-app", - "version": "1.0.0", - "description": "Simple CLI for displaying and publishing dataset pages", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "chalk": "^4.1.0", - "commander": "^6.2.0", - "cpy": "^8.1.1", - "cross-spawn": "^7.0.3", - "figlet": "^1.5.0", - "listr": "^0.14.3", - "open": "^8.0.2", - "ora": "^5.1.0", - "prompts": "^2.4.0" - }, - "files": [ - "bin" - ], - "bin": { - "datahub": "index.js" - } -} diff --git a/dist/index.cjs.js b/dist/index.cjs.js deleted file mode 100644 index ecc232b5..00000000 --- a/dist/index.cjs.js +++ /dev/null @@ -1,839 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var react = require('react'); -var dataGrid = require('@material-ui/data-grid'); -var PropTypes = require('prop-types'); -var jsxRuntime = require('react/jsx-runtime'); -var createPlotlyComponent = require('react-plotly.js/factory'); -var filesize = require('filesize'); -var timeago = require('timeago.js'); -var xDataGrid = require('@mui/x-data-grid'); -var FileDownloadIcon = require('@mui/icons-material/FileDownload'); -var InsertDriveFileIcon = require('@mui/icons-material/InsertDriveFile'); -var FolderIcon = require('@mui/icons-material/Folder'); -var Link = require('next/link'); -var parse = require('html-react-parser'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { - return e[k]; - } - }); - } - }); - } - n['default'] = e; - return Object.freeze(n); -} - -var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes); -var createPlotlyComponent__default = /*#__PURE__*/_interopDefaultLegacy(createPlotlyComponent); -var filesize__default = /*#__PURE__*/_interopDefaultLegacy(filesize); -var timeago__namespace = /*#__PURE__*/_interopNamespace(timeago); -var FileDownloadIcon__default = /*#__PURE__*/_interopDefaultLegacy(FileDownloadIcon); -var InsertDriveFileIcon__default = /*#__PURE__*/_interopDefaultLegacy(InsertDriveFileIcon); -var FolderIcon__default = /*#__PURE__*/_interopDefaultLegacy(FolderIcon); -var Link__default = /*#__PURE__*/_interopDefaultLegacy(Link); -var parse__default = /*#__PURE__*/_interopDefaultLegacy(parse); - -const Table = ({ - columns, - data, - height, - width -}) => { - let rows = [...data]; - rows = rows.map((row, i) => { - row['id'] = i; - return row; - }); - return /*#__PURE__*/jsxRuntime.jsx("div", { - style: { - height, - width - }, - "data-testid": "tableGrid", - children: /*#__PURE__*/jsxRuntime.jsx(dataGrid.DataGrid, { - rows: rows, - columns: columns, - pageSize: 5 - }) - }); -}; - -Table.propTypes = { - columns: PropTypes__default['default'].array.isRequired, - data: PropTypes__default['default'].array.isRequired -}; - -let Plot; - -const PlotlyChart = ({ - spec -}) => { - const [plotCreated, setPlotCreated] = react.useState(0); //0: false, 1: true - - react.useEffect(() => { - Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('plotly.js-basic-dist')); }).then(Plotly => { - //import Plotly dist when Page has been generated - Plot = createPlotlyComponent__default['default'](Plotly); - setPlotCreated(1); - }); - }, []); - - if (!plotCreated) { - return /*#__PURE__*/jsxRuntime.jsx("div", { - children: "Loading..." - }); - } - - return /*#__PURE__*/jsxRuntime.jsx("div", { - "data-testid": "plotlyChart", - children: /*#__PURE__*/jsxRuntime.jsx(Plot, { ...spec, - layout: { - autosize: true - }, - style: { - width: "100%", - height: "100%" - }, - useResizeHandler: true - }) - }); -}; - -PlotlyChart.propTypes = { - spec: PropTypes__default['default'].object.isRequired -}; - -const KeyInfo = ({ - descriptor, - resources -}) => { - const formats = resources.map(item => item.format).join(', '); - return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, { - children: /*#__PURE__*/jsxRuntime.jsxs("section", { - className: "m-8", - name: "key-info", - id: "key-info", - children: [/*#__PURE__*/jsxRuntime.jsx("h2", { - className: "text-xl font-bold mb-4", - children: "Key info" - }), /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Files" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Size" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Format" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Created" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Updated" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Licenses" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Sources" - }) - })] - }), /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resources.length - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: descriptor.size || 'N/A' - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: formats - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: descriptor.created && timeago__namespace.format(descriptor.created) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: descriptor.updated && timeago__namespace.format(descriptor.updated) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: descriptor.licenses?.length && descriptor.licenses.map((item, index) => /*#__PURE__*/jsxRuntime.jsx("a", { - className: "text-yellow-600", - href: item.path || '#', - title: item.title || '', - children: item.name - }, index)) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: descriptor.sources?.length && descriptor.sources.map((item, index) => /*#__PURE__*/jsxRuntime.jsx("a", { - className: "text-yellow-600", - href: item.path, - children: item.title - }, index)) - }) - })] - })] - }) - }); -}; - -KeyInfo.propTypes = { - descriptor: PropTypes__default['default'].object.isRequired, - resources: PropTypes__default['default'].array.isRequired -}; - -const ResourcesInfo = ({ - resources -}) => { - return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, { - children: /*#__PURE__*/jsxRuntime.jsxs("section", { - className: "m-8", - name: "file-list", - children: [/*#__PURE__*/jsxRuntime.jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "File" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Description" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Size" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Created" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Updated" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Download" - }) - })] - }), resources.map((resource, index) => { - return /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resource.title || resource.name - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resource.description || "No description" - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resource.size ? filesize__default['default'](resource.size, { - bits: true - }) : 0 - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resource.created && timeago__namespace.format(resource.created) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: resource.updated && timeago__namespace.format(resource.updated) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: /*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-1xl", - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "text-yellow-600", - href: resource.path, - children: resource.format - }) - }) - })] - }, `${index}_${resource.name}`); - })] - }) - }); -}; - -ResourcesInfo.propTypes = { - resources: PropTypes__default['default'].array.isRequired -}; - -const ReadMe = ({ - readme -}) => { - return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, { - children: /*#__PURE__*/jsxRuntime.jsx("section", { - className: "m-8", - name: "sample-table", - children: /*#__PURE__*/jsxRuntime.jsx("div", { - className: "prose", - children: /*#__PURE__*/jsxRuntime.jsx("div", { - dangerouslySetInnerHTML: { - __html: readme - } - }) - }) - }) - }); -}; - -ReadMe.propTypes = { - readme: PropTypes__default['default'].string.isRequired -}; - -const DataExplorer = ({ - resources, - columnHeaderStyle -}) => { - const [activeTable, setActiveTable] = react.useState(0); - const [previewMode, setPreviewMode] = react.useState(true); - - const handleTableNameClick = index => { - setActiveTable(index); - }; - - const getDataGridTable = (resource, columnHeaderStyle) => { - return /*#__PURE__*/jsxRuntime.jsx(xDataGrid.DataGrid, { - sx: { - '& .table-column-header-style-class': { - backgroundColor: '#f5f5f5', - color: 'black', - ...columnHeaderStyle - } - }, - columns: generateColumns(resource), - rows: prepareRows(resource), - pageSize: 5, - rowsPerPageOptions: [5] - }, resource.name); - }; - - const getDataGridSchema = (resource, columnHeaderStyle) => { - return /*#__PURE__*/jsxRuntime.jsx(xDataGrid.DataGrid, { - sx: { - '& .table-column-header-style-class': { - backgroundColor: '#f5f5f5', - color: 'black', - ...columnHeaderStyle - } - }, - columns: generateSchemaColumns(), - rows: prepareSchemaRows(resource), - pageSize: 5, - rowsPerPageOptions: [5] - }, resource.name); - }; - - return /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "grid grid-cols-12", - children: [/*#__PURE__*/jsxRuntime.jsxs("div", { - className: "col-span-3", - children: [/*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsxRuntime.jsx(FolderIcon__default['default'], {}), /*#__PURE__*/jsxRuntime.jsx("h1", { - className: "font-bold ml-3", - children: "Files" - })] - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "flex-col", - children: resources.map((resource, i) => { - return /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsxRuntime.jsx(InsertDriveFileIcon__default['default'], { - className: "ml-2" - }), /*#__PURE__*/jsxRuntime.jsx("button", { - className: "ml-3 focus:outline-none", - id: i, - onClick: () => handleTableNameClick(i), - children: i === activeTable ? /*#__PURE__*/jsxRuntime.jsxs("h3", { - children: [resource.name, ".", resource.format] - }) : /*#__PURE__*/jsxRuntime.jsxs("h3", { - className: "text-gray-400", - children: [resource.name, ".", resource.format] - }) - })] - }, `res@${i}`); - }) - })] - }), /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "col-span-9 border-2", - children: [/*#__PURE__*/jsxRuntime.jsx("h1", { - className: "font-bold ml-3 mb-2 capitalize", - children: resources[activeTable].name - }), /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex mr-3", - children: [/*#__PURE__*/jsxRuntime.jsx("a", { - href: resources[activeTable].path, - children: /*#__PURE__*/jsxRuntime.jsx(FileDownloadIcon__default['default'], { - className: "ml-2" - }) - }), /*#__PURE__*/jsxRuntime.jsx("span", { - children: resources[activeTable].size ? formatResourceSize(resources[activeTable].size) : 'N/A' - })] - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "mr-3 text-gray-500", - children: "|" - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "flex mr-3", - children: /*#__PURE__*/jsxRuntime.jsxs("span", { - children: [resources[activeTable].sample.length, " rows"] - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "mr-3 text-gray-500", - children: "|" - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "flex mr-3", - children: /*#__PURE__*/jsxRuntime.jsxs("span", { - children: [resources[activeTable].schema.fields.length, " columns"] - }) - })] - }), /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex mt-5 mb-4", - children: [/*#__PURE__*/jsxRuntime.jsx("button", { - className: `${previewMode && 'font-bold underline'} ml-3 mr-5 focus:outline-none`, - onClick: () => setPreviewMode(!previewMode), - children: "Preview" - }), /*#__PURE__*/jsxRuntime.jsx("button", { - className: `${!previewMode && 'font-bold underline'} ml-3 mr-5 focus:outline-none`, - onClick: () => setPreviewMode(!previewMode), - children: "Table Schema" - })] - }), previewMode && /*#__PURE__*/jsxRuntime.jsx("div", { - className: "ml-3", - style: { - height: "370px" - }, - children: getDataGridTable(resources[activeTable], columnHeaderStyle) - }), !previewMode && /*#__PURE__*/jsxRuntime.jsx("div", { - className: "ml-3", - style: { - height: "370px" - }, - children: getDataGridSchema(resources[activeTable], columnHeaderStyle) - })] - })] - }); -}; - -const generateColumns = resource => { - return resource.schema?.fields.map(field => { - return { - field: field.name, - headerName: field.name, - width: 150, - description: field.description, - headerClassName: 'table-column-header-style-class' - }; - }); -}; - -const prepareRows = resource => { - return resource.sample.map((row, i) => { - row['id'] = i; - return row; - }); -}; - -const generateSchemaColumns = () => { - return [{ - field: "name", - headerName: "Field", - flex: 0.5, - description: "Field name", - headerClassName: 'table-column-header-style-class' - }, { - field: "type", - headerName: "Type", - width: 150, - description: "Field type", - headerClassName: 'table-column-header-style-class' - }, { - field: "description", - headerName: "Description", - flex: 1, - description: "Field description", - headerClassName: 'table-column-header-style-class' - }]; -}; - -const prepareSchemaRows = resource => { - return resource.schema?.fields.map((field, i) => { - field['id'] = i; - return field; - }); -}; - -const formatResourceSize = bytes => { - if (bytes < 1024) { - return bytes + ' b'; - } else if (bytes < 1048576) { - return (bytes / 1024).toFixed(2) + ' kb'; - } else if (bytes < 1073741824) { - return (bytes / 1048576).toFixed(2) + ' mb'; - } else { - return bytes; - } -}; - -DataExplorer.propTypes = { - resources: PropTypes__default['default'].array.isRequired -}; - -const Org = ({ - organization -}) => { - return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, { - children: organization ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/*#__PURE__*/jsxRuntime.jsx("img", { - src: organization.image_url || 'https://datahub.io/static/img/datahub-cube-edited.svg', - className: "h-5 w-5 mr-2 inline-block", - alt: "org_img" - }), /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: `/@${organization.name}`, - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "font-semibold text-primary underline", - children: organization.title || organization.name - }) - })] - }) : '' - }); -}; - -Org.propTypes = { - organization: PropTypes__default['default'].object.isRequired -}; - -const Post = ({ - post -}) => { - const { - title, - content, - createdAt, - featuredImage - } = post; - return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/*#__PURE__*/jsxRuntime.jsx("h1", { - className: "text-3xl font-semibold text-primary my-6 inline-block", - children: title - }), /*#__PURE__*/jsxRuntime.jsxs("p", { - className: "mb-6", - children: ["Posted: ", createdAt] - }), /*#__PURE__*/jsxRuntime.jsx("img", { - src: featuredImage, - className: "mb-6", - alt: "featured_img" - }), /*#__PURE__*/jsxRuntime.jsx("div", { - children: parse__default['default'](content) - })] - }); -}; - -Post.propTypes = { - page: PropTypes__default['default'].shape({ - title: PropTypes__default['default'].string.isRequired, - content: PropTypes__default['default'].string.isRequired, - createdAt: PropTypes__default['default'].number, - featuredImage: PropTypes__default['default'].string - }) -}; - -const PostList = ({ - posts -}) => { - return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, { - children: posts.map((post, index) => /*#__PURE__*/jsxRuntime.jsxs("div", { - children: [/*#__PURE__*/jsxRuntime.jsx("a", { - href: `/blog/${post.slug}`, - className: "text-2xl font-semibold text-primary my-6 inline-block", - children: parse__default['default'](post.title) - }), /*#__PURE__*/jsxRuntime.jsx("p", { - children: parse__default['default'](post.excerpt) - })] - }, index)) - }); -}; - -PostList.propTypes = { - posts: PropTypes__default['default'].object.isRequired -}; - -const ErrorMessage = ({ - message -}) => { - return /*#__PURE__*/jsxRuntime.jsxs("aside", { - children: [message, /*#__PURE__*/jsxRuntime.jsx("style", { - jsx: true, - children: ` - aside { - padding: 1.5em; - font-size: 14px; - color: white; - background-color: red; - } - ` - })] - }); -}; - -ErrorMessage.propTypes = { - message: PropTypes__default['default'].string.isRequired -}; - -const CustomLink = ({ - url, - title -}) => /*#__PURE__*/jsxRuntime.jsx("a", { - href: url, - className: "bg-white hover:bg-gray-200 border text-black font-semibold py-2 px-4 rounded", - children: title -}); - -CustomLink.propTypes = { - url: PropTypes__default['default'].string.isRequired, - title: PropTypes__default['default'].string.isRequired -}; - -const Nav = ({ - logo, - navMenu -}) => { - const [open, setOpen] = react.useState(false); - - const handleClick = event => { - event.preventDefault(); - setOpen(!open); - }; - - return /*#__PURE__*/jsxRuntime.jsxs("nav", { - className: "flex items-center justify-between flex-wrap bg-white p-4 border-b border-gray-200", - children: [/*#__PURE__*/jsxRuntime.jsx("div", { - className: "flex items-center flex-shrink-0 text-gray-700 mr-6", - children: /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: "/", - children: /*#__PURE__*/jsxRuntime.jsx("img", { - src: logo, - alt: "portal logo", - width: "40" - }) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "block lg:hidden mx-4", - children: /*#__PURE__*/jsxRuntime.jsx("button", { - onClick: handleClick, - className: "flex items-center px-3 py-2 border rounded text-gray-700 border-orange-400 hover:text-black hover:border-black", - children: /*#__PURE__*/jsxRuntime.jsxs("svg", { - className: "fill-current h-3 w-3", - viewBox: "0 0 20 20", - xmlns: "http://www.w3.org/2000/svg", - children: [/*#__PURE__*/jsxRuntime.jsx("title", { - children: "Menu" - }), /*#__PURE__*/jsxRuntime.jsx("path", { - d: "M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" - })] - }) - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: `${open ? `block` : `hidden`} lg:block`, - children: navMenu.map((menu, index) => { - return /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: menu.path, - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "block mt-4 lg:inline-block lg:mt-0 active:bg-primary-background text-gray-700 hover:text-black mr-6", - children: menu.title - }) - }, index); - }) - })] - }); -}; - -Nav.propTypes = { - logo: PropTypes__default['default'].string.isRequired, - navMenu: PropTypes__default['default'].array.isRequired -}; - -const Recent = ({ - datasets -}) => { - return /*#__PURE__*/jsxRuntime.jsx("section", { - className: "my-10 mx-4 lg:my-20", - children: /*#__PURE__*/jsxRuntime.jsx("div", { - className: "recent flex flex-col lg:flex-row", - children: datasets.map((dataset, index) => /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "border px-4 mb-4 mr-3 border-gray-100 w-5/6 shadow-sm", - children: [/*#__PURE__*/jsxRuntime.jsx("h1", { - className: "text-2xl font-thin", - children: dataset.title - }), /*#__PURE__*/jsxRuntime.jsx("p", { - className: "text-gray-500", - children: dataset.organization && dataset.organization.description - }), /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}/${dataset.name}`, - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "pt-3 flex justify-end text-orange-500", - children: "View Dataset" - }) - })] - }, index)) - }) - }); -}; - -Recent.propTypes = { - datasets: PropTypes__default['default'].array.isRequired -}; - -const Form = ({ - handleSubmit -}) => { - const [searchQuery, setSearchQuery] = react.useState(""); - return /*#__PURE__*/jsxRuntime.jsx("form", { - onSubmit: e => e.preventDefault(), - className: "items-center", - children: /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsxRuntime.jsx("input", { - type: "text", - name: "search#q", - value: searchQuery, - onChange: e => { - setSearchQuery(e.target.value); - }, - placeholder: "Search", - "aria-label": "Search", - className: "bg-white focus:outline-none focus:shadow-outline border border-gray-300 w-1/2 rounded-lg py-2 px-4 block appearance-none leading-normal" - }), /*#__PURE__*/jsxRuntime.jsx("button", { - onClick: () => handleSubmit(searchQuery), - type: "button", - className: "inline-block text-sm px-4 py-3 mx-3 leading-none border rounded text-white bg-black border-black lg:mt-0", - children: "Search" - })] - }) - }); -}; - -Form.propTypes = { - handleSubmit: PropTypes__default['default'].func.isRequired -}; - -const Item = ({ - dataset -}) => { - return /*#__PURE__*/jsxRuntime.jsxs("div", { - className: "mb-6", - children: [/*#__PURE__*/jsxRuntime.jsx("h3", { - className: "text-xl font-semibold", - children: /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}/${dataset.name}`, - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "text-primary", - children: dataset.title || dataset.name - }) - }) - }), /*#__PURE__*/jsxRuntime.jsx(Link__default['default'], { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}`, - children: /*#__PURE__*/jsxRuntime.jsx("a", { - className: "text-gray-500 block mt-1", - children: dataset.organization ? dataset.organization.title : 'dataset' - }) - }), /*#__PURE__*/jsxRuntime.jsx("div", { - className: "leading-relaxed mt-2", - children: dataset.description || dataset.notes - })] - }); -}; - -Item.propTypes = { - dataset: PropTypes__default['default'].object.isRequired -}; - -const Total = ({ - count -}) => { - return /*#__PURE__*/jsxRuntime.jsxs("h1", { - className: "text-3xl font-semibold text-primary my-6 inline-block", - children: [count, " results found"] - }); -}; - -Total.propTypes = { - count: PropTypes__default['default'].number.isRequired -}; - -exports.CustomLink = CustomLink; -exports.DataExplorer = DataExplorer; -exports.Error = ErrorMessage; -exports.Form = Form; -exports.Item = Item; -exports.ItemTotal = Total; -exports.KeyInfo = KeyInfo; -exports.Nav = Nav; -exports.Org = Org; -exports.PlotlyChart = PlotlyChart; -exports.Post = Post; -exports.PostList = PostList; -exports.ReadMe = ReadMe; -exports.Recent = Recent; -exports.ResourceInfo = ResourcesInfo; -exports.Table = Table; diff --git a/dist/index.esm.js b/dist/index.esm.js deleted file mode 100644 index 7dc189f5..00000000 --- a/dist/index.esm.js +++ /dev/null @@ -1,788 +0,0 @@ -import { useState, useEffect } from 'react'; -import { DataGrid } from '@material-ui/data-grid'; -import PropTypes from 'prop-types'; -import { jsx, Fragment, jsxs } from 'react/jsx-runtime'; -import createPlotlyComponent from 'react-plotly.js/factory'; -import filesize from 'filesize'; -import * as timeago from 'timeago.js'; -import { DataGrid as DataGrid$1 } from '@mui/x-data-grid'; -import FileDownloadIcon from '@mui/icons-material/FileDownload'; -import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; -import FolderIcon from '@mui/icons-material/Folder'; -import Link from 'next/link'; -import parse from 'html-react-parser'; - -const Table = ({ - columns, - data, - height, - width -}) => { - let rows = [...data]; - rows = rows.map((row, i) => { - row['id'] = i; - return row; - }); - return /*#__PURE__*/jsx("div", { - style: { - height, - width - }, - "data-testid": "tableGrid", - children: /*#__PURE__*/jsx(DataGrid, { - rows: rows, - columns: columns, - pageSize: 5 - }) - }); -}; - -Table.propTypes = { - columns: PropTypes.array.isRequired, - data: PropTypes.array.isRequired -}; - -let Plot; - -const PlotlyChart = ({ - spec -}) => { - const [plotCreated, setPlotCreated] = useState(0); //0: false, 1: true - - useEffect(() => { - import('plotly.js-basic-dist').then(Plotly => { - //import Plotly dist when Page has been generated - Plot = createPlotlyComponent(Plotly); - setPlotCreated(1); - }); - }, []); - - if (!plotCreated) { - return /*#__PURE__*/jsx("div", { - children: "Loading..." - }); - } - - return /*#__PURE__*/jsx("div", { - "data-testid": "plotlyChart", - children: /*#__PURE__*/jsx(Plot, { ...spec, - layout: { - autosize: true - }, - style: { - width: "100%", - height: "100%" - }, - useResizeHandler: true - }) - }); -}; - -PlotlyChart.propTypes = { - spec: PropTypes.object.isRequired -}; - -const KeyInfo = ({ - descriptor, - resources -}) => { - const formats = resources.map(item => item.format).join(', '); - return /*#__PURE__*/jsx(Fragment, { - children: /*#__PURE__*/jsxs("section", { - className: "m-8", - name: "key-info", - id: "key-info", - children: [/*#__PURE__*/jsx("h2", { - className: "text-xl font-bold mb-4", - children: "Key info" - }), /*#__PURE__*/jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Files" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Size" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Format" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Created" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Updated" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Licenses" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Sources" - }) - })] - }), /*#__PURE__*/jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resources.length - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: descriptor.size || 'N/A' - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: formats - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: descriptor.created && timeago.format(descriptor.created) - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: descriptor.updated && timeago.format(descriptor.updated) - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: descriptor.licenses?.length && descriptor.licenses.map((item, index) => /*#__PURE__*/jsx("a", { - className: "text-yellow-600", - href: item.path || '#', - title: item.title || '', - children: item.name - }, index)) - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: descriptor.sources?.length && descriptor.sources.map((item, index) => /*#__PURE__*/jsx("a", { - className: "text-yellow-600", - href: item.path, - children: item.title - }, index)) - }) - })] - })] - }) - }); -}; - -KeyInfo.propTypes = { - descriptor: PropTypes.object.isRequired, - resources: PropTypes.array.isRequired -}; - -const ResourcesInfo = ({ - resources -}) => { - return /*#__PURE__*/jsx(Fragment, { - children: /*#__PURE__*/jsxs("section", { - className: "m-8", - name: "file-list", - children: [/*#__PURE__*/jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "File" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Description" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Size" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Created" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Updated" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl font-bold mb-2", - children: "Download" - }) - })] - }), resources.map((resource, index) => { - return /*#__PURE__*/jsxs("div", { - className: "grid grid-cols-7 gap-4", - children: [/*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resource.title || resource.name - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resource.description || "No description" - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resource.size ? filesize(resource.size, { - bits: true - }) : 0 - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resource.created && timeago.format(resource.created) - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: resource.updated && timeago.format(resource.updated) - }) - }), /*#__PURE__*/jsx("div", { - children: /*#__PURE__*/jsx("h3", { - className: "text-1xl", - children: /*#__PURE__*/jsx("a", { - className: "text-yellow-600", - href: resource.path, - children: resource.format - }) - }) - })] - }, `${index}_${resource.name}`); - })] - }) - }); -}; - -ResourcesInfo.propTypes = { - resources: PropTypes.array.isRequired -}; - -const ReadMe = ({ - readme -}) => { - return /*#__PURE__*/jsx(Fragment, { - children: /*#__PURE__*/jsx("section", { - className: "m-8", - name: "sample-table", - children: /*#__PURE__*/jsx("div", { - className: "prose", - children: /*#__PURE__*/jsx("div", { - dangerouslySetInnerHTML: { - __html: readme - } - }) - }) - }) - }); -}; - -ReadMe.propTypes = { - readme: PropTypes.string.isRequired -}; - -const DataExplorer = ({ - resources, - columnHeaderStyle -}) => { - const [activeTable, setActiveTable] = useState(0); - const [previewMode, setPreviewMode] = useState(true); - - const handleTableNameClick = index => { - setActiveTable(index); - }; - - const getDataGridTable = (resource, columnHeaderStyle) => { - return /*#__PURE__*/jsx(DataGrid$1, { - sx: { - '& .table-column-header-style-class': { - backgroundColor: '#f5f5f5', - color: 'black', - ...columnHeaderStyle - } - }, - columns: generateColumns(resource), - rows: prepareRows(resource), - pageSize: 5, - rowsPerPageOptions: [5] - }, resource.name); - }; - - const getDataGridSchema = (resource, columnHeaderStyle) => { - return /*#__PURE__*/jsx(DataGrid$1, { - sx: { - '& .table-column-header-style-class': { - backgroundColor: '#f5f5f5', - color: 'black', - ...columnHeaderStyle - } - }, - columns: generateSchemaColumns(), - rows: prepareSchemaRows(resource), - pageSize: 5, - rowsPerPageOptions: [5] - }, resource.name); - }; - - return /*#__PURE__*/jsxs("div", { - className: "grid grid-cols-12", - children: [/*#__PURE__*/jsxs("div", { - className: "col-span-3", - children: [/*#__PURE__*/jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsx(FolderIcon, {}), /*#__PURE__*/jsx("h1", { - className: "font-bold ml-3", - children: "Files" - })] - }), /*#__PURE__*/jsx("div", { - className: "flex-col", - children: resources.map((resource, i) => { - return /*#__PURE__*/jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsx(InsertDriveFileIcon, { - className: "ml-2" - }), /*#__PURE__*/jsx("button", { - className: "ml-3 focus:outline-none", - id: i, - onClick: () => handleTableNameClick(i), - children: i === activeTable ? /*#__PURE__*/jsxs("h3", { - children: [resource.name, ".", resource.format] - }) : /*#__PURE__*/jsxs("h3", { - className: "text-gray-400", - children: [resource.name, ".", resource.format] - }) - })] - }, `res@${i}`); - }) - })] - }), /*#__PURE__*/jsxs("div", { - className: "col-span-9 border-2", - children: [/*#__PURE__*/jsx("h1", { - className: "font-bold ml-3 mb-2 capitalize", - children: resources[activeTable].name - }), /*#__PURE__*/jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsxs("div", { - className: "flex mr-3", - children: [/*#__PURE__*/jsx("a", { - href: resources[activeTable].path, - children: /*#__PURE__*/jsx(FileDownloadIcon, { - className: "ml-2" - }) - }), /*#__PURE__*/jsx("span", { - children: resources[activeTable].size ? formatResourceSize(resources[activeTable].size) : 'N/A' - })] - }), /*#__PURE__*/jsx("div", { - className: "mr-3 text-gray-500", - children: "|" - }), /*#__PURE__*/jsx("div", { - className: "flex mr-3", - children: /*#__PURE__*/jsxs("span", { - children: [resources[activeTable].sample.length, " rows"] - }) - }), /*#__PURE__*/jsx("div", { - className: "mr-3 text-gray-500", - children: "|" - }), /*#__PURE__*/jsx("div", { - className: "flex mr-3", - children: /*#__PURE__*/jsxs("span", { - children: [resources[activeTable].schema.fields.length, " columns"] - }) - })] - }), /*#__PURE__*/jsxs("div", { - className: "flex mt-5 mb-4", - children: [/*#__PURE__*/jsx("button", { - className: `${previewMode && 'font-bold underline'} ml-3 mr-5 focus:outline-none`, - onClick: () => setPreviewMode(!previewMode), - children: "Preview" - }), /*#__PURE__*/jsx("button", { - className: `${!previewMode && 'font-bold underline'} ml-3 mr-5 focus:outline-none`, - onClick: () => setPreviewMode(!previewMode), - children: "Table Schema" - })] - }), previewMode && /*#__PURE__*/jsx("div", { - className: "ml-3", - style: { - height: "370px" - }, - children: getDataGridTable(resources[activeTable], columnHeaderStyle) - }), !previewMode && /*#__PURE__*/jsx("div", { - className: "ml-3", - style: { - height: "370px" - }, - children: getDataGridSchema(resources[activeTable], columnHeaderStyle) - })] - })] - }); -}; - -const generateColumns = resource => { - return resource.schema?.fields.map(field => { - return { - field: field.name, - headerName: field.name, - width: 150, - description: field.description, - headerClassName: 'table-column-header-style-class' - }; - }); -}; - -const prepareRows = resource => { - return resource.sample.map((row, i) => { - row['id'] = i; - return row; - }); -}; - -const generateSchemaColumns = () => { - return [{ - field: "name", - headerName: "Field", - flex: 0.5, - description: "Field name", - headerClassName: 'table-column-header-style-class' - }, { - field: "type", - headerName: "Type", - width: 150, - description: "Field type", - headerClassName: 'table-column-header-style-class' - }, { - field: "description", - headerName: "Description", - flex: 1, - description: "Field description", - headerClassName: 'table-column-header-style-class' - }]; -}; - -const prepareSchemaRows = resource => { - return resource.schema?.fields.map((field, i) => { - field['id'] = i; - return field; - }); -}; - -const formatResourceSize = bytes => { - if (bytes < 1024) { - return bytes + ' b'; - } else if (bytes < 1048576) { - return (bytes / 1024).toFixed(2) + ' kb'; - } else if (bytes < 1073741824) { - return (bytes / 1048576).toFixed(2) + ' mb'; - } else { - return bytes; - } -}; - -DataExplorer.propTypes = { - resources: PropTypes.array.isRequired -}; - -const Org = ({ - organization -}) => { - return /*#__PURE__*/jsx(Fragment, { - children: organization ? /*#__PURE__*/jsxs(Fragment, { - children: [/*#__PURE__*/jsx("img", { - src: organization.image_url || 'https://datahub.io/static/img/datahub-cube-edited.svg', - className: "h-5 w-5 mr-2 inline-block", - alt: "org_img" - }), /*#__PURE__*/jsx(Link, { - href: `/@${organization.name}`, - children: /*#__PURE__*/jsx("a", { - className: "font-semibold text-primary underline", - children: organization.title || organization.name - }) - })] - }) : '' - }); -}; - -Org.propTypes = { - organization: PropTypes.object.isRequired -}; - -const Post = ({ - post -}) => { - const { - title, - content, - createdAt, - featuredImage - } = post; - return /*#__PURE__*/jsxs(Fragment, { - children: [/*#__PURE__*/jsx("h1", { - className: "text-3xl font-semibold text-primary my-6 inline-block", - children: title - }), /*#__PURE__*/jsxs("p", { - className: "mb-6", - children: ["Posted: ", createdAt] - }), /*#__PURE__*/jsx("img", { - src: featuredImage, - className: "mb-6", - alt: "featured_img" - }), /*#__PURE__*/jsx("div", { - children: parse(content) - })] - }); -}; - -Post.propTypes = { - page: PropTypes.shape({ - title: PropTypes.string.isRequired, - content: PropTypes.string.isRequired, - createdAt: PropTypes.number, - featuredImage: PropTypes.string - }) -}; - -const PostList = ({ - posts -}) => { - return /*#__PURE__*/jsx(Fragment, { - children: posts.map((post, index) => /*#__PURE__*/jsxs("div", { - children: [/*#__PURE__*/jsx("a", { - href: `/blog/${post.slug}`, - className: "text-2xl font-semibold text-primary my-6 inline-block", - children: parse(post.title) - }), /*#__PURE__*/jsx("p", { - children: parse(post.excerpt) - })] - }, index)) - }); -}; - -PostList.propTypes = { - posts: PropTypes.object.isRequired -}; - -const ErrorMessage = ({ - message -}) => { - return /*#__PURE__*/jsxs("aside", { - children: [message, /*#__PURE__*/jsx("style", { - jsx: true, - children: ` - aside { - padding: 1.5em; - font-size: 14px; - color: white; - background-color: red; - } - ` - })] - }); -}; - -ErrorMessage.propTypes = { - message: PropTypes.string.isRequired -}; - -const CustomLink = ({ - url, - title -}) => /*#__PURE__*/jsx("a", { - href: url, - className: "bg-white hover:bg-gray-200 border text-black font-semibold py-2 px-4 rounded", - children: title -}); - -CustomLink.propTypes = { - url: PropTypes.string.isRequired, - title: PropTypes.string.isRequired -}; - -const Nav = ({ - logo, - navMenu -}) => { - const [open, setOpen] = useState(false); - - const handleClick = event => { - event.preventDefault(); - setOpen(!open); - }; - - return /*#__PURE__*/jsxs("nav", { - className: "flex items-center justify-between flex-wrap bg-white p-4 border-b border-gray-200", - children: [/*#__PURE__*/jsx("div", { - className: "flex items-center flex-shrink-0 text-gray-700 mr-6", - children: /*#__PURE__*/jsx(Link, { - href: "/", - children: /*#__PURE__*/jsx("img", { - src: logo, - alt: "portal logo", - width: "40" - }) - }) - }), /*#__PURE__*/jsx("div", { - className: "block lg:hidden mx-4", - children: /*#__PURE__*/jsx("button", { - onClick: handleClick, - className: "flex items-center px-3 py-2 border rounded text-gray-700 border-orange-400 hover:text-black hover:border-black", - children: /*#__PURE__*/jsxs("svg", { - className: "fill-current h-3 w-3", - viewBox: "0 0 20 20", - xmlns: "http://www.w3.org/2000/svg", - children: [/*#__PURE__*/jsx("title", { - children: "Menu" - }), /*#__PURE__*/jsx("path", { - d: "M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" - })] - }) - }) - }), /*#__PURE__*/jsx("div", { - className: `${open ? `block` : `hidden`} lg:block`, - children: navMenu.map((menu, index) => { - return /*#__PURE__*/jsx(Link, { - href: menu.path, - children: /*#__PURE__*/jsx("a", { - className: "block mt-4 lg:inline-block lg:mt-0 active:bg-primary-background text-gray-700 hover:text-black mr-6", - children: menu.title - }) - }, index); - }) - })] - }); -}; - -Nav.propTypes = { - logo: PropTypes.string.isRequired, - navMenu: PropTypes.array.isRequired -}; - -const Recent = ({ - datasets -}) => { - return /*#__PURE__*/jsx("section", { - className: "my-10 mx-4 lg:my-20", - children: /*#__PURE__*/jsx("div", { - className: "recent flex flex-col lg:flex-row", - children: datasets.map((dataset, index) => /*#__PURE__*/jsxs("div", { - className: "border px-4 mb-4 mr-3 border-gray-100 w-5/6 shadow-sm", - children: [/*#__PURE__*/jsx("h1", { - className: "text-2xl font-thin", - children: dataset.title - }), /*#__PURE__*/jsx("p", { - className: "text-gray-500", - children: dataset.organization && dataset.organization.description - }), /*#__PURE__*/jsx(Link, { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}/${dataset.name}`, - children: /*#__PURE__*/jsx("a", { - className: "pt-3 flex justify-end text-orange-500", - children: "View Dataset" - }) - })] - }, index)) - }) - }); -}; - -Recent.propTypes = { - datasets: PropTypes.array.isRequired -}; - -const Form = ({ - handleSubmit -}) => { - const [searchQuery, setSearchQuery] = useState(""); - return /*#__PURE__*/jsx("form", { - onSubmit: e => e.preventDefault(), - className: "items-center", - children: /*#__PURE__*/jsxs("div", { - className: "flex", - children: [/*#__PURE__*/jsx("input", { - type: "text", - name: "search#q", - value: searchQuery, - onChange: e => { - setSearchQuery(e.target.value); - }, - placeholder: "Search", - "aria-label": "Search", - className: "bg-white focus:outline-none focus:shadow-outline border border-gray-300 w-1/2 rounded-lg py-2 px-4 block appearance-none leading-normal" - }), /*#__PURE__*/jsx("button", { - onClick: () => handleSubmit(searchQuery), - type: "button", - className: "inline-block text-sm px-4 py-3 mx-3 leading-none border rounded text-white bg-black border-black lg:mt-0", - children: "Search" - })] - }) - }); -}; - -Form.propTypes = { - handleSubmit: PropTypes.func.isRequired -}; - -const Item = ({ - dataset -}) => { - return /*#__PURE__*/jsxs("div", { - className: "mb-6", - children: [/*#__PURE__*/jsx("h3", { - className: "text-xl font-semibold", - children: /*#__PURE__*/jsx(Link, { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}/${dataset.name}`, - children: /*#__PURE__*/jsx("a", { - className: "text-primary", - children: dataset.title || dataset.name - }) - }) - }), /*#__PURE__*/jsx(Link, { - href: `/@${dataset.organization ? dataset.organization.name : 'dataset'}`, - children: /*#__PURE__*/jsx("a", { - className: "text-gray-500 block mt-1", - children: dataset.organization ? dataset.organization.title : 'dataset' - }) - }), /*#__PURE__*/jsx("div", { - className: "leading-relaxed mt-2", - children: dataset.description || dataset.notes - })] - }); -}; - -Item.propTypes = { - dataset: PropTypes.object.isRequired -}; - -const Total = ({ - count -}) => { - return /*#__PURE__*/jsxs("h1", { - className: "text-3xl font-semibold text-primary my-6 inline-block", - children: [count, " results found"] - }); -}; - -Total.propTypes = { - count: PropTypes.number.isRequired -}; - -export { CustomLink, DataExplorer, ErrorMessage as Error, Form, Item, Total as ItemTotal, KeyInfo, Nav, Org, PlotlyChart, Post, PostList, ReadMe, Recent, ResourcesInfo as ResourceInfo, Table }; diff --git a/examples/ckan/.babelrc b/examples/ckan/.babelrc deleted file mode 100644 index 1ff94f7e..00000000 --- a/examples/ckan/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["next/babel"] -} diff --git a/examples/ckan/.eslintrc.js b/examples/ckan/.eslintrc.js deleted file mode 100644 index ea57f4e5..00000000 --- a/examples/ckan/.eslintrc.js +++ /dev/null @@ -1,46 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaFeatures: { jsx: true }, - }, - env: { - browser: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react/recommended', - 'plugin:jsx-a11y/recommended', - // Prettier plugin and recommended rules - 'prettier/@typescript-eslint', - 'plugin:prettier/recommended', - ], - rules: { - // Include .prettierrc.js rules - 'prettier/prettier': ['error', {}, { usePrettierrc: true }], - 'react/prop-types': 'off', - 'react/react-in-jsx-scope': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/no-var-requires': 'off', - 'jsx-a11y/label-has-associated-control': [ - 'error', - { - labelComponents: [], - labelAttributes: [], - controlComponents: [], - assert: 'either', - depth: 25, - }, - ], - '@typescript-eslint/no-explicit-any': 'off', - }, - settings: { - react: { - version: 'detect', - }, - }, -}; diff --git a/examples/ckan/.gitignore b/examples/ckan/.gitignore deleted file mode 100644 index e985853e..00000000 --- a/examples/ckan/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.vercel diff --git a/examples/ckan/.prettierignore b/examples/ckan/.prettierignore deleted file mode 100644 index 168d4b12..00000000 --- a/examples/ckan/.prettierignore +++ /dev/null @@ -1,24 +0,0 @@ -node_modules/ - -# testing -/coverage - -# next.js -.next/ -/out/ - -# yarn -yarn-error.log -yarn.lock - -# sass -.sass-cache - -# misc -sandbox/* -.env -.staging.env -.nyc_output/* -.DS_Store - -public/ diff --git a/examples/ckan/.prettierrc.js b/examples/ckan/.prettierrc.js deleted file mode 100644 index 19ccceba..00000000 --- a/examples/ckan/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - semi: true, - trailingComma: 'es5', - singleQuote: true, - printWidth: 79, - tabWidth: 2, - useTabs: false, -}; diff --git a/examples/ckan/README.md b/examples/ckan/README.md deleted file mode 100644 index 74592e54..00000000 --- a/examples/ckan/README.md +++ /dev/null @@ -1,306 +0,0 @@ -

- -🌀 Portal.JS
-The javascript framework for
-data portals - -

- -🌀 `Portal` is a framework for rapidly building rich data portal frontends using a modern frontend approach (javascript, React, SSR). - -`Portal` assumes a "decoupled" approach where the frontend is a separate service from the backend and interacts with backend(s) via an API. It can be used with any backend and has out of the box support for [CKAN][]. `portal` is built in Javascript and React on top of the popular [Next.js][] framework. - -[ckan]: https://ckan.org/ -[next.js]: https://nextjs.com/ - -Live DEMO: https://catalog-portal-js.vercel.app - -## Features - -- 🗺️ Unified sites: present data and content in one seamless site, pulling datasets from a DMS (e.g. CKAN) and content from a CMS (e.g. wordpress) with a common internal API. -- 👩‍💻 Developer friendly: built with familiar frontend tech Javascript, React etc -- 🔋 Batteries included: Full set of portal components out of the box e.g. catalog search, dataset showcase, blog etc. -- 🎨 Easy to theme and customize: installable themes, use standard CSS and React+CSS tooling. Add new routes quickly. -- 🧱 Extensible: quickly extend and develop/import your own React components -- 📝 Well documented: full set of documentation plus the documentation of NextJS and Apollo. - -### For developers - -- 🏗 Build with modern, familiar frontend tech such as Javascript and React. -- 🚀 NextJS framework: so everything in NextJS for free React, SSR, static site generation, huge number of examples and integrations etc. - - SSR => unlimited number of pages, SEO etc whilst still using React. - - Static Site Generation (SSG) (good for small sites) => ultra-simple deployment, great performance and lighthouse scores etc -- 📋 Typescript support - -## Getting Started - -### Setup - -Install a recent version of Node. You'll need Node 10.13 or later. - -### Create a Portal app - -To create a Portal app, open your terminal, cd into the directory you'd like to create the app in, and run the following command: - -```console -npm init portal-app my-data-portal -``` - -> NB: Under the hood, this uses the tool called create-next-app, which bootstraps a Next.js app for you. It uses this template through the --example flag. -> -> If it doesn’t work, please open an issue. - -## Guide - -### Styling 🎨 - -We use Tailwind as a CSS framework. Take a look at `/styles/index.css` to see what we're importing from Tailwind bundle. You can also configure Tailwind using `tailwind.config.js` file. - -Have a look at Next.js support of CSS and ways of writing CSS: - -https://nextjs.org/docs/basic-features/built-in-css-support - -### Backend - -So far the app is running with mocked data behind. You can connect CMS and DMS backends easily via environment variables: - -```console -$ export DMS=http://ckan:5000 -$ export CMS=http://myblog.wordpress.com -``` - -> Note that we don't yet have implementations for the following CKAN features: -> -> - Activities -> - Auth -> - Groups -> - Facets - -### Routes - -These are the default routes set up in the "starter" app. - -- Home `/` -- Search `/search` -- Dataset `/@org/dataset` -- Resource `/@org/dataset/r/resource` -- Organization `/@org` -- Collection (aka group in CKAN) (?) - suggest to merge into org -- Static pages, eg, `/about` etc. from CMS or can do it without external CMS, e.g., in Next.js - -### New Routes - -TODO - -### Data fetching - -We use Apollo client which allows us to query data with GraphQL. We have setup CKAN API for the demo (it uses demo.ckan.org as DMS): - -http://portal.datopian1.now.sh/ - -Note that we don't have Apollo Server but we connect CKAN API using [`apollo-link-rest`](https://www.apollographql.com/docs/link/links/rest/) module. You can see how it works in [lib/apolloClient.ts](https://github.com/datopian/portal/blob/master/lib/apolloClient.ts) and then have a look at [pages/\_app.tsx](https://github.com/datopian/portal/blob/master/pages/_app.tsx). - -For development/debugging purposes, we suggest installing the Chrome extension - https://chrome.google.com/webstore/detail/apollo-client-developer-t/jdkknkkbebbapilgoeccciglkfbmbnfm. - -#### i18n configuration - -Portal.js is configured by default to support both `English` and `French` subpath for language translation. But for subsequent users, this following steps can be used to configure i18n for other languages; - -1. Update `next.config.js`, to add more languages to the i18n locales - -```js -i18n: { - locales: ['en', 'fr', 'nl-NL'], // add more language to the list - defaultLocale: 'en', // set the default language to use -}, -``` - -2. Create a folder for the language in `locales` --> `locales/en-Us` - -3. In the language folder, different namespace files (json) can be created for each translation. For the `index.js` use-case, I named it `common.json` - -```json -// locales/en/common.json -{ - "title" : "Portal js in English", -} - -// locales/fr/common.json -{ - "title" : "Portal js in French", -} -``` - -4. To use on pages using Server-side Props. - -```js -import { loadNamespaces } from './_app'; -import useTranslation from 'next-translate/useTranslation'; - -const Home: React.FC = ()=> { - const { t } = useTranslation(); - return ( -
{t(`common:title`)}
// we use common and title base on the common.json data - ); -}; - -export const getServerSideProps: GetServerSideProps = async ({ locale }) => { - ........ ........ - return { - props : { - _ns: await loadNamespaces(['common'], locale), - } - }; -}; - -``` - -5. Go to the browser and view the changes using language subpath like this `http://localhost:3000` and `http://localhost:3000/fr`. **Note** The subpath also activate chrome language Translator - -#### Pre-fetch data in the server-side - -When visiting a dataset page, you may want to fetch the dataset metadata in the server-side. To do so, you can use `getServerSideProps` function from NextJS: - -```javascript -import { GetServerSideProps } from 'next'; -import { initializeApollo } from '../lib/apolloClient'; -import gql from 'graphql-tag'; - -const QUERY = gql` - query dataset($id: String) { - dataset(id: $id) @rest(type: "Response", path: "package_show?{args}") { - result - } - } -`; - -... - -export const getServerSideProps: GetServerSideProps = async (context) => { - const apolloClient = initializeApollo(); - - await apolloClient.query({ - query: QUERY, - variables: { - id: 'my-dataset' - }, - }); - - return { - props: { - initialApolloState: apolloClient.cache.extract(), - }, - }; -}; -``` - -This would fetch the data from DMS and save it in the Apollo cache so that we can query it again from the components. - -#### Access data from a component - -Consider situation when rendering a component for org info on the dataset page. We already have pre-fetched dataset metadata that includes `organization` property with attributes such as `name`, `title` etc. We can now query only organization part for our `Org` component: - -```javascript -import { useQuery } from '@apollo/react-hooks'; -import gql from 'graphql-tag'; - -export const GET_ORG_QUERY = gql` - query dataset($id: String) { - dataset(id: $id) @rest(type: "Response", path: "package_show?{args}") { - result { - organization { - name - title - image_url - } - } - } - } -`; - -export default function Org({ variables }) { - const { loading, error, data } = useQuery( - GET_ORG_QUERY, - { - variables: { id: 'my-dataset' } - } - ); - - ... - - const { organization } = data.dataset.result; - - return ( - <> - {organization ? ( - <> - - - - {organization.title || organization.name} - - - - ) : ( - '' - )} - - ); -} -``` - -#### Add a new data source - -TODO - -## Developers - -### Boot the local instance - -Install the dependencies: - -```bash -yarn # or npm i -``` - -Boot the demo portal: - -```console -$ yarn dev # or npm run dev -``` - -Open [http://localhost:3000](http://localhost:3000) to see the home page 🎉 - -You can start editing the page by modifying `/pages/index.tsx`. The page auto-updates as you edit the file. - -### Tests - -We use Jest for running tests: - -```bash -yarn test # or npm run test - -# turn on watching -yarn test --watch -``` - -We use Cypress tests as well - -``` -yarn run e2e -``` - -### Architecture - -- Language: Javascript -- Framework: NextJS - https://nextjs.org/ -- Data layer API: GraphQL using Apollo. So controllers access data using GraphQL “gatsby like” - -### Key Pages - -See https://tech.datopian.com/frontend/ diff --git a/examples/ckan/__tests__/components/search/Form.test.tsx b/examples/ckan/__tests__/components/search/Form.test.tsx deleted file mode 100644 index 24b0160d..00000000 --- a/examples/ckan/__tests__/components/search/Form.test.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import Form from '../../../components/search/Form'; - -const useRouter = jest.spyOn(require('next/router'), 'useRouter'); - -test('📸 of Form component with empty', () => { - useRouter.mockImplementationOnce(() => ({ - query: { search: '', sort: '' }, - })); - - const { container } = render(); - expect(container).toMatchSnapshot(); -}); - -test('📸 of Form component with query', () => { - useRouter.mockImplementationOnce(() => ({ - query: { search: 'gdp', sort: '' }, - })); - - const { container } = render(); - expect(container).toMatchSnapshot(); -}); diff --git a/examples/ckan/__tests__/components/search/__snapshots__/Form.test.tsx.snap b/examples/ckan/__tests__/components/search/__snapshots__/Form.test.tsx.snap deleted file mode 100644 index d8dfe846..00000000 --- a/examples/ckan/__tests__/components/search/__snapshots__/Form.test.tsx.snap +++ /dev/null @@ -1,47 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`📸 of Form component with empty 1`] = ` -
- - - - -
-`; - -exports[`📸 of Form component with query 1`] = ` -
-
- - - -
-`; diff --git a/examples/ckan/components/_shared/CustomLink.tsx b/examples/ckan/components/_shared/CustomLink.tsx deleted file mode 100644 index 2b50236e..00000000 --- a/examples/ckan/components/_shared/CustomLink.tsx +++ /dev/null @@ -1,15 +0,0 @@ -type LinkProps = { - url: string; - format: any; -}; - -const CustomLink: React.FC = ({ url, format }: LinkProps) => ( - - {format} - -); - -export default CustomLink; diff --git a/examples/ckan/components/_shared/Error.tsx b/examples/ckan/components/_shared/Error.tsx deleted file mode 100644 index afdb4cec..00000000 --- a/examples/ckan/components/_shared/Error.tsx +++ /dev/null @@ -1,17 +0,0 @@ -const ErrorMessage: React.FC<{ message: any }> = ({ message }) => { - return ( - - ); -}; - -export default ErrorMessage; diff --git a/examples/ckan/components/_shared/Table.tsx b/examples/ckan/components/_shared/Table.tsx deleted file mode 100644 index deccbf49..00000000 --- a/examples/ckan/components/_shared/Table.tsx +++ /dev/null @@ -1,53 +0,0 @@ -interface TableProps { - columns: Array; - data: Array; - className?: string; -} - -const Table: React.FC = ({ columns, data, className }) => { - return ( -
-
-
-
- - - {columns.map(({ key, name }) => ( - - ))} - - - - {data.map((item) => ( - - {columns.map(({ key, render }) => ( - - ))} - - ))} - -
- {name} -
- {(render && - typeof render === 'function' && - render(item)) || - item[key] || - ''} -
-
- - - ); -}; - -export default Table; diff --git a/examples/ckan/components/_shared/index.ts b/examples/ckan/components/_shared/index.ts deleted file mode 100644 index f0643faa..00000000 --- a/examples/ckan/components/_shared/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Table from './Table'; -import ErrorMessage from './Error'; -import CustomLink from './CustomLink'; - -export { Table, ErrorMessage, CustomLink }; diff --git a/examples/ckan/components/dataset/About.tsx b/examples/ckan/components/dataset/About.tsx deleted file mode 100644 index ea6910a7..00000000 --- a/examples/ckan/components/dataset/About.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { useQuery } from '@apollo/react-hooks'; -import * as timeago from 'timeago.js'; -import { ErrorMessage } from '../_shared'; -import { GET_DATASET_QUERY } from '../../graphql/queries'; - -const About: React.FC<{ variables: any }> = ({ variables }) => { - const { loading, error, data } = useQuery(GET_DATASET_QUERY, { - variables, - // Setting this value to true will make the component rerender when - // the "networkStatus" changes, so we are able to know if it is fetching - // more data - notifyOnNetworkStatusChange: true, - }); - - if (error) return ; - if (loading) return
Loading
; - - const { result } = data.dataset; - - const stats = [ - { name: 'Files', stat: result.resources.length }, - { name: 'Size', stat: result.size || 'N/A' }, - { - name: 'Formats', - stat: result.resources.map((item) => item.format).join(', '), - }, - { - name: 'Created', - stat: result.created && timeago.format(result.created), - }, - { - name: 'Updated', - stat: result.updated && timeago.format(result.updated), - }, - { - name: 'Licenses', - stat: result.licenses?.length - ? result.licenses.map((item, index) => ( - - {item.name} - - )) - : 'N/A', - }, - ]; - - return ( - <> -
-

- {result.title || result.name} -

-

- {result.description || 'This dataset does not have a description.'} -

-
-
-
- {stats.map((item) => ( -
-
- {item.name} -
-
- {item.stat} -
-
- ))} -
-
- - ); -}; - -export default About; diff --git a/examples/ckan/components/dataset/Org.tsx b/examples/ckan/components/dataset/Org.tsx deleted file mode 100644 index 22c6a3c0..00000000 --- a/examples/ckan/components/dataset/Org.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { useQuery } from '@apollo/react-hooks'; -import { ErrorMessage } from '../_shared'; -import { GET_DATASET_QUERY } from '../../graphql/queries'; -import { Org } from 'portal'; - -const OrgInfo: React.FC<{ variables: any }> = ({ variables }) => { - const { loading, error, data } = useQuery(GET_DATASET_QUERY, { - variables, - // Setting this value to true will make the component rerender when - // the "networkStatus" changes, so we are able to know if it is fetching - // more data - notifyOnNetworkStatusChange: true, - }); - - if (error) return ; - if (loading) return
Loading
; - - const { organization } = data.dataset.result; - - return ; -}; - -export default OrgInfo; diff --git a/examples/ckan/components/dataset/Resources.tsx b/examples/ckan/components/dataset/Resources.tsx deleted file mode 100644 index 2df8a4ca..00000000 --- a/examples/ckan/components/dataset/Resources.tsx +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint-disable jsx-a11y/anchor-is-valid */ -/* eslint-disable react/display-name */ -import Link from 'next/link'; -import { useQuery } from '@apollo/react-hooks'; -import * as timeago from 'timeago.js'; -import { Table, ErrorMessage } from '../_shared'; -import { GET_DATASET_QUERY } from '../../graphql/queries'; - -const columns = [ - { - name: 'File', - key: 'file', - render: ({ name: resName, title, parentName }) => ( - - {title || resName} - - ), - }, - { - name: 'Format', - key: 'format', - }, - { - name: 'Created', - key: 'created', - render: ({ created }) => timeago.format(created), - }, - { - name: 'Updated', - key: 'updated', - render: ({ updated }) => timeago.format(updated), - }, - { - name: 'Link', - key: 'link', - render: ({ name: resName, parentName }) => ( - - Preview - - ), - }, -]; - -const Resources: React.FC<{ variables: any }> = ({ variables }) => { - const { loading, error, data } = useQuery(GET_DATASET_QUERY, { - variables, - // Setting this value to true will make the component rerender when - // the "networkStatus" changes, so we are able to know if it is fetching - // more data - notifyOnNetworkStatusChange: true, - }); - - if (error) return ; - if (loading) return
Loading
; - - const { result } = data.dataset; - - return ( -
-
-

- Data files -

-
- ({ - ...resource, - parentName: result.name, - }))} - /> - - ); -}; - -export default Resources; diff --git a/examples/ckan/components/home/Footer.tsx b/examples/ckan/components/home/Footer.tsx deleted file mode 100644 index 9fa74148..00000000 --- a/examples/ckan/components/home/Footer.tsx +++ /dev/null @@ -1,61 +0,0 @@ -const Footer: React.FC = () => { - const navigation = { - main: [ - { name: 'Blog', href: '/blog' }, - { name: 'Search', href: '/search' }, - { name: 'Docs', href: '/docs' }, - ], - social: [ - { - name: 'GitHub', - href: 'https://github.com/datopian/portal.js', - // eslint-disable-next-line - icon: (props) => ( - - - - ), - }, - ], - }; - - return ( - - ); -}; - -export default Footer; diff --git a/examples/ckan/components/home/Hero.tsx b/examples/ckan/components/home/Hero.tsx deleted file mode 100644 index 07479ae0..00000000 --- a/examples/ckan/components/home/Hero.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Template from './HeroTemplate'; - -const Hero: React.FC = () => { - return