pydorky 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.devcontainer/devcontainer.json +17 -0
  2. package/.github/FUNDING.yml +15 -0
  3. package/.github/workflows/e2e-integration.yml +57 -0
  4. package/.github/workflows/publish.yml +24 -0
  5. package/.nvmrc +1 -0
  6. package/LICENSE +21 -0
  7. package/README.md +156 -0
  8. package/bin/index.js +19 -0
  9. package/bin/legacy.js +432 -0
  10. package/docs/doc#1 get-started/README.md +105 -0
  11. package/docs/doc#2 features-wishlist +33 -0
  12. package/docs/doc#2.5 python-port +31 -0
  13. package/docs/doc#3 the-correct-node-version +107 -0
  14. package/docs/doc#4 why-where-python +42 -0
  15. package/docs/doc#5 how-do-endpoints-cli-work +0 -0
  16. package/dorky-usage-aws.svg +1 -0
  17. package/dorky-usage-google-drive.svg +1 -0
  18. package/google-drive-credentials.json +16 -0
  19. package/openapi/openapi.yaml +257 -0
  20. package/package.json +46 -0
  21. package/python-client/README.md +19 -0
  22. package/python-client/dorky_client/__init__.py +3 -0
  23. package/python-client/dorky_client/client.py +32 -0
  24. package/python-client/pyproject.toml +13 -0
  25. package/python-client/tests/test_integration.py +20 -0
  26. package/rectdorky.png +0 -0
  27. package/server/index.js +193 -0
  28. package/server/package.json +12 -0
  29. package/todo/01-core-infrastructure.md +84 -0
  30. package/todo/02-storage-providers.md +104 -0
  31. package/todo/03-compression-formats.md +94 -0
  32. package/todo/04-python-client.md +126 -0
  33. package/todo/05-metadata-versioning.md +116 -0
  34. package/todo/06-performance-concurrency.md +130 -0
  35. package/todo/07-security-encryption.md +114 -0
  36. package/todo/08-developer-experience.md +175 -0
  37. package/todo/README.md +37 -0
  38. package/web-app/README.md +70 -0
  39. package/web-app/package-lock.json +17915 -0
  40. package/web-app/package.json +43 -0
  41. package/web-app/public/favicon.ico +0 -0
  42. package/web-app/public/index.html +43 -0
  43. package/web-app/public/logo192.png +0 -0
  44. package/web-app/public/logo512.png +0 -0
  45. package/web-app/public/manifest.json +25 -0
  46. package/web-app/public/robots.txt +3 -0
  47. package/web-app/src/App.css +23 -0
  48. package/web-app/src/App.js +84 -0
  49. package/web-app/src/App.test.js +8 -0
  50. package/web-app/src/PrivacyPolicy.js +26 -0
  51. package/web-app/src/TermsAndConditions.js +41 -0
  52. package/web-app/src/index.css +3 -0
  53. package/web-app/src/index.js +26 -0
  54. package/web-app/src/logo.svg +1 -0
  55. package/web-app/src/reportWebVitals.js +13 -0
  56. package/web-app/src/setupTests.js +5 -0
  57. package/web-app/tailwind.config.js +10 -0
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "web-app",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "dependencies": {
6
+ "@testing-library/jest-dom": "^5.17.0",
7
+ "@testing-library/react": "^13.4.0",
8
+ "@testing-library/user-event": "^13.5.0",
9
+ "react": "^19.0.0",
10
+ "react-dom": "^19.0.0",
11
+ "react-router": "^7.5.2",
12
+ "react-scripts": "5.0.1",
13
+ "web-vitals": "^2.1.4"
14
+ },
15
+ "scripts": {
16
+ "start": "react-scripts start",
17
+ "build": "react-scripts build",
18
+ "test": "react-scripts test",
19
+ "eject": "react-scripts eject"
20
+ },
21
+ "eslintConfig": {
22
+ "extends": [
23
+ "react-app",
24
+ "react-app/jest"
25
+ ]
26
+ },
27
+ "browserslist": {
28
+ "production": [
29
+ ">0.2%",
30
+ "not dead",
31
+ "not op_mini all"
32
+ ],
33
+ "development": [
34
+ "last 1 chrome version",
35
+ "last 1 firefox version",
36
+ "last 1 safari version"
37
+ ]
38
+ },
39
+ "devDependencies": {
40
+ "ajv": "^8.17.1",
41
+ "tailwindcss": "^3.4.17"
42
+ }
43
+ }
Binary file
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <meta name="theme-color" content="#000000" />
9
+ <meta name="description" content="Web site created using create-react-app" />
10
+ <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
11
+ <!--
12
+ manifest.json provides metadata used when your web app is installed on a
13
+ user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
14
+ -->
15
+ <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
16
+ <!--
17
+ Notice the use of %PUBLIC_URL% in the tags above.
18
+ It will be replaced with the URL of the `public` folder during the build.
19
+ Only files inside the `public` folder can be referenced from the HTML.
20
+
21
+ Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
22
+ work correctly both with client-side routing and a non-root public URL.
23
+ Learn how to configure a non-root public URL by running `npm run build`.
24
+ -->
25
+ <title>Pydorky</title>
26
+ </head>
27
+
28
+ <body>
29
+ <noscript>You need to enable JavaScript to run this app.</noscript>
30
+ <div id="root"></div>
31
+ <!--
32
+ This HTML file is a template.
33
+ If you open it directly in the browser, you will see an empty page.
34
+
35
+ You can add webfonts, meta tags, or analytics to this file.
36
+ The build step will place the bundled scripts into the <body> tag.
37
+
38
+ To begin the development, run `npm start` or `yarn start`.
39
+ To create a production bundle, use `npm run build` or `yarn build`.
40
+ -->
41
+ </body>
42
+
43
+ </html>
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ {
2
+ "short_name": "React App",
3
+ "name": "Create React App Sample",
4
+ "icons": [
5
+ {
6
+ "src": "favicon.ico",
7
+ "sizes": "64x64 32x32 24x24 16x16",
8
+ "type": "image/x-icon"
9
+ },
10
+ {
11
+ "src": "logo192.png",
12
+ "type": "image/png",
13
+ "sizes": "192x192"
14
+ },
15
+ {
16
+ "src": "logo512.png",
17
+ "type": "image/png",
18
+ "sizes": "512x512"
19
+ }
20
+ ],
21
+ "start_url": ".",
22
+ "display": "standalone",
23
+ "theme_color": "#000000",
24
+ "background_color": "#ffffff"
25
+ }
@@ -0,0 +1,3 @@
1
+ # https://www.robotstxt.org/robotstxt.html
2
+ User-agent: *
3
+ Disallow:
@@ -0,0 +1,23 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --background: #ffffff;
7
+ --foreground: #171717;
8
+ }
9
+
10
+ @media (prefers-color-scheme: dark) {
11
+ :root {
12
+ --background: #121212;
13
+ /* Neutral dark background */
14
+ --foreground: #e0e0e0;
15
+ /* Light grey for better contrast */
16
+ }
17
+ }
18
+
19
+ body {
20
+ color: var(--foreground);
21
+ background: var(--background);
22
+ font-family: Arial, Helvetica, sans-serif;
23
+ }
@@ -0,0 +1,84 @@
1
+ import './App.css';
2
+
3
+ function App() {
4
+ return (
5
+ <div className="min-h-screen flex flex-col px-8">
6
+ <header className="text-center my-8">
7
+ <h1 className="text-5xl font-bold text-blue-500">Pydorky</h1>
8
+ <p className="text-xl text-gray-800 dark:text-gray-300">DevOps Records Keeper</p>
9
+ </header>
10
+
11
+ <main className="flex-1 flex flex-col items-center">
12
+ <section className="my-8 w-full max-w-3xl">
13
+ <h2 className="text-3xl text-blue-500 border-b-2 border-blue-500 pb-2 mb-4">Features</h2>
14
+ <ul className="list-none p-0 space-y-4">
15
+ <li className="text-lg text-gray-800 dark:text-gray-300">
16
+ <strong className="text-blue-500">Secure Storage:</strong> Safeguard your project’s confidential files by storing them in AWS S3 or Google Drive.
17
+ </li>
18
+ <li className="text-lg text-gray-800 dark:text-gray-300">
19
+ <strong className="text-blue-500">Easy Integration:</strong> Seamlessly integrate Dorky into your project with simple initialization commands.
20
+ </li>
21
+ <li className="text-lg text-gray-800 dark:text-gray-300">
22
+ <strong className="text-blue-500">File Management:</strong> Effortlessly list, add, remove, push, and pull files between your project and the storage service.
23
+ </li>
24
+ <li className="text-lg text-gray-800 dark:text-gray-300">
25
+ <strong className="text-blue-500">Customizable Exclusions:</strong> Use the .dorkyignore file to specify patterns for files or folders to exclude from operations.
26
+ </li>
27
+ </ul>
28
+ </section>
29
+
30
+ <section className="my-8 w-full max-w-3xl">
31
+ <h2 className="text-3xl text-blue-500 border-b-2 border-blue-500 pb-2 mb-4">How it Works</h2>
32
+ <div className="flex flex-col items-center space-y-8">
33
+ <div className="card w-full"><img alt="AWS" src="https://github.com/Pratham-Jain-3903/pydorky/raw/main/dorky-usage-aws.svg" /><p className="text-lg text-gray-800 dark:text-gray-300 mt-4">
34
+ Dorky integrates seamlessly with AWS S3 for secure storage of your project files.
35
+ </p>
36
+ </div>
37
+ <div className="card w-full"><img alt="Google-Drive" src="https://github.com/Pratham-Jain-3903/pydorky/raw/main/dorky-usage-google-drive.svg" /><p className="text-lg text-gray-800 dark:text-gray-300 mt-4">
38
+ Dorky can also leverage Google Drive for convenient file management.
39
+ </p>
40
+ </div>
41
+ </div>
42
+ </section>
43
+
44
+ <section className="my-8 w-full max-w-3xl">
45
+ <h2 className="text-3xl text-blue-500 border-b-2 border-blue-500 pb-2 mb-4">Getting Started</h2>
46
+ <ol className="list-none p-0 space-y-4">
47
+ <li className="text-lg text-gray-800 dark:text-gray-300">
48
+ <strong>Installation:</strong>
49
+ <pre className="bg-gray-100 dark:bg-gray-800 p-2 rounded"><code>npm install -g dorky</code></pre>
50
+ </li>
51
+ <li className="text-lg text-gray-800 dark:text-gray-300">
52
+ <strong>Initialize Dorky:</strong>
53
+ <pre className="bg-gray-100 dark:bg-gray-800 p-2 rounded"><code>dorky --init aws</code></pre>
54
+ </li>
55
+ <li className="text-lg text-gray-800 dark:text-gray-300">
56
+ <strong>Manage Files:</strong>
57
+ <ul className="list-disc ml-6 space-y-2">
58
+ <li>List files: <code className="bg-gray-100 dark:bg-gray-800 p-1 rounded">dorky --list</code></li>
59
+ <li>Add a file: <code className="bg-gray-100 dark:bg-gray-800 p-1 rounded">dorky --add &lt;file-name&gt;</code></li>
60
+ <li>Push files: <code className="bg-gray-100 dark:bg-gray-800 p-1 rounded">dorky --push</code></li>
61
+ <li>Remove a file: <code className="bg-gray-100 dark:bg-gray-800 p-1 rounded">dorky --rm &lt;file-name&gt;</code></li>
62
+ <li>Pull files: <code className="bg-gray-100 dark:bg-gray-800 p-1 rounded">dorky --pull</code></li>
63
+ </ul>
64
+ </li>
65
+ </ol>
66
+ </section>
67
+
68
+ <section className="my-8 w-full max-w-3xl">
69
+ <h2 className="text-3xl text-blue-500 border-b-2 border-blue-500 pb-2 mb-4">Learn More</h2>
70
+ <ul className="list-none p-0 space-y-2">
71
+ <li><a className="text-blue-500 hover:underline" href="https://www.npmjs.com/package/dorky" target="_blank" rel="noopener noreferrer">npm Package</a></li>
72
+ <li><a className="text-blue-500 hover:underline" href="https://github.com/trishantpahwa/dorky" target="_blank" rel="noopener noreferrer">GitHub Repository</a></li>
73
+ </ul>
74
+ </section>
75
+ </main>
76
+
77
+ <footer className="text-center py-4 border-t border-gray-200 dark:border-gray-700">
78
+ <p className="text-gray-600 dark:text-gray-400 text-sm">© 2024 Dorky - Open-Source DevOps Records Keeper</p>
79
+ </footer>
80
+ </div>
81
+ );
82
+ }
83
+
84
+ export default App;
@@ -0,0 +1,8 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import App from './App';
3
+
4
+ test('renders learn react link', () => {
5
+ render(<App />);
6
+ const linkElement = screen.getByText(/learn react/i);
7
+ expect(linkElement).toBeInTheDocument();
8
+ });
@@ -0,0 +1,26 @@
1
+ export default function PrivacyPolicy() {
2
+ return (
3
+ <div className="p-8 text-white">
4
+ <h1 className="text-3xl font-bold mb-4">Privacy Policy</h1>
5
+ <p className="mb-4"><strong>Effective Date:</strong> 28th December 2024</p>
6
+
7
+ <h2 className="text-2xl font-semibold mb-2">Introduction</h2>
8
+ <p className="mb-4">Pydorky is committed to protecting your privacy. This Privacy Policy outlines our practices regarding the collection, use, and disclosure of information when you use our software.</p>
9
+
10
+ <h2 className="text-2xl font-semibold mb-2">Information Collection and Use</h2>
11
+ <p className="mb-4">Pydorky does not collect, store, or transmit any personal data from its users. All operations are performed locally on your machine, and any interactions with storage services like AWS S3 or Google Drive are conducted directly between your environment and the respective service.</p>
12
+
13
+ <h2 className="text-2xl font-semibold mb-2">Third-Party Services</h2>
14
+ <p className="mb-4">While Pydorky facilitates the storage of files on third-party services such as AWS S3 and Google Drive, it does not transmit any data to these services on its own. Users are responsible for configuring and managing their credentials and data with these services.</p>
15
+
16
+ <h2 className="text-2xl font-semibold mb-2">Security</h2>
17
+ <p className="mb-4">We prioritize the security of your data. However, it's essential to ensure that your environment and the third-party services you use are properly secured and that you follow best practices for credential management.</p>
18
+
19
+ <h2 className="text-2xl font-semibold mb-2">Changes to This Privacy Policy</h2>
20
+ <p className="mb-4">We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on our GitHub repository.</p>
21
+
22
+ <h2 className="text-2xl font-semibold mb-2">Contact Us</h2>
23
+ <p className="mb-4">If you have any questions about this Privacy Policy, please contact us through our GitHub repository's issue tracker.</p>
24
+ </div>
25
+ );
26
+ }
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+
3
+ export default function TermsAndConditions() {
4
+ return (
5
+ <div className="p-6 shadow-md rounded-lg">
6
+ <h1 className="text-2xl font-bold mb-4">Terms and Conditions</h1>
7
+ <p className="mb-2"><strong>Effective Date:</strong> 28th December 2024</p>
8
+
9
+ <h2 className="text-xl font-semibold mt-4 mb-2">Acceptance of Terms</h2>
10
+ <p className="mb-2">By using Pydorky, you agree to comply with and be bound by these Terms and Conditions. If you do not agree, please do not use the software.</p>
11
+
12
+ <h2 className="text-xl font-semibold mt-4 mb-2">License</h2>
13
+ <p className="mb-2">Pydorky is licensed under the <strong> MIT License</strong>. You may use, distribute, and modify the software in accordance with the terms of this license.</p>
14
+
15
+ <h2 className="text-xl font-semibold mt-4 mb-2">Usage Restrictions</h2>
16
+ <ul className="list-disc list-inside mb-2">
17
+ <li>Do not use Pydorky for any illegal or unauthorized purposes.</li>
18
+ <li>Ensure that your use of Pydorky does not violate any applicable laws or regulations.</li>
19
+ </ul>
20
+
21
+ <h2 className="text-xl font-semibold mt-4 mb-2">Limitation of Liability</h2>
22
+ <p className="mb-2">Pydorky is provided "as is," without warranty of any kind. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability arising from the use of the software.</p>
23
+
24
+ <h2 className="text-xl font-semibold mt-4 mb-2">User Responsibilities</h2>
25
+ <ul className="list-disc list-inside mb-2">
26
+ <li>Maintain the confidentiality of any credentials used with Pydorky.</li>
27
+ <li>Ensure that you have the necessary permissions to store and manage files on third-party services.</li>
28
+ </ul>
29
+
30
+ <h2 className="text-xl font-semibold mt-4 mb-2">Modifications to the Software</h2>
31
+ <p className="mb-2">We reserve the right to modify, suspend, or discontinue Pydorky at any time without prior notice.</p>
32
+
33
+ <h2 className="text-xl font-semibold mt-4 mb-2">Governing Law</h2>
34
+ <p className="mb-2">These Terms and Conditions are governed by and construed in accordance with the laws of <strong>[Insert Jurisdiction]</strong>.</p>
35
+
36
+ <h2 className="text-xl font-semibold mt-4 mb-2">Contact Information</h2>
37
+ <p className="mb-2">For any questions or concerns regarding these Terms and Conditions, please reach out via the issue tracker on our GitHub repository.</p>
38
+
39
+ </div>
40
+ );
41
+ }
@@ -0,0 +1,3 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import { BrowserRouter, Routes, Route } from 'react-router';
4
+ import './index.css';
5
+ import App from './App';
6
+ import PrivacyPolicy from './PrivacyPolicy';
7
+ import reportWebVitals from './reportWebVitals';
8
+ import TermsAndConditions from './TermsAndConditions';
9
+
10
+ const root = ReactDOM.createRoot(document.getElementById('root'));
11
+ root.render(
12
+ <React.StrictMode>
13
+ <BrowserRouter>
14
+ <Routes>
15
+ <Route path="/" element={<App />} />
16
+ <Route path="/privacy-policy" element={<PrivacyPolicy />} />
17
+ <Route path="/terms-and-conditions" element={<TermsAndConditions />} />
18
+ </Routes>
19
+ </BrowserRouter>
20
+ </React.StrictMode>
21
+ );
22
+
23
+ // If you want to start measuring performance in your app, pass a function
24
+ // to log results (for example: reportWebVitals(console.log))
25
+ // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
26
+ reportWebVitals();
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
@@ -0,0 +1,13 @@
1
+ const reportWebVitals = onPerfEntry => {
2
+ if (onPerfEntry && onPerfEntry instanceof Function) {
3
+ import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4
+ getCLS(onPerfEntry);
5
+ getFID(onPerfEntry);
6
+ getFCP(onPerfEntry);
7
+ getLCP(onPerfEntry);
8
+ getTTFB(onPerfEntry);
9
+ });
10
+ }
11
+ };
12
+
13
+ export default reportWebVitals;
@@ -0,0 +1,5 @@
1
+ // jest-dom adds custom jest matchers for asserting on DOM nodes.
2
+ // allows you to do things like:
3
+ // expect(element).toHaveTextContent(/react/i)
4
+ // learn more: https://github.com/testing-library/jest-dom
5
+ import '@testing-library/jest-dom';
@@ -0,0 +1,10 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: [
4
+ "./src/**/*.{js,jsx,ts,tsx}",
5
+ ],
6
+ theme: {
7
+ extend: {},
8
+ },
9
+ plugins: [],
10
+ }