@osdk/create-app 2.1.0-beta.21 → 2.1.0-beta.23

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 (65) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/browser/{esm-W5HUFJGQ.js → esm-6BUJALDZ.js} +4 -4
  3. package/build/browser/{esm-W5HUFJGQ.js.map → esm-6BUJALDZ.js.map} +1 -1
  4. package/build/browser/{esm-J5VI72R3.js → esm-7ZIUG4U6.js} +4 -4
  5. package/build/browser/esm-7ZIUG4U6.js.map +1 -0
  6. package/build/browser/{esm-FDYGPX22.js → esm-CYB2O5FN.js} +29 -33
  7. package/build/browser/esm-CYB2O5FN.js.map +1 -0
  8. package/build/browser/{esm-BXEUIM4Y.js → esm-EML4JC7D.js} +4 -4
  9. package/build/browser/{esm-BXEUIM4Y.js.map → esm-EML4JC7D.js.map} +1 -1
  10. package/build/browser/{esm-VD5SBSTG.js → esm-GC4GGPX6.js} +27 -30
  11. package/build/browser/esm-GC4GGPX6.js.map +1 -0
  12. package/build/browser/{esm-G7B67PJ6.js → esm-IV4K65YT.js} +4 -4
  13. package/build/browser/esm-IV4K65YT.js.map +1 -0
  14. package/build/{esm/esm-IMPFU4IQ.js → browser/esm-LP2TDDES.js} +4 -4
  15. package/build/browser/esm-LP2TDDES.js.map +1 -0
  16. package/build/{esm/esm-7R6OLTJV.js → browser/esm-LYSXBZDO.js} +4 -4
  17. package/build/browser/esm-LYSXBZDO.js.map +1 -0
  18. package/build/{esm/esm-F6Y6OKER.js → browser/esm-SE26EE2F.js} +4 -4
  19. package/build/browser/esm-SE26EE2F.js.map +1 -0
  20. package/build/{esm/esm-PBRMAZQD.js → browser/esm-TW5CUHSV.js} +4 -4
  21. package/build/browser/{esm-PBRMAZQD.js.map → esm-TW5CUHSV.js.map} +1 -1
  22. package/build/browser/{esm-76Q3EKG4.js → esm-XD3R7VUV.js} +4 -4
  23. package/build/browser/esm-XD3R7VUV.js.map +1 -0
  24. package/build/browser/index.js +13 -13
  25. package/build/esm/{esm-W5HUFJGQ.js → esm-6BUJALDZ.js} +4 -4
  26. package/build/esm/{esm-W5HUFJGQ.js.map → esm-6BUJALDZ.js.map} +1 -1
  27. package/build/esm/{esm-J5VI72R3.js → esm-7ZIUG4U6.js} +4 -4
  28. package/build/esm/esm-7ZIUG4U6.js.map +1 -0
  29. package/build/esm/{esm-FDYGPX22.js → esm-CYB2O5FN.js} +29 -33
  30. package/build/esm/esm-CYB2O5FN.js.map +1 -0
  31. package/build/esm/{esm-BXEUIM4Y.js → esm-EML4JC7D.js} +4 -4
  32. package/build/esm/{esm-BXEUIM4Y.js.map → esm-EML4JC7D.js.map} +1 -1
  33. package/build/esm/{esm-VD5SBSTG.js → esm-GC4GGPX6.js} +27 -30
  34. package/build/esm/esm-GC4GGPX6.js.map +1 -0
  35. package/build/esm/{esm-G7B67PJ6.js → esm-IV4K65YT.js} +4 -4
  36. package/build/esm/esm-IV4K65YT.js.map +1 -0
  37. package/build/{browser/esm-IMPFU4IQ.js → esm/esm-LP2TDDES.js} +4 -4
  38. package/build/esm/esm-LP2TDDES.js.map +1 -0
  39. package/build/{browser/esm-7R6OLTJV.js → esm/esm-LYSXBZDO.js} +4 -4
  40. package/build/esm/esm-LYSXBZDO.js.map +1 -0
  41. package/build/{browser/esm-F6Y6OKER.js → esm/esm-SE26EE2F.js} +4 -4
  42. package/build/esm/esm-SE26EE2F.js.map +1 -0
  43. package/build/{browser/esm-PBRMAZQD.js → esm/esm-TW5CUHSV.js} +4 -4
  44. package/build/esm/{esm-PBRMAZQD.js.map → esm-TW5CUHSV.js.map} +1 -1
  45. package/build/esm/{esm-76Q3EKG4.js → esm-XD3R7VUV.js} +4 -4
  46. package/build/esm/esm-XD3R7VUV.js.map +1 -0
  47. package/build/esm/getPackageFiles.d.ts.map +1 -1
  48. package/build/esm/index.js +13 -13
  49. package/package.json +13 -13
  50. package/build/browser/esm-76Q3EKG4.js.map +0 -1
  51. package/build/browser/esm-7R6OLTJV.js.map +0 -1
  52. package/build/browser/esm-F6Y6OKER.js.map +0 -1
  53. package/build/browser/esm-FDYGPX22.js.map +0 -1
  54. package/build/browser/esm-G7B67PJ6.js.map +0 -1
  55. package/build/browser/esm-IMPFU4IQ.js.map +0 -1
  56. package/build/browser/esm-J5VI72R3.js.map +0 -1
  57. package/build/browser/esm-VD5SBSTG.js.map +0 -1
  58. package/build/esm/esm-76Q3EKG4.js.map +0 -1
  59. package/build/esm/esm-7R6OLTJV.js.map +0 -1
  60. package/build/esm/esm-F6Y6OKER.js.map +0 -1
  61. package/build/esm/esm-FDYGPX22.js.map +0 -1
  62. package/build/esm/esm-G7B67PJ6.js.map +0 -1
  63. package/build/esm/esm-IMPFU4IQ.js.map +0 -1
  64. package/build/esm/esm-J5VI72R3.js.map +0 -1
  65. package/build/esm/esm-VD5SBSTG.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @osdk/create-app
2
2
 
3
+ ## 2.1.0-beta.23
4
+
5
+ ## 2.1.0-beta.22
6
+
3
7
  ## 2.1.0-beta.21
4
8
 
5
9
  ### Minor Changes
@@ -120,7 +120,7 @@ module.exports = nextConfig;
120
120
  "{{osdkPackage}}": "latest",
121
121
  "@osdk/client": "{{clientVersion}}",
122
122
  "@osdk/oauth": "^1.0.0",
123
- "next": "^15.0.1",
123
+ "next": "^15.1.6",
124
124
  "react": "^18",
125
125
  "react-dom": "^18"
126
126
  },
@@ -132,7 +132,7 @@ module.exports = nextConfig;
132
132
  "eslint": "^9.15.0",
133
133
  "eslint-config-next": "^15.0.1",
134
134
  "typescript": "~5.5.4",
135
- "vitest": "^2.1.3"
135
+ "vitest": "^3.0.4"
136
136
  }
137
137
  }`
138
138
  }], ["public/next.svg", {
@@ -417,5 +417,5 @@ export const getClient = () => {
417
417
  }]]);
418
418
 
419
419
  export { files };
420
- //# sourceMappingURL=esm-W5HUFJGQ.js.map
421
- //# sourceMappingURL=esm-W5HUFJGQ.js.map
420
+ //# sourceMappingURL=esm-6BUJALDZ.js.map
421
+ //# sourceMappingURL=esm-6BUJALDZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../create-app.template.next-static-export.v2/build/esm/generatedNoCheck/index.js"],"names":[],"mappings":"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","file":"esm-W5HUFJGQ.js","sourcesContent":["export const files = new Map([[\".eslintrc.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJyb290IjogdHJ1ZSwKICAiZXh0ZW5kcyI6ICJuZXh0L2NvcmUtd2ViLXZpdGFscyIKfQo=\"\n}], [\"README.md.hbs\", {\n type: \"raw\",\n body: `# {{project}}\n\nThis project was generated with [\\`@osdk/create-app\\`](https://www.npmjs.com/package/@osdk/create-app) and demonstrates using the Ontology SDK package \\`{{osdkPackage}}\\` with React on top of Next.js. Check out the [Next.js](https://nextjs.org/docs) docs for further configuration.\n\n## Developing\n\nRun the following command or equivalent with your preferred package manager to start a local development server on \\`http://localhost:8080\\`:\n\n\\`\\`\\`sh\nnpm run dev\n\\`\\`\\`\n\nDevelopment configuration is stored in \\`.env.development\\`.\n\n{{#if corsProxy}}\nIn order to make API requests to Foundry, a CORS proxy has been set up for local development which may be removed if the stack is configured to allow \\`http://localhost:8080\\` to load resources. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{else}}\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow \\`http://localhost:8080\\` to load resources. If this has not been configured and you are unable to request this, you can alternatively generate your project again with \\`--corsProxy true\\` to use a proxy for API requests during local development. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{/if}}\n\n## Deploying\n\nRun the following command or equivalent with your preferred package manager to create a production build of your application:\n\n\\`\\`\\`sh\nnpm run build\n\\`\\`\\`\n\nProduction configuration is stored in \\`.env.production\\`.\n\nIf you did not fill in the URL your production application will be hosted on you will need to fill in the \\`NEXT_PUBLIC_FOUNDRY_REDIRECT_URL\\` in \\`.env.production\\`. A default test is included in \\`env.test.ts\\` to verify your production environment variables which you can enable by removing the skip condition or running tests with the environment variable set \\`VERIFY_ENV_PRODUCTION=true\\`.\n\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow the production origin to load resources. This will be automatically done for you if you are using Foundry website hosting. The configured OAuth client must also allow the production origin auth callback as a redirect URL.\n\nA \\`foundry.config.json\\` file is included in the root of this project to make deploying to Foundry website hosting with [\\`@osdk/cli\\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.\n\n### Content Security Policy (CSP)\n\n⚠️ Building this Next.js application will produce .html files that will require \\`'unsafe-inline'\\` in the \\`script-src\\` directive of your Content Security Policy. See https://github.com/vercel/next.js/discussions/54152 for more info.\n`\n}], [\".gitignore\", {\n type: \"raw\",\n body: `# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next\n/out\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n`\n}], [\"next.config.js.hbs\", {\n type: \"raw\",\n body: `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n reactStrictMode: false,\n output: \"export\",\n {{#if corsProxy}}\n // Rewrites are used to proxy requests during local development only for CORS\n // and will warn when using this feature together with export.\n rewrites: () => [\n {\n source: \"/:prefix(multipass/api|api)/:path*\",\n destination: \"{{foundryUrl}}/:prefix/:path*\",\n },\n ],\n {{/if}}\n};\n\nmodule.exports = nextConfig;\n`\n}], [\"package.json.hbs\", {\n type: \"raw\",\n body: `{\n \"name\": \"{{project}}\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"scripts\": {\n \"dev\": \"next dev -p 8080\",\n \"build\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"{{osdkPackage}}\": \"latest\",\n \"@osdk/client\": \"{{clientVersion}}\",\n \"@osdk/oauth\": \"^1.0.0\",\n \"next\": \"^15.0.1\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\"\n },\n \"devDependencies\": {\n \"@next/env\": \"^15.0.1\",\n \"@types/node\": \"^20.17.0\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-dom\": \"^18.3.1\",\n \"eslint\": \"^9.15.0\",\n \"eslint-config-next\": \"^15.0.1\",\n \"typescript\": \"~5.5.4\",\n \"vitest\": \"^2.1.3\"\n }\n}`\n}], [\"public/next.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE4MCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtYXNrIGlkPSJtYXNrMF80MDhfMTM0IiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCI+CjxjaXJjbGUgY3g9IjkwIiBjeT0iOTAiIHI9IjkwIiBmaWxsPSJibGFjayIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfNDA4XzEzNCkiPgo8Y2lyY2xlIGN4PSI5MCIgY3k9IjkwIiByPSI5MCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0OS41MDggMTU3LjUyTDY5LjE0MiA1NEg1NFYxMjUuOTdINjYuMTEzNlY2OS4zODM2TDEzOS45OTkgMTY0Ljg0NUMxNDMuMzMzIDE2Mi42MTQgMTQ2LjUwOSAxNjAuMTY1IDE0OS41MDggMTU3LjUyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzQwOF8xMzQpIi8+CjxyZWN0IHg9IjExNSIgeT0iNTQiIHdpZHRoPSIxMiIgaGVpZ2h0PSI3MiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzQwOF8xMzQpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80MDhfMTM0IiB4MT0iMTA5IiB5MT0iMTE2LjUiIHgyPSIxNDQuNSIgeTI9IjE2MC41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNDA4XzEzNCIgeDE9IjEyMSIgeTE9IjU0IiB4Mj0iMTIwLjc5OSIgeTI9IjEwNi44NzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0id2hpdGUiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\n}], [\"public/palantir.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjEwNzY4IDYuMDY0MDFDNC4xMDc2OCA4LjM3NzEgNS45NjcwMiAxMC4yNTI2IDguMjYwNTkgMTAuMjUyNkMxMC41NTQzIDEwLjI1MjYgMTIuNDEzOCA4LjM3NzEgMTIuNDEzOCA2LjA2NDAxQzEyLjQxMzggMy43NTA4IDEwLjU1NDMgMS44NzU1MyA4LjI2MDU5IDEuODc1NTNDNS45NjcwMiAxLjg3NTUzIDQuMTA3NjggMy43NTA4IDQuMTA3NjggNi4wNjQwMVpNOC4yNjA5MyAxMy45MjNMMTMuNjI5OSAxMS41ODQ4TDE0LjUyMTcgMTMuMzA5MUw4LjI2MDkzIDE2TDIgMTMuMzA5MUwyLjg5MjAxIDExLjU4NDhMOC4yNjA5MyAxMy45MjNaTTguMjYxMDEgMEM0Ljk0MzY3IDAgMi4yNTQ0MiAyLjcxMjI4IDIuMjU0NDIgNi4wNTgwM0MyLjI1NDQyIDkuNDAzNzggNC45NDM2NyAxMi4xMTU5IDguMjYxMDEgMTIuMTE1OUMxMS41NzgyIDEyLjExNTkgMTQuMjY3NiA5LjQwMzc4IDE0LjI2NzYgNi4wNTgwM0MxNC4yNjc2IDIuNzEyMjggMTEuNTc4MiAwIDguMjYxMDEgMFoiIGZpbGw9IiMxMTE0MTgiLz4KPC9zdmc+Cg==\"\n}], [\"src/app/auth/callback/page.tsx\", {\n type: \"raw\",\n body: `\"use client\";\nimport { getAuth } from \"@/lib/client\";\nimport { useRouter } from \"next/navigation\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Component to render at \\`/auth/callback\\`\n * This calls signIn() again to save the token, and then navigates the user back to the home page.\n */\nfunction AuthCallback() {\n const [error, setError] = useState<string | undefined>(undefined);\n const router = useRouter();\n\n // This effect conflicts with React 18 strict mode in development\n // https://react.dev/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development\n useEffect(() => {\n getAuth()\n .signIn()\n .then(() => router.replace(\"/\"))\n .catch((e: unknown) => setError((e as Error).message ?? e));\n }, [router]);\n return <div>{error != null ? error : \"Authenticating…\"}</div>;\n}\n\nexport default AuthCallback;\n`\n}], [\"src/app/globals.css\", {\n \"type\": \"base64\",\n \"body\": \"OnJvb3QgewogIGZvbnQtZmFtaWx5OiBJbnRlciwgc3lzdGVtLXVpLCBBdmVuaXIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBmb250LXdlaWdodDogNDAwOwoKICBjb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyk7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjQyNDsKCiAgZm9udC1zeW50aGVzaXM6IG5vbmU7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwp9Cgojcm9vdC1jb250YWluZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleDogMTsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Cgojcm9vdCB7CiAgbWF4LXdpZHRoOiAxMjgwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogMnJlbTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmEgewogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgY29sb3I6ICM2NDZjZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0Owp9CmE6aG92ZXIgewogIGNvbG9yOiAjNTM1YmYyOwp9Cgpib2R5IHsKICBtYXJnaW46IDA7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG1pbi13aWR0aDogMzIwcHg7CiAgbWluLWhlaWdodDogMTAwdmg7Cn0KCmgxIHsKICBmb250LXNpemU6IDMuMmVtOwogIGxpbmUtaGVpZ2h0OiAxLjE7Cn0KCmJ1dHRvbiB7CiAgYm9yZGVyLXJhZGl1czogOHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIHBhZGRpbmc6IDAuNmVtIDEuMmVtOwogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMWExYTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjVzOwp9CmJ1dHRvbjpob3ZlciB7CiAgYm9yZGVyLWNvbG9yOiAjNjQ2Y2ZmOwp9CmJ1dHRvbjpmb2N1cywKYnV0dG9uOmZvY3VzLXZpc2libGUgewogIG91dGxpbmU6IDRweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKICA6cm9vdCB7CiAgICBjb2xvcjogIzIxMzU0NzsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgfQogIGE6aG92ZXIgewogICAgY29sb3I6ICM3NDdiZmY7CiAgfQogIGJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogIH0KfQo=\"\n}], [\"src/app/icon.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE4MCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtYXNrIGlkPSJtYXNrMF80MDhfMTM0IiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCI+CjxjaXJjbGUgY3g9IjkwIiBjeT0iOTAiIHI9IjkwIiBmaWxsPSJibGFjayIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfNDA4XzEzNCkiPgo8Y2lyY2xlIGN4PSI5MCIgY3k9IjkwIiByPSI5MCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0OS41MDggMTU3LjUyTDY5LjE0MiA1NEg1NFYxMjUuOTdINjYuMTEzNlY2OS4zODM2TDEzOS45OTkgMTY0Ljg0NUMxNDMuMzMzIDE2Mi42MTQgMTQ2LjUwOSAxNjAuMTY1IDE0OS41MDggMTU3LjUyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzQwOF8xMzQpIi8+CjxyZWN0IHg9IjExNSIgeT0iNTQiIHdpZHRoPSIxMiIgaGVpZ2h0PSI3MiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzQwOF8xMzQpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80MDhfMTM0IiB4MT0iMTA5IiB5MT0iMTE2LjUiIHgyPSIxNDQuNSIgeTI9IjE2MC41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNDA4XzEzNCIgeDE9IjEyMSIgeTE9IjU0IiB4Mj0iMTIwLjc5OSIgeTI9IjEwNi44NzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0id2hpdGUiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\n}], [\"src/app/layout.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmxvZ28gewogIGhlaWdodDogNmVtOwogIHdpZHRoOiBhdXRvOwogIHBhZGRpbmc6IDEuNWVtOwogIHdpbGwtY2hhbmdlOiBmaWx0ZXI7CiAgdHJhbnNpdGlvbjogZmlsdGVyIDMwMG1zOwp9CgoubG9nbzpob3ZlciB7CiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMmVtICM2NDZjZmZhYSk7Cn0K\"\n}], [\"src/app/layout.tsx\", {\n type: \"raw\",\n body: `import type { Metadata } from \"next\";\nimport { Inter } from \"next/font/google\";\nimport Image from \"next/image\";\nimport css from \"./layout.module.css\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata: Metadata = {\n title: \"Ontology SDK + Next.js\",\n description: \"Generated by @osdk/create-app\",\n};\n\nfunction RootLayout({ children }: { children: React.ReactNode }) {\n return (\n <html lang=\"en\">\n <body className={inter.className}>\n <div id=\"root-container\">\n <div id=\"root\">\n <a\n href=\"https://www.palantir.com/docs/foundry/ontology-sdk/overview/\"\n target=\"_blank\"\n >\n <Image\n src=\"/palantir.svg\"\n alt=\"Palantir logo\"\n className={css.logo}\n width={16}\n height={16}\n priority\n />\n </a>\n <a href=\"https://nextjs.org/\" target=\"_blank\">\n <Image\n src=\"/next.svg\"\n alt=\"Next logo\"\n className={css.logo}\n width={16}\n height={16}\n priority\n />\n </a>\n {children}\n </div>\n </div>\n </body>\n </html>\n );\n}\n\nexport default RootLayout;\n`\n}], [\"src/app/login/page.tsx\", {\n type: \"raw\",\n body: `\"use client\";\nimport { getAuth } from \"@/lib/client\";\nimport { useRouter } from \"next/navigation\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction Login() {\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const router = useRouter();\n const [token, setToken] = useState<string | undefined>(undefined);\n useEffect(() => {\n setToken(getAuth().getTokenOrUndefined());\n }, []);\n\n const handleLogin = useCallback(async () => {\n setIsLoggingIn(true);\n try {\n // Initiate the OAuth flow, which will redirect the user to log into Foundry\n // Once the login has completed, the user will be redirected back to the route defined via the\n // FOUNDRY_REDIRECT_URL variable in .env.development\n await getAuth().signIn();\n } catch (e: unknown) {\n console.error(e);\n setError((e as Error).message ?? e);\n } finally {\n setIsLoggingIn(false);\n }\n }, []);\n\n useEffect(() => {\n // If the token exists but a user tries to load /login, redirect to the home page instead\n if (token != null) {\n router.replace(\"/\");\n }\n }, [token, router]);\n\n return (\n <div>\n <h1>Ontology SDK</h1>\n <button onClick={handleLogin}>\n {isLoggingIn ? \"Logging in…\" : \"Log in \"}\n </button>\n {error && <div>Unable to log in: {error}</div>}\n </div>\n );\n}\n\nexport default Login;\n`\n}], [\"src/app/page.module.css\", {\n \"type\": \"base64\",\n \"body\": \"Lm1ldGhvZHMgewogIHBhZGRpbmc6IDJlbTsKICBnYXA6IDJlbTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgZmxleC13cmFwOiB3cmFwOwp9Cg==\"\n}], [\"src/app/page.tsx.hbs\", {\n type: \"raw\",\n body: `\"use client\";\nimport { \\$Objects, \\$Actions, \\$Queries } from \"{{osdkPackage}}\";\nimport useAuthenticated from \"@/lib/useAuthenticated\";\nimport css from \"./page.module.css\";\n\nfunction Home() {\n const authenticated = useAuthenticated();\n if (!authenticated) {\n return null;\n }\n\n const objectApiNames = Object.keys(\\$Objects);\n const actionApiNames = Object.keys(\\$Actions);\n const queryApiNames = Object.keys(\\$Queries);\n\n return (\n <div>\n <h1>{{osdkPackage}}</h1>\n <p>\n Welcome to your Ontology SDK! Try using any of the following methods\n now.\n </p>\n <div className={css.methods}>\n <div>\n <h2>Objects ({objectApiNames.length})</h2>\n {objectApiNames.map((objectApiName) => (\n <pre key={objectApiName}>\n \\$Objects.{objectApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Actions ({actionApiNames.length})</h2>\n {actionApiNames.map((actionApiName) => (\n <pre key={actionApiName}>\n \\$Actions.{actionApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Queries ({queryApiNames.length})</h2>\n {queryApiNames.map((queryApiName) => (\n <pre key={queryApiName}>\n \\$Queries.{queryApiName}\n </pre>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default Home;\n`\n}], [\"src/env.test.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgbG9hZEVudkNvbmZpZyB9IGZyb20gIkBuZXh0L2VudiI7CmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gInZpdGVzdCI7Cgpjb25zdCBFTlZfVkFSUyA9IFsKICAiTkVYVF9QVUJMSUNfRk9VTkRSWV9BUElfVVJMIiwKICAiTkVYVF9QVUJMSUNfRk9VTkRSWV9DTElFTlRfSUQiLAogICJORVhUX1BVQkxJQ19GT1VORFJZX1JFRElSRUNUX1VSTCIsCl07CgpiZWZvcmVFYWNoKCgpID0+IHsKICB2aS5zdHViRW52KCJOT0RFX0VOViIsICJwcm9kdWN0aW9uIik7Cn0pOwoKYWZ0ZXJFYWNoKCgpID0+IHsKICB2aS51bnN0dWJBbGxFbnZzKCk7Cn0pOwoKZm9yIChjb25zdCBlbnZWYXIgb2YgRU5WX1ZBUlMpIHsKICB0ZXN0LnNraXBJZihwcm9jZXNzLmVudi5WRVJJRllfRU5WX1BST0RVQ1RJT04gIT09ICJ0cnVlIikoCiAgICBgcHJvZHVjdGlvbiBlbnYgc2hvdWxkIGNvbnRhaW4gJHtlbnZWYXJ9YCwKICAgICgpID0+IHsKICAgICAgY29uc3QgZW52ID0gbG9hZEVudkNvbmZpZyhwcm9jZXNzLmN3ZCgpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGVudi5jb21iaW5lZEVudltlbnZWYXJdLAogICAgICAgIGAke2VudlZhcn0gc2hvdWxkIGJlIGRlZmluZWRgLAogICAgICApLnRvQmVEZWZpbmVkKCk7CiAgICAgIGV4cGVjdCgKICAgICAgICBlbnYuY29tYmluZWRFbnZbZW52VmFyXSwKICAgICAgICBgJHtlbnZWYXJ9IHNob3VsZCBub3QgY29udGFpbiBwbGFjZWhvbGRlciB2YWx1ZWAsCiAgICAgICkubm90LnRvTWF0Y2goLzwuKj4vKTsKICAgIH0sCiAgKTsKfQo=\"\n}], [\"src/lib/client.ts.hbs\", {\n type: \"raw\",\n body: `import type { Client } from \"@osdk/client\";\nimport type { PublicOauthClient } from \"@osdk/oauth\";\nimport { createClient } from \"@osdk/client\";\nimport { \\$ontologyRid } from \"{{osdkPackage}}\";\nimport { createPublicOauthClient } from \"@osdk/oauth\";\n\nconst url = process.env.NEXT_PUBLIC_FOUNDRY_API_URL;\nconst clientId = process.env.NEXT_PUBLIC_FOUNDRY_CLIENT_ID;\nconst redirectUrl = process.env.NEXT_PUBLIC_FOUNDRY_REDIRECT_URL;\ncheckEnv(url, \"NEXT_PUBLIC_FOUNDRY_API_URL\");\ncheckEnv(clientId, \"NEXT_PUBLIC_FOUNDRY_CLIENT_ID\");\ncheckEnv(redirectUrl, \"NEXT_PUBLIC_FOUNDRY_REDIRECT_URL\");\n{{#if scopes}}\nconst scopes = [\n {{#each scopes}}\n \"{{this}}\",\n {{/each}}\n];\n{{/if}}\n\nfunction checkEnv(\n value: string | undefined,\n name: string,\n): asserts value is string {\n if (value == null) {\n throw new Error(\\`Missing environment variable: \\${name}\\`);\n }\n}\n\n// Lazily configure the auth and client to prevent them from being used in pre-rendering\nlet auth: PublicOauthClient | null = null;\nlet client: Client | null = null;\n\nexport const getAuth = () => {\n if (auth == null) {\n auth = createPublicOauthClient(\n clientId,\n url,\n redirectUrl,\n {{#if scopes}}\n true,\n undefined,\n window.location.toString(),\n scopes,\n {{/if}}\n );\n }\n return auth;\n}\n\nexport const getClient = () => {\n if (client == null) {\n client = createClient(\n url,\n \\$ontologyRid,\n getAuth(),\n );\n }\n return client;\n}\n`\n}], [\"src/lib/useAuthenticated.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAibmV4dC9uYXZpZ2F0aW9uIjsKaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gInJlYWN0IjsKaW1wb3J0IHsgZ2V0QXV0aCB9IGZyb20gIi4vY2xpZW50IjsKCmZ1bmN0aW9uIHVzZUF1dGhlbnRpY2F0ZWQoKSB7CiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7CiAgY29uc3QgW3Rva2VuLCBzZXRUb2tlbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7CiAgdXNlRWZmZWN0KCgpID0+IHsKICAgIHNldFRva2VuKGdldEF1dGgoKS5nZXRUb2tlbk9yVW5kZWZpbmVkKCkpOwogIH0sIFtdKTsKICB1c2VFZmZlY3QoKCkgPT4gewogICAgY29uc3QgYXV0aCA9IGdldEF1dGgoKTsKICAgIGlmIChhdXRoLmdldFRva2VuT3JVbmRlZmluZWQoKSA9PSBudWxsKSB7CiAgICAgIGF1dGgKICAgICAgICAucmVmcmVzaCgpCiAgICAgICAgLnRoZW4oKCkgPT4gewogICAgICAgICAgc2V0VG9rZW4oYXV0aC5nZXRUb2tlbk9yVW5kZWZpbmVkKCkpOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKCgpID0+IHsKICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCByZWZyZXNoIHRoZSB0b2tlbiAoaS5lLiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluKSB3ZSByZWRpcmVjdCB0byB0aGUgbG9naW4gcGFnZQogICAgICAgICAgcm91dGVyLnB1c2goIi9sb2dpbiIpOwogICAgICAgIH0pOwogICAgfQogIH0sIFtyb3V0ZXJdKTsKCiAgcmV0dXJuIHRva2VuICE9IG51bGw7Cn0KCmV4cG9ydCBkZWZhdWx0IHVzZUF1dGhlbnRpY2F0ZWQ7Cg==\"\n}], [\"tsconfig.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAibGliIjogWyJkb20iLCAiZG9tLml0ZXJhYmxlIiwgImVzbmV4dCJdLAogICAgImFsbG93SnMiOiB0cnVlLAogICAgInNraXBMaWJDaGVjayI6IHRydWUsCiAgICAic3RyaWN0IjogdHJ1ZSwKICAgICJub0VtaXQiOiB0cnVlLAogICAgImVzTW9kdWxlSW50ZXJvcCI6IHRydWUsCiAgICAibW9kdWxlIjogImVzbmV4dCIsCiAgICAibW9kdWxlUmVzb2x1dGlvbiI6ICJidW5kbGVyIiwKICAgICJyZXNvbHZlSnNvbk1vZHVsZSI6IHRydWUsCiAgICAiaXNvbGF0ZWRNb2R1bGVzIjogdHJ1ZSwKICAgICJqc3giOiAicHJlc2VydmUiLAogICAgImluY3JlbWVudGFsIjogdHJ1ZSwKICAgICJwbHVnaW5zIjogWwogICAgICB7CiAgICAgICAgIm5hbWUiOiAibmV4dCIKICAgICAgfQogICAgXSwKICAgICJwYXRocyI6IHsKICAgICAgIkAvKiI6IFsiLi9zcmMvKiJdCiAgICB9CiAgfSwKICAiaW5jbHVkZSI6IFsibmV4dC1lbnYuZC50cyIsICIqKi8qLnRzIiwgIioqLyoudHN4IiwgIi5uZXh0L3R5cGVzLyoqLyoudHMiXSwKICAiZXhjbHVkZSI6IFsibm9kZV9tb2R1bGVzIl0KfQo=\"\n}]]);"]}
1
+ {"version":3,"sources":["../../../create-app.template.next-static-export.v2/build/esm/generatedNoCheck/index.js"],"names":[],"mappings":"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","file":"esm-6BUJALDZ.js","sourcesContent":["export const files = new Map([[\".eslintrc.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJyb290IjogdHJ1ZSwKICAiZXh0ZW5kcyI6ICJuZXh0L2NvcmUtd2ViLXZpdGFscyIKfQo=\"\n}], [\"README.md.hbs\", {\n type: \"raw\",\n body: `# {{project}}\n\nThis project was generated with [\\`@osdk/create-app\\`](https://www.npmjs.com/package/@osdk/create-app) and demonstrates using the Ontology SDK package \\`{{osdkPackage}}\\` with React on top of Next.js. Check out the [Next.js](https://nextjs.org/docs) docs for further configuration.\n\n## Developing\n\nRun the following command or equivalent with your preferred package manager to start a local development server on \\`http://localhost:8080\\`:\n\n\\`\\`\\`sh\nnpm run dev\n\\`\\`\\`\n\nDevelopment configuration is stored in \\`.env.development\\`.\n\n{{#if corsProxy}}\nIn order to make API requests to Foundry, a CORS proxy has been set up for local development which may be removed if the stack is configured to allow \\`http://localhost:8080\\` to load resources. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{else}}\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow \\`http://localhost:8080\\` to load resources. If this has not been configured and you are unable to request this, you can alternatively generate your project again with \\`--corsProxy true\\` to use a proxy for API requests during local development. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{/if}}\n\n## Deploying\n\nRun the following command or equivalent with your preferred package manager to create a production build of your application:\n\n\\`\\`\\`sh\nnpm run build\n\\`\\`\\`\n\nProduction configuration is stored in \\`.env.production\\`.\n\nIf you did not fill in the URL your production application will be hosted on you will need to fill in the \\`NEXT_PUBLIC_FOUNDRY_REDIRECT_URL\\` in \\`.env.production\\`. A default test is included in \\`env.test.ts\\` to verify your production environment variables which you can enable by removing the skip condition or running tests with the environment variable set \\`VERIFY_ENV_PRODUCTION=true\\`.\n\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow the production origin to load resources. This will be automatically done for you if you are using Foundry website hosting. The configured OAuth client must also allow the production origin auth callback as a redirect URL.\n\nA \\`foundry.config.json\\` file is included in the root of this project to make deploying to Foundry website hosting with [\\`@osdk/cli\\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.\n\n### Content Security Policy (CSP)\n\n⚠️ Building this Next.js application will produce .html files that will require \\`'unsafe-inline'\\` in the \\`script-src\\` directive of your Content Security Policy. See https://github.com/vercel/next.js/discussions/54152 for more info.\n`\n}], [\".gitignore\", {\n type: \"raw\",\n body: `# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next\n/out\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n`\n}], [\"next.config.js.hbs\", {\n type: \"raw\",\n body: `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n reactStrictMode: false,\n output: \"export\",\n {{#if corsProxy}}\n // Rewrites are used to proxy requests during local development only for CORS\n // and will warn when using this feature together with export.\n rewrites: () => [\n {\n source: \"/:prefix(multipass/api|api)/:path*\",\n destination: \"{{foundryUrl}}/:prefix/:path*\",\n },\n ],\n {{/if}}\n};\n\nmodule.exports = nextConfig;\n`\n}], [\"package.json.hbs\", {\n type: \"raw\",\n body: `{\n \"name\": \"{{project}}\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"scripts\": {\n \"dev\": \"next dev -p 8080\",\n \"build\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"{{osdkPackage}}\": \"latest\",\n \"@osdk/client\": \"{{clientVersion}}\",\n \"@osdk/oauth\": \"^1.0.0\",\n \"next\": \"^15.1.6\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\"\n },\n \"devDependencies\": {\n \"@next/env\": \"^15.0.1\",\n \"@types/node\": \"^20.17.0\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-dom\": \"^18.3.1\",\n \"eslint\": \"^9.15.0\",\n \"eslint-config-next\": \"^15.0.1\",\n \"typescript\": \"~5.5.4\",\n \"vitest\": \"^3.0.4\"\n }\n}`\n}], [\"public/next.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE4MCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtYXNrIGlkPSJtYXNrMF80MDhfMTM0IiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCI+CjxjaXJjbGUgY3g9IjkwIiBjeT0iOTAiIHI9IjkwIiBmaWxsPSJibGFjayIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfNDA4XzEzNCkiPgo8Y2lyY2xlIGN4PSI5MCIgY3k9IjkwIiByPSI5MCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0OS41MDggMTU3LjUyTDY5LjE0MiA1NEg1NFYxMjUuOTdINjYuMTEzNlY2OS4zODM2TDEzOS45OTkgMTY0Ljg0NUMxNDMuMzMzIDE2Mi42MTQgMTQ2LjUwOSAxNjAuMTY1IDE0OS41MDggMTU3LjUyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzQwOF8xMzQpIi8+CjxyZWN0IHg9IjExNSIgeT0iNTQiIHdpZHRoPSIxMiIgaGVpZ2h0PSI3MiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzQwOF8xMzQpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80MDhfMTM0IiB4MT0iMTA5IiB5MT0iMTE2LjUiIHgyPSIxNDQuNSIgeTI9IjE2MC41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNDA4XzEzNCIgeDE9IjEyMSIgeTE9IjU0IiB4Mj0iMTIwLjc5OSIgeTI9IjEwNi44NzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0id2hpdGUiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\n}], [\"public/palantir.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjEwNzY4IDYuMDY0MDFDNC4xMDc2OCA4LjM3NzEgNS45NjcwMiAxMC4yNTI2IDguMjYwNTkgMTAuMjUyNkMxMC41NTQzIDEwLjI1MjYgMTIuNDEzOCA4LjM3NzEgMTIuNDEzOCA2LjA2NDAxQzEyLjQxMzggMy43NTA4IDEwLjU1NDMgMS44NzU1MyA4LjI2MDU5IDEuODc1NTNDNS45NjcwMiAxLjg3NTUzIDQuMTA3NjggMy43NTA4IDQuMTA3NjggNi4wNjQwMVpNOC4yNjA5MyAxMy45MjNMMTMuNjI5OSAxMS41ODQ4TDE0LjUyMTcgMTMuMzA5MUw4LjI2MDkzIDE2TDIgMTMuMzA5MUwyLjg5MjAxIDExLjU4NDhMOC4yNjA5MyAxMy45MjNaTTguMjYxMDEgMEM0Ljk0MzY3IDAgMi4yNTQ0MiAyLjcxMjI4IDIuMjU0NDIgNi4wNTgwM0MyLjI1NDQyIDkuNDAzNzggNC45NDM2NyAxMi4xMTU5IDguMjYxMDEgMTIuMTE1OUMxMS41NzgyIDEyLjExNTkgMTQuMjY3NiA5LjQwMzc4IDE0LjI2NzYgNi4wNTgwM0MxNC4yNjc2IDIuNzEyMjggMTEuNTc4MiAwIDguMjYxMDEgMFoiIGZpbGw9IiMxMTE0MTgiLz4KPC9zdmc+Cg==\"\n}], [\"src/app/auth/callback/page.tsx\", {\n type: \"raw\",\n body: `\"use client\";\nimport { getAuth } from \"@/lib/client\";\nimport { useRouter } from \"next/navigation\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Component to render at \\`/auth/callback\\`\n * This calls signIn() again to save the token, and then navigates the user back to the home page.\n */\nfunction AuthCallback() {\n const [error, setError] = useState<string | undefined>(undefined);\n const router = useRouter();\n\n // This effect conflicts with React 18 strict mode in development\n // https://react.dev/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development\n useEffect(() => {\n getAuth()\n .signIn()\n .then(() => router.replace(\"/\"))\n .catch((e: unknown) => setError((e as Error).message ?? e));\n }, [router]);\n return <div>{error != null ? error : \"Authenticating…\"}</div>;\n}\n\nexport default AuthCallback;\n`\n}], [\"src/app/globals.css\", {\n \"type\": \"base64\",\n \"body\": \"OnJvb3QgewogIGZvbnQtZmFtaWx5OiBJbnRlciwgc3lzdGVtLXVpLCBBdmVuaXIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBmb250LXdlaWdodDogNDAwOwoKICBjb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyk7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjQyNDsKCiAgZm9udC1zeW50aGVzaXM6IG5vbmU7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwp9Cgojcm9vdC1jb250YWluZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleDogMTsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Cgojcm9vdCB7CiAgbWF4LXdpZHRoOiAxMjgwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogMnJlbTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmEgewogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgY29sb3I6ICM2NDZjZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0Owp9CmE6aG92ZXIgewogIGNvbG9yOiAjNTM1YmYyOwp9Cgpib2R5IHsKICBtYXJnaW46IDA7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG1pbi13aWR0aDogMzIwcHg7CiAgbWluLWhlaWdodDogMTAwdmg7Cn0KCmgxIHsKICBmb250LXNpemU6IDMuMmVtOwogIGxpbmUtaGVpZ2h0OiAxLjE7Cn0KCmJ1dHRvbiB7CiAgYm9yZGVyLXJhZGl1czogOHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIHBhZGRpbmc6IDAuNmVtIDEuMmVtOwogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMWExYTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjVzOwp9CmJ1dHRvbjpob3ZlciB7CiAgYm9yZGVyLWNvbG9yOiAjNjQ2Y2ZmOwp9CmJ1dHRvbjpmb2N1cywKYnV0dG9uOmZvY3VzLXZpc2libGUgewogIG91dGxpbmU6IDRweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKICA6cm9vdCB7CiAgICBjb2xvcjogIzIxMzU0NzsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgfQogIGE6aG92ZXIgewogICAgY29sb3I6ICM3NDdiZmY7CiAgfQogIGJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogIH0KfQo=\"\n}], [\"src/app/icon.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE4MCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtYXNrIGlkPSJtYXNrMF80MDhfMTM0IiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCI+CjxjaXJjbGUgY3g9IjkwIiBjeT0iOTAiIHI9IjkwIiBmaWxsPSJibGFjayIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfNDA4XzEzNCkiPgo8Y2lyY2xlIGN4PSI5MCIgY3k9IjkwIiByPSI5MCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTE0OS41MDggMTU3LjUyTDY5LjE0MiA1NEg1NFYxMjUuOTdINjYuMTEzNlY2OS4zODM2TDEzOS45OTkgMTY0Ljg0NUMxNDMuMzMzIDE2Mi42MTQgMTQ2LjUwOSAxNjAuMTY1IDE0OS41MDggMTU3LjUyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzQwOF8xMzQpIi8+CjxyZWN0IHg9IjExNSIgeT0iNTQiIHdpZHRoPSIxMiIgaGVpZ2h0PSI3MiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzQwOF8xMzQpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80MDhfMTM0IiB4MT0iMTA5IiB5MT0iMTE2LjUiIHgyPSIxNDQuNSIgeTI9IjE2MC41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0id2hpdGUiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNDA4XzEzNCIgeDE9IjEyMSIgeTE9IjU0IiB4Mj0iMTIwLjc5OSIgeTI9IjEwNi44NzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0id2hpdGUiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\n}], [\"src/app/layout.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmxvZ28gewogIGhlaWdodDogNmVtOwogIHdpZHRoOiBhdXRvOwogIHBhZGRpbmc6IDEuNWVtOwogIHdpbGwtY2hhbmdlOiBmaWx0ZXI7CiAgdHJhbnNpdGlvbjogZmlsdGVyIDMwMG1zOwp9CgoubG9nbzpob3ZlciB7CiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMmVtICM2NDZjZmZhYSk7Cn0K\"\n}], [\"src/app/layout.tsx\", {\n type: \"raw\",\n body: `import type { Metadata } from \"next\";\nimport { Inter } from \"next/font/google\";\nimport Image from \"next/image\";\nimport css from \"./layout.module.css\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata: Metadata = {\n title: \"Ontology SDK + Next.js\",\n description: \"Generated by @osdk/create-app\",\n};\n\nfunction RootLayout({ children }: { children: React.ReactNode }) {\n return (\n <html lang=\"en\">\n <body className={inter.className}>\n <div id=\"root-container\">\n <div id=\"root\">\n <a\n href=\"https://www.palantir.com/docs/foundry/ontology-sdk/overview/\"\n target=\"_blank\"\n >\n <Image\n src=\"/palantir.svg\"\n alt=\"Palantir logo\"\n className={css.logo}\n width={16}\n height={16}\n priority\n />\n </a>\n <a href=\"https://nextjs.org/\" target=\"_blank\">\n <Image\n src=\"/next.svg\"\n alt=\"Next logo\"\n className={css.logo}\n width={16}\n height={16}\n priority\n />\n </a>\n {children}\n </div>\n </div>\n </body>\n </html>\n );\n}\n\nexport default RootLayout;\n`\n}], [\"src/app/login/page.tsx\", {\n type: \"raw\",\n body: `\"use client\";\nimport { getAuth } from \"@/lib/client\";\nimport { useRouter } from \"next/navigation\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction Login() {\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const router = useRouter();\n const [token, setToken] = useState<string | undefined>(undefined);\n useEffect(() => {\n setToken(getAuth().getTokenOrUndefined());\n }, []);\n\n const handleLogin = useCallback(async () => {\n setIsLoggingIn(true);\n try {\n // Initiate the OAuth flow, which will redirect the user to log into Foundry\n // Once the login has completed, the user will be redirected back to the route defined via the\n // FOUNDRY_REDIRECT_URL variable in .env.development\n await getAuth().signIn();\n } catch (e: unknown) {\n console.error(e);\n setError((e as Error).message ?? e);\n } finally {\n setIsLoggingIn(false);\n }\n }, []);\n\n useEffect(() => {\n // If the token exists but a user tries to load /login, redirect to the home page instead\n if (token != null) {\n router.replace(\"/\");\n }\n }, [token, router]);\n\n return (\n <div>\n <h1>Ontology SDK</h1>\n <button onClick={handleLogin}>\n {isLoggingIn ? \"Logging in…\" : \"Log in \"}\n </button>\n {error && <div>Unable to log in: {error}</div>}\n </div>\n );\n}\n\nexport default Login;\n`\n}], [\"src/app/page.module.css\", {\n \"type\": \"base64\",\n \"body\": \"Lm1ldGhvZHMgewogIHBhZGRpbmc6IDJlbTsKICBnYXA6IDJlbTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgZmxleC13cmFwOiB3cmFwOwp9Cg==\"\n}], [\"src/app/page.tsx.hbs\", {\n type: \"raw\",\n body: `\"use client\";\nimport { \\$Objects, \\$Actions, \\$Queries } from \"{{osdkPackage}}\";\nimport useAuthenticated from \"@/lib/useAuthenticated\";\nimport css from \"./page.module.css\";\n\nfunction Home() {\n const authenticated = useAuthenticated();\n if (!authenticated) {\n return null;\n }\n\n const objectApiNames = Object.keys(\\$Objects);\n const actionApiNames = Object.keys(\\$Actions);\n const queryApiNames = Object.keys(\\$Queries);\n\n return (\n <div>\n <h1>{{osdkPackage}}</h1>\n <p>\n Welcome to your Ontology SDK! Try using any of the following methods\n now.\n </p>\n <div className={css.methods}>\n <div>\n <h2>Objects ({objectApiNames.length})</h2>\n {objectApiNames.map((objectApiName) => (\n <pre key={objectApiName}>\n \\$Objects.{objectApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Actions ({actionApiNames.length})</h2>\n {actionApiNames.map((actionApiName) => (\n <pre key={actionApiName}>\n \\$Actions.{actionApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Queries ({queryApiNames.length})</h2>\n {queryApiNames.map((queryApiName) => (\n <pre key={queryApiName}>\n \\$Queries.{queryApiName}\n </pre>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default Home;\n`\n}], [\"src/env.test.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgbG9hZEVudkNvbmZpZyB9IGZyb20gIkBuZXh0L2VudiI7CmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gInZpdGVzdCI7Cgpjb25zdCBFTlZfVkFSUyA9IFsKICAiTkVYVF9QVUJMSUNfRk9VTkRSWV9BUElfVVJMIiwKICAiTkVYVF9QVUJMSUNfRk9VTkRSWV9DTElFTlRfSUQiLAogICJORVhUX1BVQkxJQ19GT1VORFJZX1JFRElSRUNUX1VSTCIsCl07CgpiZWZvcmVFYWNoKCgpID0+IHsKICB2aS5zdHViRW52KCJOT0RFX0VOViIsICJwcm9kdWN0aW9uIik7Cn0pOwoKYWZ0ZXJFYWNoKCgpID0+IHsKICB2aS51bnN0dWJBbGxFbnZzKCk7Cn0pOwoKZm9yIChjb25zdCBlbnZWYXIgb2YgRU5WX1ZBUlMpIHsKICB0ZXN0LnNraXBJZihwcm9jZXNzLmVudi5WRVJJRllfRU5WX1BST0RVQ1RJT04gIT09ICJ0cnVlIikoCiAgICBgcHJvZHVjdGlvbiBlbnYgc2hvdWxkIGNvbnRhaW4gJHtlbnZWYXJ9YCwKICAgICgpID0+IHsKICAgICAgY29uc3QgZW52ID0gbG9hZEVudkNvbmZpZyhwcm9jZXNzLmN3ZCgpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGVudi5jb21iaW5lZEVudltlbnZWYXJdLAogICAgICAgIGAke2VudlZhcn0gc2hvdWxkIGJlIGRlZmluZWRgLAogICAgICApLnRvQmVEZWZpbmVkKCk7CiAgICAgIGV4cGVjdCgKICAgICAgICBlbnYuY29tYmluZWRFbnZbZW52VmFyXSwKICAgICAgICBgJHtlbnZWYXJ9IHNob3VsZCBub3QgY29udGFpbiBwbGFjZWhvbGRlciB2YWx1ZWAsCiAgICAgICkubm90LnRvTWF0Y2goLzwuKj4vKTsKICAgIH0sCiAgKTsKfQo=\"\n}], [\"src/lib/client.ts.hbs\", {\n type: \"raw\",\n body: `import type { Client } from \"@osdk/client\";\nimport type { PublicOauthClient } from \"@osdk/oauth\";\nimport { createClient } from \"@osdk/client\";\nimport { \\$ontologyRid } from \"{{osdkPackage}}\";\nimport { createPublicOauthClient } from \"@osdk/oauth\";\n\nconst url = process.env.NEXT_PUBLIC_FOUNDRY_API_URL;\nconst clientId = process.env.NEXT_PUBLIC_FOUNDRY_CLIENT_ID;\nconst redirectUrl = process.env.NEXT_PUBLIC_FOUNDRY_REDIRECT_URL;\ncheckEnv(url, \"NEXT_PUBLIC_FOUNDRY_API_URL\");\ncheckEnv(clientId, \"NEXT_PUBLIC_FOUNDRY_CLIENT_ID\");\ncheckEnv(redirectUrl, \"NEXT_PUBLIC_FOUNDRY_REDIRECT_URL\");\n{{#if scopes}}\nconst scopes = [\n {{#each scopes}}\n \"{{this}}\",\n {{/each}}\n];\n{{/if}}\n\nfunction checkEnv(\n value: string | undefined,\n name: string,\n): asserts value is string {\n if (value == null) {\n throw new Error(\\`Missing environment variable: \\${name}\\`);\n }\n}\n\n// Lazily configure the auth and client to prevent them from being used in pre-rendering\nlet auth: PublicOauthClient | null = null;\nlet client: Client | null = null;\n\nexport const getAuth = () => {\n if (auth == null) {\n auth = createPublicOauthClient(\n clientId,\n url,\n redirectUrl,\n {{#if scopes}}\n true,\n undefined,\n window.location.toString(),\n scopes,\n {{/if}}\n );\n }\n return auth;\n}\n\nexport const getClient = () => {\n if (client == null) {\n client = createClient(\n url,\n \\$ontologyRid,\n getAuth(),\n );\n }\n return client;\n}\n`\n}], [\"src/lib/useAuthenticated.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAibmV4dC9uYXZpZ2F0aW9uIjsKaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gInJlYWN0IjsKaW1wb3J0IHsgZ2V0QXV0aCB9IGZyb20gIi4vY2xpZW50IjsKCmZ1bmN0aW9uIHVzZUF1dGhlbnRpY2F0ZWQoKSB7CiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7CiAgY29uc3QgW3Rva2VuLCBzZXRUb2tlbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7CiAgdXNlRWZmZWN0KCgpID0+IHsKICAgIHNldFRva2VuKGdldEF1dGgoKS5nZXRUb2tlbk9yVW5kZWZpbmVkKCkpOwogIH0sIFtdKTsKICB1c2VFZmZlY3QoKCkgPT4gewogICAgY29uc3QgYXV0aCA9IGdldEF1dGgoKTsKICAgIGlmIChhdXRoLmdldFRva2VuT3JVbmRlZmluZWQoKSA9PSBudWxsKSB7CiAgICAgIGF1dGgKICAgICAgICAucmVmcmVzaCgpCiAgICAgICAgLnRoZW4oKCkgPT4gewogICAgICAgICAgc2V0VG9rZW4oYXV0aC5nZXRUb2tlbk9yVW5kZWZpbmVkKCkpOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKCgpID0+IHsKICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCByZWZyZXNoIHRoZSB0b2tlbiAoaS5lLiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluKSB3ZSByZWRpcmVjdCB0byB0aGUgbG9naW4gcGFnZQogICAgICAgICAgcm91dGVyLnB1c2goIi9sb2dpbiIpOwogICAgICAgIH0pOwogICAgfQogIH0sIFtyb3V0ZXJdKTsKCiAgcmV0dXJuIHRva2VuICE9IG51bGw7Cn0KCmV4cG9ydCBkZWZhdWx0IHVzZUF1dGhlbnRpY2F0ZWQ7Cg==\"\n}], [\"tsconfig.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAibGliIjogWyJkb20iLCAiZG9tLml0ZXJhYmxlIiwgImVzbmV4dCJdLAogICAgImFsbG93SnMiOiB0cnVlLAogICAgInNraXBMaWJDaGVjayI6IHRydWUsCiAgICAic3RyaWN0IjogdHJ1ZSwKICAgICJub0VtaXQiOiB0cnVlLAogICAgImVzTW9kdWxlSW50ZXJvcCI6IHRydWUsCiAgICAibW9kdWxlIjogImVzbmV4dCIsCiAgICAibW9kdWxlUmVzb2x1dGlvbiI6ICJidW5kbGVyIiwKICAgICJyZXNvbHZlSnNvbk1vZHVsZSI6IHRydWUsCiAgICAiaXNvbGF0ZWRNb2R1bGVzIjogdHJ1ZSwKICAgICJqc3giOiAicHJlc2VydmUiLAogICAgImluY3JlbWVudGFsIjogdHJ1ZSwKICAgICJwbHVnaW5zIjogWwogICAgICB7CiAgICAgICAgIm5hbWUiOiAibmV4dCIKICAgICAgfQogICAgXSwKICAgICJwYXRocyI6IHsKICAgICAgIkAvKiI6IFsiLi9zcmMvKiJdCiAgICB9CiAgfSwKICAiaW5jbHVkZSI6IFsibmV4dC1lbnYuZC50cyIsICIqKi8qLnRzIiwgIioqLyoudHN4IiwgIi5uZXh0L3R5cGVzLyoqLyoudHMiXSwKICAiZXhjbHVkZSI6IFsibm9kZV9tb2R1bGVzIl0KfQo=\"\n}]]);"]}
@@ -122,8 +122,8 @@ dist-ssr
122
122
  "globals": "^15.11.0",
123
123
  "typescript": "~5.5.4",
124
124
  "typescript-eslint": "^8.15.0",
125
- "vite": "^5.4.8",
126
- "vitest": "^2.1.2"
125
+ "vite": "^6.0.11",
126
+ "vitest": "^3.0.4"
127
127
  }
128
128
  }`
129
129
  }], ["public/todo-app.svg", {
@@ -899,5 +899,5 @@ export default defineConfig({
899
899
  }]]);
900
900
 
901
901
  export { files };
902
- //# sourceMappingURL=esm-J5VI72R3.js.map
903
- //# sourceMappingURL=esm-J5VI72R3.js.map
902
+ //# sourceMappingURL=esm-7ZIUG4U6.js.map
903
+ //# sourceMappingURL=esm-7ZIUG4U6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../create-app.template.tutorial-todo-app/build/esm/generatedNoCheck/index.js"],"names":[],"mappings":"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","file":"esm-7ZIUG4U6.js","sourcesContent":["export const files = new Map([[\"README.md.hbs\", {\n type: \"raw\",\n body: `# {{project}}\n\nThis project was generated with [\\`@osdk/create-app\\`](https://www.npmjs.com/package/@osdk/create-app) and is intended to be used alongside the Developer Console tutorial for creating a To Do App against a reference Ontology.\n\n## Developing\n\nRun the following command or equivalent with your preferred package manager to start a local development server on \\`http://localhost:8080\\`:\n\n\\`\\`\\`sh\nnpm run dev\n\\`\\`\\`\n\nDevelopment configuration is stored in \\`.env.development\\`.\n\n{{#if corsProxy}}\nIn order to make API requests to Foundry, a CORS proxy has been set up for local development which may be removed if the stack is configured to allow \\`http://localhost:8080\\` to load resources. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{else}}\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow \\`http://localhost:8080\\` to load resources. If this has not been configured and you are unable to request this, you can alternatively generate your project again with \\`--corsProxy true\\` to use a proxy for API requests during local development. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{/if}}\n\n## Deploying\n\nRun the following command or equivalent with your preferred package manager to create a production build of your application:\n\n\\`\\`\\`sh\nnpm run build\n\\`\\`\\`\n\nProduction configuration is stored in \\`.env.production\\`.\n\nIf you did not fill in the URL your production application will be hosted on you will need to fill in the \\`VITE_FOUNDRY_REDIRECT_URL\\` in \\`.env.production\\`. A default test is included in \\`env.test.ts\\` to verify your production environment variables which you can enable by removing the skip condition or running tests with the environment variable set \\`VERIFY_ENV_PRODUCTION=true\\`.\n\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow the production origin to load resources. This will be automatically done for you if you are using Foundry website hosting. The configured OAuth client must also allow the production origin auth callback as a redirect URL.\n\nA \\`foundry.config.json\\` file is included in the root of this project to make deploying to Foundry website hosting with [\\`@osdk/cli\\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.\n`\n}], [\".gitignore\", {\n type: \"raw\",\n body: `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n`\n}], [\"eslint.config.mjs\", {\n \"type\": \"base64\",\n \"body\": \"Ly8gQHRzLWNoZWNrCmltcG9ydCBlc2xpbnQgZnJvbSAiQGVzbGludC9qcyI7CmltcG9ydCB0c1BhcnNlciBmcm9tICJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyIjsKaW1wb3J0ICogYXMgaW1wb3J0UGx1Z2luIGZyb20gImVzbGludC1wbHVnaW4taW1wb3J0IjsKaW1wb3J0IGpzeEExMXlQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1qc3gtYTExeSI7CmltcG9ydCByZWFjdFBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXJlYWN0IjsKaW1wb3J0IHJlYWN0SG9va3NQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI7CmltcG9ydCByZWFjdFJlZnJlc2ggZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1yZWZyZXNoIjsKaW1wb3J0IGdsb2JhbHMgZnJvbSAiZ2xvYmFscyI7CmltcG9ydCB0c2VzbGludCBmcm9tICJ0eXBlc2NyaXB0LWVzbGludCI7CgpleHBvcnQgZGVmYXVsdCB0c2VzbGludC5jb25maWcoewogIGZpbGVzOiBbImVzbGludC5jb25maWcubWpzIiwgInNyYy8qKi8qLntqcyxtanMsY2pzLHRzLGpzeCx0c3h9Il0sCiAgc2V0dGluZ3M6IHsKICAgIHJlYWN0OiB7CiAgICAgIHZlcnNpb246ICJkZXRlY3QiLAogICAgfSwKCiAgICAiaW1wb3J0L3Jlc29sdmVyIjogewogICAgICBub2RlOiB7CiAgICAgICAgZXh0ZW5zaW9uczogWyIuanMiLCAiLmpzeCIsICIudHMiLCAiLnRzeCJdLAogICAgICB9LAogICAgfSwKICB9LAogIGxhbmd1YWdlT3B0aW9uczogewogICAgZ2xvYmFsczogewogICAgICAuLi5nbG9iYWxzLmJyb3dzZXIsCiAgICB9LAoKICAgIHBhcnNlcjogdHNQYXJzZXIsCiAgfSwKICBleHRlbmRzOiBbCiAgICBlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCwKICAgIC4uLnRzZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWQsCiAgXSwKICBwbHVnaW5zOiB7CiAgICAicmVhY3QiOiAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5FU0xpbnQuUGx1Z2luICovIChyZWFjdFBsdWdpbiksCiAgICAicmVhY3QtcmVmcmVzaCI6IHJlYWN0UmVmcmVzaCwKICAgICJyZWFjdC1ob29rcyI6CiAgICAgIC8qKiBAdHlwZSBpbXBvcnQoImVzbGludCIpLkVTTGludC5QbHVnaW4gKi8gKHJlYWN0SG9va3NQbHVnaW4pLAogICAgImpzeC1hMTF5IjoganN4QTExeVBsdWdpbiwKICAgICJpbXBvcnQiOiBpbXBvcnRQbHVnaW4sCiAgfSwKICBydWxlczogewogICAgLi4uKAogICAgICAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5MaW50ZXIuUnVsZXNSZWNvcmQgKi8KICAgICAgKHJlYWN0UGx1Z2luLmNvbmZpZ3MuZmxhdD8ucmVjb21tZW5kZWQucnVsZXMpCiAgICApLAogICAgInJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIjogImVycm9yIiwKICAgICJyZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMiOiAid2FybiIsCiAgICAuLi5qc3hBMTF5UGx1Z2luLmNvbmZpZ3MucmVjb21tZW5kZWQucnVsZXMsCiAgICAicmVhY3QtcmVmcmVzaC9vbmx5LWV4cG9ydC1jb21wb25lbnRzIjogWyJ3YXJuIiwgewogICAgICBhbGxvd0NvbnN0YW50RXhwb3J0OiB0cnVlLAogICAgfV0sCgogICAgImltcG9ydC9uYW1lZCI6ICJlcnJvciIsCiAgICAiaW1wb3J0L2RlZmF1bHQiOiAiZXJyb3IiLAogICAgImltcG9ydC9uYW1lc3BhY2UiOiAiZXJyb3IiLAogICAgImltcG9ydC9uby1kdXBsaWNhdGVzIjogImVycm9yIiwKICAgICJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMiOiAiZXJyb3IiLAoKICAgICJyZWFjdC9yZWFjdC1pbi1qc3gtc2NvcGUiOiAib2ZmIiwKICB9LAp9KTsK\"\n}], [\"index.html\", {\n type: \"raw\",\n body: `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/todo-app.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Ontology SDK Tutorial - Todo App</title>\n </head>\n <body>\n <div id=\"root-container\">\n <div id=\"root\"></div>\n </div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`\n}], [\"package.json.hbs\", {\n type: \"raw\",\n body: `{\n \"name\": \"{{project}}\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\",\n \"build\": \"tsc && vite build\",\n \"lint\": \"eslint . --report-unused-disable-directives --max-warnings 0\",\n \"test\": \"vitest run\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"{{osdkPackage}}\": \"latest\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\",\n \"react-router-dom\": \"^6.23.1\",\n \"swr\": \"^2.2.5\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.13.0\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"@typescript-eslint/eslint-plugin\": \"^8.15.0\",\n \"@typescript-eslint/parser\": \"^8.15.0\",\n \"@vitejs/plugin-react\": \"^4.2.0\",\n \"eslint\": \"^9.15.0\",\n \"eslint-plugin-import\": \"^2.31.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.1\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.14\",\n \"globals\": \"^15.11.0\",\n \"typescript\": \"~5.5.4\",\n \"typescript-eslint\": \"^8.15.0\",\n \"vite\": \"^6.0.11\",\n \"vitest\": \"^3.0.4\"\n }\n}`\n}], [\"public/todo-app.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMTYiIGZpbGw9IiNGQkIzNjAiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yOCA4MlY5NEg0MFY4MkgyOFpNMjIgNzBINDZDNDkuMyA3MCA1MiA3Mi43IDUyIDc2VjEwMEM1MiAxMDMuMyA0OS4zIDEwNiA0NiAxMDZIMjJDMTguNyAxMDYgMTYgMTAzLjMgMTYgMTAwVjc2QzE2IDcyLjcgMTguNyA3MCAyMiA3MFpNNzYgMzRIMTA2QzEwOS4zIDM0IDExMiAzNi43IDExMiA0MEMxMTIgNDMuMyAxMDkuMyA0NiAxMDYgNDZINzZDNzIuNyA0NiA3MCA0My4zIDcwIDQwQzcwIDM2LjcgNzIuNyAzNCA3NiAzNFpNNTIgMjJDNTUuMyAyMiA1OCAyNC43IDU4IDI4QzU4IDI5LjY4IDU3LjM0IDMxLjE4IDU2LjI2IDMyLjI2TDM4LjI2IDU2LjI2QzM3LjE4IDU3LjM0IDM1LjY4IDU4IDM0IDU4QzMyLjMyIDU4IDMwLjgyIDU3LjM0IDI5Ljc0IDU2LjI2TDE3Ljc0IDQ0LjI2QzE2LjY2IDQzLjE4IDE2IDQxLjY4IDE2IDQwQzE2IDM2LjcgMTguNyAzNCAyMiAzNEMyMy42OCAzNCAyNS4xOCAzNC42NiAyNi4yNiAzNS43NEwzNCA0My41NEw0Ny43NCAyMy43NEM0OC44MiAyMi42NiA1MC4zMiAyMiA1MiAyMlpNNzYgODJIMTA2QzEwOS4zIDgyIDExMiA4NC43IDExMiA4OEMxMTIgOTEuMyAxMDkuMyA5NCAxMDYgOTRINzZDNzIuNyA5NCA3MCA5MS4zIDcwIDg4QzcwIDg0LjcgNzIuNyA4MiA3NiA4MloiIGZpbGw9IiM3NzQ1MEQiLz4KPC9zdmc+Cg==\"\n}], [\"src/AuthCallback.tsx\", {\n type: \"raw\",\n body: `import { useEffect, useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport client from \"./client\";\n\n/**\n * Component to render at \\`/auth/callback\\`\n * This calls signIn() again to save the token, and then navigates the user back to the home page.\n */\nfunction AuthCallback() {\n const [error, setError] = useState<string | undefined>(undefined);\n const navigate = useNavigate();\n\n // This effect conflicts with React 18 strict mode in development\n // https://react.dev/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development\n useEffect(() => {\n client.auth\n .signIn()\n .then(() => navigate(\"/\", { replace: true }))\n .catch((e: unknown) => setError((e as Error).message ?? e));\n }, [navigate]);\n return <div>{error != null ? error : \"Authenticating…\"}</div>;\n}\n\nexport default AuthCallback;\n`\n}], [\"src/AuthenticatedRoute.tsx\", {\n type: \"raw\",\n body: `import { useEffect, useState } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport client from \"./client\";\n\n/**\n * A component that can be used to wrap routes that require authentication.\n * Nested routes may assume that a valid token is present.\n */\nfunction AuthenticatedRoute() {\n const navigate = useNavigate();\n const [token, setToken] = useState(client.auth.token);\n useEffect(() => {\n if (client.auth.token == null || client.auth.token.isExpired) {\n client.auth\n .refresh()\n .then(() => {\n setToken(client.auth.token);\n })\n .catch(() => {\n // If we cannot refresh the token (i.e. the user is not logged in) we redirect to the login page\n navigate(\"/login\");\n });\n }\n }, [navigate]);\n\n if (token == null || token.isExpired) {\n return null;\n }\n\n return <Outlet />;\n}\n\nexport default AuthenticatedRoute;\n`\n}], [\"src/CreateProjectButton.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport CreateProjectDialog from \"./CreateProjectDialog\";\nimport useProjects from \"./useProjects\";\n\ninterface CreateProjectButtonProps {\n onProjectCreated?: (projectId: string) => void;\n}\n\nfunction CreateProjectButton({ onProjectCreated }: CreateProjectButtonProps) {\n const { isLoading: isLoadingProjects, isError: isErrorProjects } =\n useProjects();\n\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = useCallback(() => setIsOpen(true), []);\n const handleClose = useCallback(() => setIsOpen(false), []);\n\n if (isLoadingProjects || isErrorProjects) {\n return null;\n }\n\n return (\n <>\n <button onClick={handleOpen}>Create Project</button>\n <CreateProjectDialog\n isOpen={isOpen}\n onClose={handleClose}\n onProjectCreated={onProjectCreated}\n />\n </>\n );\n}\n\nexport default CreateProjectButton;\n`\n}], [\"src/CreateProjectDialog.tsx\", {\n type: \"raw\",\n body: `import { ChangeEvent, useCallback, useEffect, useState } from \"react\";\nimport Dialog from \"./Dialog\";\nimport useProjects from \"./useProjects\";\n\ninterface CreateProjectDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onProjectCreated?: (projectId: string) => void;\n}\n\nfunction CreateProjectDialog({\n isOpen,\n onClose,\n onProjectCreated,\n}: CreateProjectDialogProps) {\n const { createProject } = useProjects();\n\n const [name, setName] = useState<string>(\"New project\");\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setName(e.target.value),\n [],\n );\n\n useEffect(() => setName(\"New project\"), [isOpen]);\n\n const [isCreating, setIsCreating] = useState(false);\n const handleSubmit = useCallback(async () => {\n setIsCreating(true);\n try {\n const projectId = await createProject(name);\n onProjectCreated?.(projectId);\n } finally {\n setIsCreating(false);\n onClose();\n }\n }, [onProjectCreated, onClose, createProject, name]);\n\n return (\n <Dialog\n isOpen={isOpen}\n buttons={[\n <button disabled={isCreating} onClick={onClose} key=\"cancel\">\n Cancel\n </button>,\n <button disabled={isCreating} onClick={handleSubmit} key=\"create\">\n Create project\n </button>,\n ]}\n >\n <label>\n Project name: <input type=\"text\" value={name} onChange={handleChange} />\n </label>\n </Dialog>\n );\n}\nexport default CreateProjectDialog;\n`\n}], [\"src/CreateTaskButton.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport CreateTaskDialog from \"./CreateTaskDialog\";\nimport { MockProject } from \"./mocks\";\nimport { useProjectTasks } from \"./useProjectTasks\";\n\ninterface CreateTaskButtonProps {\n project: MockProject;\n}\n\nfunction CreateTaskButton({ project }: CreateTaskButtonProps) {\n const { isLoading: isLoadingTasks, isError: isErrorTasks } = useProjectTasks(\n project,\n );\n\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = useCallback(() => setIsOpen(true), []);\n const handleClose = useCallback(() => setIsOpen(false), []);\n\n if (isLoadingTasks || isErrorTasks) {\n return null;\n }\n\n return (\n <>\n <button onClick={handleOpen}>Create Task</button>\n <CreateTaskDialog\n project={project}\n isOpen={isOpen}\n onClose={handleClose}\n />\n </>\n );\n}\n\nexport default CreateTaskButton;\n`\n}], [\"src/CreateTaskDialog.tsx\", {\n type: \"raw\",\n body: `import { ChangeEvent, useCallback, useEffect, useState } from \"react\";\nimport Dialog from \"./Dialog\";\nimport { MockProject } from \"./mocks\";\nimport { useProjectTasks } from \"./useProjectTasks\";\n\ninterface CreateTaskDialogProps {\n project: MockProject;\n isOpen: boolean;\n onClose: () => void;\n}\n\nfunction CreateTaskDialog({ project, isOpen, onClose }: CreateTaskDialogProps) {\n const { createTask } = useProjectTasks(project);\n\n const [name, setName] = useState<string>(\"New task\");\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => setName(e.target.value),\n [],\n );\n\n useEffect(() => setName(\"New task\"), [isOpen]);\n\n const [isCreating, setIsCreating] = useState(false);\n const handleSubmit = useCallback(async () => {\n setIsCreating(true);\n try {\n await createTask(name);\n } finally {\n setIsCreating(false);\n onClose();\n }\n }, [onClose, createTask, name]);\n\n return (\n <Dialog\n isOpen={isOpen}\n buttons={[\n <button disabled={isCreating} onClick={onClose} key=\"cancel\">\n Cancel\n </button>,\n <button disabled={isCreating} onClick={handleSubmit} key=\"create\">\n Create task\n </button>,\n ]}\n >\n <label>\n Task name: <input type=\"text\" value={name} onChange={handleChange} />\n </label>\n </Dialog>\n );\n}\nexport default CreateTaskDialog;\n`\n}], [\"src/DeleteProjectButton.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport DeleteProjectDialog from \"./DeleteProjectDialog\";\nimport { MockProject } from \"./mocks\";\nimport useProjects from \"./useProjects\";\n\ninterface DeleteProjectButtonProps {\n project: MockProject;\n}\n\nfunction DeleteProjectButton({ project }: DeleteProjectButtonProps) {\n const { isLoading: isLoadingProjects, isError: isErrorProjects } =\n useProjects();\n\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = useCallback(() => setIsOpen(true), []);\n const handleClose = useCallback(() => setIsOpen(false), []);\n\n if (isLoadingProjects || isErrorProjects) {\n return null;\n }\n\n return (\n <>\n <button onClick={handleOpen}>Delete Project</button>\n <DeleteProjectDialog\n project={project}\n isOpen={isOpen}\n onClose={handleClose}\n />\n </>\n );\n}\n\nexport default DeleteProjectButton;\n`\n}], [\"src/DeleteProjectDialog.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport Dialog from \"./Dialog\";\nimport { MockProject } from \"./mocks\";\nimport useProjects from \"./useProjects\";\n\ninterface DeleteProjectDialogProps {\n project: MockProject;\n isOpen: boolean;\n onClose: () => void;\n}\n\nfunction DeleteProjectDialog({\n project,\n isOpen,\n onClose,\n}: DeleteProjectDialogProps) {\n const { deleteProject } = useProjects();\n\n const [isDeleting, setIsDeleting] = useState(false);\n const handleSubmit = useCallback(async () => {\n setIsDeleting(true);\n try {\n await deleteProject(project);\n } finally {\n setIsDeleting(false);\n onClose();\n }\n }, [deleteProject, onClose, project]);\n\n return (\n <Dialog\n isOpen={isOpen}\n buttons={[\n <button disabled={isDeleting} onClick={onClose} key=\"cancel\">\n Cancel\n </button>,\n <button disabled={isDeleting} onClick={handleSubmit} key=\"delete\">\n Delete\n </button>,\n ]}\n >\n Are you sure you want to delete this project?\n </Dialog>\n );\n}\nexport default DeleteProjectDialog;\n`\n}], [\"src/Dialog.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmJ1dHRvbnMgewogIGRpc3BsYXk6IGZsZXg7CiAgZ2FwOiAxZW07CiAgbWFyZ2luLXRvcDogMWVtOwp9CgouZGlhbG9nIHsKICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKICBib3JkZXItcmFkaXVzOiAxMHB4Owp9\"\n}], [\"src/Dialog.tsx\", {\n type: \"raw\",\n body: `import { PropsWithChildren } from \"react\";\nimport css from \"./Dialog.module.css\";\n\ninterface DialogProps {\n isOpen: boolean;\n buttons?: React.ReactElement[];\n}\n\nfunction Dialog({ children, isOpen, buttons }: PropsWithChildren<DialogProps>) {\n return (\n <dialog open={isOpen} className={css.dialog}>\n {children}\n {buttons != null && buttons.length > 0 && (\n <div className={css.buttons}>{buttons}</div>\n )}\n </dialog>\n );\n}\nexport default Dialog;\n`\n}], [\"src/Home.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LnR1dG9yaWFsQmFubmVyV3JhcHBlciB7CiAgZGlzcGxheTogZmxleDsKICBtYXJnaW46IDJlbTsKfQoKLnR1dG9yaWFsQmFubmVyIHsKICBmbGV4OiAxOwogIHdpZHRoOiAwOwogIGJhY2tncm91bmQ6IGhzbCgzNSwgMTAwJSwgNzAlKTsKICBib3JkZXItcmFkaXVzOiAxZW07CiAgcGFkZGluZzogMWVtOwogIGJveC1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKSwgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gMC4xKTsKfQoKLnR1dG9yaWFsQmFubmVyVGl0bGUgewogIG1hcmdpbi10b3A6IDA7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLnByb2plY3RTZWxlY3QgewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBnYXA6IDFlbTsKICBtYXJnaW46IDJlbTsKICBmb250LXdlaWdodDogNjAwOwp9CgoucHJvamVjdENhcmQgewogIG1hcmdpbjogMmVtOwp9CgoucHJvamVjdFRpdGxlIHsKICBmb250LXNpemU6IDEuNWVtOwp9Cg==\"\n}], [\"src/Home.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useEffect, useState } from \"react\";\nimport CreateProjectButton from \"./CreateProjectButton\";\nimport CreateTaskButton from \"./CreateTaskButton\";\nimport DeleteProjectButton from \"./DeleteProjectButton\";\nimport css from \"./Home.module.css\";\nimport Layout from \"./Layout\";\nimport { MockProject } from \"./mocks\";\nimport ProjectSelect from \"./ProjectSelect\";\nimport TaskList from \"./TaskList\";\nimport useProjects from \"./useProjects\";\n\nfunction Home() {\n const [projectId, setProjectId] = useState<string | undefined>(undefined);\n const { projects } = useProjects();\n const project = projects?.find((p) => p.id === projectId);\n\n const handleSelectProject = useCallback(\n (p: MockProject) => setProjectId(p.id),\n [],\n );\n\n useEffect(() => {\n if (project == null && projects != null && projects.length > 0) {\n setProjectId(projects[0].id);\n }\n }, [project, projects]);\n\n return (\n <Layout>\n <div className={css.tutorialBannerWrapper}>\n <div className={css.tutorialBanner}>\n <p className={css.tutorialBannerTitle}>\n 💡 Welcome to To Do app tutorial!\n </p>\n <p>\n The To Do App is implemented with mock in-memory data.\n <br />Can you solve how to switch it to use the Ontology SDK\n instead?\n </p>\n </div>\n </div>\n <div className={css.projectSelect}>\n <span>Project:</span>\n <ProjectSelect\n project={project}\n projects={projects ?? []}\n onSelectProject={handleSelectProject}\n />\n <CreateProjectButton onProjectCreated={setProjectId} />\n {project != null && <DeleteProjectButton project={project} />}\n </div>\n {project != null && (\n <div className={css.projectCard} key={project.id}>\n <h1 className={css.projectTitle}>{project.name}</h1>\n <TaskList project={project} />\n <CreateTaskButton project={project} />\n </div>\n )}\n </Layout>\n );\n}\n\nexport default Home;\n`\n}], [\"src/Layout.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmhlYWRlciB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIG1hcmdpbjogMmVtOwp9CgoubG9nbyB7CiAgaGVpZ2h0OiA0ZW07CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBtYXJnaW4tcmlnaHQ6IDFlbTsKfQoKLnRpdGxlIHsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtc2l6ZTogMS41ZW07Cn0K\"\n}], [\"src/Layout.tsx\", {\n type: \"raw\",\n body: `import todoAppLogo from \"/todo-app.svg\";\nimport React from \"react\";\nimport css from \"./Layout.module.css\";\n\ninterface LayoutProps {\n children?: React.ReactNode;\n}\n\nfunction Layout({ children }: LayoutProps) {\n return (\n <>\n <div className={css.header}>\n <img src={todoAppLogo} className={css.logo} alt=\"Todo App logo\" />\n <div className={css.title}>Ontology SDK Tutorial - Todo App</div>\n </div>\n {children}\n </>\n );\n}\n\nexport default Layout;\n`\n}], [\"src/Login.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmxvZ2luQnV0dG9uIHsKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIG1hcmdpbjogMmVtOwp9Cg==\"\n}], [\"src/Login.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport { Navigate } from \"react-router-dom\";\nimport client from \"./client\";\nimport Layout from \"./Layout\";\nimport css from \"./Login.module.css\";\n\nfunction Login() {\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const token = client.auth.token;\n\n const handleLogin = useCallback(async () => {\n setIsLoggingIn(true);\n try {\n // Initiate the OAuth flow, which will redirect the user to log into Foundry\n // Once the login has completed, the user will be redirected back to the route defined via the\n // FOUNDRY_REDIRECT_URL variable in .env.development\n await client.auth.signIn();\n } catch (e: unknown) {\n console.error(e);\n setError((e as Error).message ?? e);\n } finally {\n setIsLoggingIn(false);\n }\n }, []);\n\n // If the token exists but a user tries to load /login, redirect to the home page instead\n if (token != null) {\n return <Navigate to=\"/\" replace={true} />;\n }\n\n return (\n <Layout>\n <div className={css.loginButton}>\n <button onClick={handleLogin}>\n {isLoggingIn ? \"Logging in…\" : \"Log in \"}\n </button>\n </div>\n {error && <div>Unable to log in: {error}</div>}\n </Layout>\n );\n}\n\nexport default Login;\n`\n}], [\"src/ProjectSelect.tsx\", {\n type: \"raw\",\n body: `import { ChangeEvent, useCallback } from \"react\";\nimport { MockProject } from \"./mocks\";\n\ninterface ProjectSelectProps {\n project: MockProject | undefined;\n projects: MockProject[];\n onSelectProject: (project: MockProject) => void;\n}\n\nfunction ProjectSelect({\n project,\n projects,\n onSelectProject,\n}: ProjectSelectProps) {\n const handleSelect = useCallback(\n (e: ChangeEvent<HTMLSelectElement>) => {\n const nextProject = projects.find((p) => \\`\\${p.id}\\` === e.target.value);\n if (nextProject != null) {\n onSelectProject(nextProject);\n }\n },\n [projects, onSelectProject],\n );\n\n return (\n <select value={project?.id} onChange={handleSelect}>\n <option hidden disabled value=\"\">\n -- select a project --\n </option>\n\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nexport default ProjectSelect;\n`\n}], [\"src/TaskList.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LnRhc2tMaXN0IHsKICBsaXN0LXN0eWxlOiBub25lOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLXRvcDogMWVtOwogIG1hcmdpbi1ib3R0b206IDFlbTsKfQo=\"\n}], [\"src/TaskList.tsx\", {\n type: \"raw\",\n body: `import { MockProject } from \"./mocks\";\nimport css from \"./TaskList.module.css\";\nimport TaskListItem from \"./TaskListItem\";\nimport { useProjectTasks } from \"./useProjectTasks\";\n\ninterface TaskListProps {\n project: MockProject;\n}\n\nfunction TaskList({ project }: TaskListProps) {\n const {\n tasks,\n isLoading: isLoadingTasks,\n isError: isErrorTasks,\n deleteTask,\n } = useProjectTasks(project);\n\n if (isErrorTasks) {\n return <div className={css.taskList}>Error loading tasks!</div>;\n } else if (isLoadingTasks) {\n return null;\n }\n\n const data = tasks ?? [];\n if (data.length === 0) {\n return <div className={css.taskList}>No tasks found</div>;\n }\n\n return (\n <ul className={css.taskList}>\n {data.map((task) => (\n <TaskListItem key={task.id} task={task} deleteTask={deleteTask} />\n ))}\n </ul>\n );\n}\n\nexport default TaskList;\n`\n}], [\"src/TaskListItem.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmxhYmVsIHsKICBtYXJnaW4tbGVmdDogMC41ZW07Cn0KCi5jaGVja2VkIHsKICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKfQoKLmRlbGV0ZSB7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICBwYWRkaW5nOiAycHg7Cn0KCg==\"\n}], [\"src/TaskListItem.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport { MockTask } from \"./mocks\";\nimport css from \"./TaskListItem.module.css\";\n\ninterface TaskListItemProps {\n task: MockTask;\n deleteTask: (task: MockTask) => Promise<void>;\n}\n\nfunction TaskListItem({ task, deleteTask }: TaskListItemProps) {\n const [isDeleting, setIsDeleting] = useState(false);\n const handleClick = useCallback(async () => {\n setIsDeleting(true);\n try {\n await deleteTask(task);\n } finally {\n setIsDeleting(false);\n }\n }, [deleteTask, task]);\n\n return (\n <li>\n <label\n className={\\`\\${css.label} \\${isDeleting ? css.checked : \"\"}\\`}\n htmlFor={\\`\\${task.id}\\`}\n >\n <input\n type=\"checkbox\"\n onChange={handleClick}\n checked={isDeleting}\n className={css.delete}\n title=\"Delete task\"\n />\n {task.title}\n </label>\n </li>\n );\n}\n\nexport default TaskListItem;\n`\n}], [\"src/client.ts.hbs\", {\n type: \"raw\",\n body: `import { FoundryClient, PublicClientAuth } from \"{{osdkPackage}}\";\n\nconst url = import.meta.env.VITE_FOUNDRY_API_URL;\nconst clientId = import.meta.env.VITE_FOUNDRY_CLIENT_ID;\nconst redirectUrl = import.meta.env.VITE_FOUNDRY_REDIRECT_URL;\ncheckEnv(url, \"VITE_FOUNDRY_API_URL\");\ncheckEnv(clientId, \"VITE_FOUNDRY_CLIENT_ID\");\ncheckEnv(redirectUrl, \"VITE_FOUNDRY_REDIRECT_URL\");\n\nfunction checkEnv(\n value: string | undefined,\n name: string,\n): asserts value is string {\n if (value == null) {\n throw new Error(\\`Missing environment variable: \\${name}\\`);\n }\n}\n\n/**\n * Initialize the client to interact with the Ontology SDK\n */\nconst client = new FoundryClient({\n url,\n auth: new PublicClientAuth({\n clientId,\n url,\n redirectUrl,\n {{#if scopes}}\n scopes: [\n {{#each scopes}}\n \"{{this}}\",\n {{/each}}\n ],\n {{/if}}\n }),\n});\n\nexport default client;\n`\n}], [\"src/env.test.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgbG9hZEVudiB9IGZyb20gInZpdGUiOwppbXBvcnQgeyBleHBlY3QsIHRlc3QgfSBmcm9tICJ2aXRlc3QiOwoKY29uc3QgRU5WX1ZBUlMgPSBbCiAgIlZJVEVfRk9VTkRSWV9BUElfVVJMIiwKICAiVklURV9GT1VORFJZX0NMSUVOVF9JRCIsCiAgIlZJVEVfRk9VTkRSWV9SRURJUkVDVF9VUkwiLApdOwoKZm9yIChjb25zdCBlbnZWYXIgb2YgRU5WX1ZBUlMpIHsKICB0ZXN0LnNraXBJZihwcm9jZXNzLmVudi5WRVJJRllfRU5WX1BST0RVQ1RJT04gIT09ICJ0cnVlIikoCiAgICBgcHJvZHVjdGlvbiBlbnYgc2hvdWxkIGNvbnRhaW4gJHtlbnZWYXJ9YCwKICAgICgpID0+IHsKICAgICAgY29uc3QgZW52ID0gbG9hZEVudigicHJvZHVjdGlvbiIsIHByb2Nlc3MuY3dkKCkpOwogICAgICBleHBlY3QoZW52W2VudlZhcl0sIGAke2VudlZhcn0gc2hvdWxkIGJlIGRlZmluZWRgKS50b0JlRGVmaW5lZCgpOwogICAgICBleHBlY3QoCiAgICAgICAgZW52W2VudlZhcl0sCiAgICAgICAgYCR7ZW52VmFyfSBzaG91bGQgbm90IGNvbnRhaW4gcGxhY2Vob2xkZXIgdmFsdWVgLAogICAgICApLm5vdC50b01hdGNoKC88Lio+Lyk7CiAgICB9LAogICk7Cn0K\"\n}], [\"src/index.css\", {\n \"type\": \"base64\",\n \"body\": \"OnJvb3QgewogIGZvbnQtZmFtaWx5OiBJbnRlciwgc3lzdGVtLXVpLCBBdmVuaXIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBmb250LXdlaWdodDogNDAwOwoKICBmb250LXN5bnRoZXNpczogbm9uZTsKICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cn0KCiNyb290LWNvbnRhaW5lciB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4OiAxOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCiNyb290IHsKICBtYXgtd2lkdGg6IDEyODBweDsKICBtYXJnaW46IDJyZW0gYXV0bzsKICBwYWRkaW5nOiAycmVtOwp9CgphIHsKICBmb250LXdlaWdodDogNTAwOwogIGNvbG9yOiAjNjQ2Y2ZmOwogIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsKfQphOmhvdmVyIHsKICBjb2xvcjogIzUzNWJmMjsKfQoKYm9keSB7CiAgbWFyZ2luOiAwOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBtaW4td2lkdGg6IDMyMHB4OwogIG1pbi1oZWlnaHQ6IDEwMHZoOwp9CgpoMSB7CiAgZm9udC1zaXplOiAzLjJlbTsKICBsaW5lLWhlaWdodDogMS4xOwp9CgpidXR0b24gewogIGJvcmRlci1yYWRpdXM6IDhweDsKICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICBwYWRkaW5nOiAwLjZlbSAxLjJlbTsKICBmb250LXNpemU6IDFlbTsKICBmb250LXdlaWdodDogNTAwOwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogIGN1cnNvcjogcG9pbnRlcjsKICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yNXM7Cn0KYnV0dG9uOmhvdmVyIHsKICBib3JkZXItY29sb3I6ICM2NDZjZmY7Cn0KYnV0dG9uOmZvY3VzLApidXR0b246Zm9jdXMtdmlzaWJsZSB7CiAgb3V0bGluZTogNHB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOwp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewogIDpyb290IHsKICAgIGNvbG9yOiAjMjEzNTQ3OwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICB9CiAgYTpob3ZlciB7CiAgICBjb2xvcjogIzc0N2JmZjsKICB9CiAgYnV0dG9uIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7CiAgfQp9Cg==\"\n}], [\"src/main.tsx\", {\n type: \"raw\",\n body: `import ReactDOM from \"react-dom/client\";\nimport { createBrowserRouter, RouterProvider } from \"react-router-dom\";\nimport AuthCallback from \"./AuthCallback\";\nimport AuthenticatedRoute from \"./AuthenticatedRoute\";\nimport Home from \"./Home\";\nimport Login from \"./Login\";\nimport \"./index.css\";\n\nconst router = createBrowserRouter(\n [\n {\n path: \"/\",\n element: <AuthenticatedRoute />,\n children: [\n {\n path: \"/\",\n element: <Home />,\n },\n ],\n },\n {\n path: \"/login\",\n element: <Login />,\n },\n {\n // This is the route defined in your application's redirect URL\n path: \"/auth/callback\",\n element: <AuthCallback />,\n },\n ],\n { basename: import.meta.env.BASE_URL },\n);\n\nReactDOM.createRoot(document.getElementById(\"root\")!).render(\n <RouterProvider router={router} />,\n);\n`\n}], [\"src/mocks.ts\", {\n \"type\": \"base64\",\n \"body\": \"ZXhwb3J0IGludGVyZmFjZSBNb2NrUHJvamVjdCB7CiAgJGFwaU5hbWU6IHN0cmluZzsKICAkcHJpbWFyeUtleTogc3RyaW5nOwogIGlkOiBzdHJpbmc7CiAgbmFtZTogc3RyaW5nOwogIHRhc2tzOiBNb2NrVGFza1tdOwp9CgpleHBvcnQgaW50ZXJmYWNlIE1vY2tUYXNrIHsKICAkYXBpTmFtZTogc3RyaW5nOwogICRwcmltYXJ5S2V5OiBzdHJpbmc7CiAgaWQ6IHN0cmluZzsKICB0aXRsZTogc3RyaW5nOwp9Cgpjb25zdCBwcm9qZWN0czogTW9ja1Byb2plY3RbXSA9IFsKICB7CiAgICAkYXBpTmFtZTogIk1vY2tQcm9qZWN0IiwKICAgICRwcmltYXJ5S2V5OiAiMSIsCiAgICBpZDogIjEiLAogICAgbmFtZTogIk1vY2sgcHJvamVjdCIsCiAgICB0YXNrczogWwogICAgICB7CiAgICAgICAgJGFwaU5hbWU6ICJNb2NrVGFzayIsCiAgICAgICAgJHByaW1hcnlLZXk6ICIxIiwKICAgICAgICBpZDogIjEiLAogICAgICAgIHRpdGxlOiAiVHJ5IHRvIiwKICAgICAgfSwKICAgICAgewogICAgICAgICRhcGlOYW1lOiAiTW9ja1Rhc2siLAogICAgICAgICRwcmltYXJ5S2V5OiAiMiIsCiAgICAgICAgaWQ6ICIyIiwKICAgICAgICB0aXRsZTogIkltcGxlbWVudCB0aGlzIiwKICAgICAgfSwKICAgICAgewogICAgICAgICRhcGlOYW1lOiAiTW9ja1Rhc2siLAogICAgICAgICRwcmltYXJ5S2V5OiAiMyIsCiAgICAgICAgaWQ6ICIzIiwKICAgICAgICB0aXRsZTogIldpdGggdGhlIE9udG9sb2d5IFNESyEiLAogICAgICB9LAogICAgXSwKICB9LAogIHsKICAgICRhcGlOYW1lOiAiTW9ja1Byb2plY3QiLAogICAgJHByaW1hcnlLZXk6ICIyIiwKICAgIGlkOiAiMiIsCiAgICBuYW1lOiAiWWV0IGFub3RoZXIgbW9jayBwcm9qZWN0IiwKICAgIHRhc2tzOiBbCiAgICAgIHsKICAgICAgICAkYXBpTmFtZTogIk1vY2tUYXNrIiwKICAgICAgICAkcHJpbWFyeUtleTogIjQiLAogICAgICAgIGlkOiAiNCIsCiAgICAgICAgdGl0bGU6ICJNb3JlIHRhc2tzIGhlcmUiLAogICAgICB9LAogICAgXSwKICB9LApdOwoKYXN5bmMgZnVuY3Rpb24gZGVsYXkoKTogUHJvbWlzZTx2b2lkPiB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDUwMCArIE1hdGgucmFuZG9tKCkgKiAxMDAwKQogICk7Cn0KCi8vIEdvb2QgZW5vdWdoIHJhbmRvbSBpZCBmb3IgbW9ja3MKZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHsKICByZXR1cm4gYCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMiAqKiAzMSl9YDsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UHJvamVjdHMoKTogUHJvbWlzZTxNb2NrUHJvamVjdFtdPiB7CiAgYXdhaXQgZGVsYXkoKTsKICBjb25zdCByZXN1bHQgPSBbLi4ucHJvamVjdHNdOwogIHJlc3VsdC5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWUubG9jYWxlQ29tcGFyZShwMi5uYW1lKSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKYXN5bmMgZnVuY3Rpb24gY3JlYXRlUHJvamVjdCh7CiAgbmFtZSwKfTogewogIG5hbWU6IHN0cmluZzsKfSk6IFByb21pc2U8TW9ja1Byb2plY3RbIiRwcmltYXJ5S2V5Il0+IHsKICBhd2FpdCBkZWxheSgpOwogIGNvbnN0IGlkID0gcmFuZG9tSWQoKTsKICBwcm9qZWN0cy5wdXNoKHsKICAgICRhcGlOYW1lOiAiTW9ja1Byb2plY3QiLAogICAgJHByaW1hcnlLZXk6IGlkLAogICAgaWQsCiAgICBuYW1lLAogICAgdGFza3M6IFtdLAogIH0pOwogIHJldHVybiBpZDsKfQoKYXN5bmMgZnVuY3Rpb24gZGVsZXRlUHJvamVjdChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7CiAgYXdhaXQgZGVsYXkoKTsKICBjb25zdCBpZHggPSBwcm9qZWN0cy5maW5kSW5kZXgoKHApID0+IHAuaWQgPT09IGlkKTsKICBpZiAoaWR4ICE9PSAtMSkgewogICAgcHJvamVjdHMuc3BsaWNlKGlkeCwgMSk7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBjcmVhdGVUYXNrKHsKICB0aXRsZSwKICBwcm9qZWN0SWQsCn06IHsKICB0aXRsZTogc3RyaW5nOwogIHByb2plY3RJZDogc3RyaW5nOwp9KTogUHJvbWlzZTxNb2NrVGFza1siJHByaW1hcnlLZXkiXT4gewogIGF3YWl0IGRlbGF5KCk7CiAgY29uc3QgcHJvamVjdCA9IHByb2plY3RzLmZpbmQoKHApID0+IHAuaWQgPT09IHByb2plY3RJZCk7CiAgaWYgKHByb2plY3QgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0ICR7cHJvamVjdElkfSBub3QgZm91bmQhYCk7CiAgfQogIGNvbnN0IGlkID0gcmFuZG9tSWQoKTsKICBwcm9qZWN0LnRhc2tzLnVuc2hpZnQoeyAkYXBpTmFtZTogIk1vY2tUYXNrIiwgJHByaW1hcnlLZXk6IGlkLCBpZCwgdGl0bGUgfSk7CiAgcmV0dXJuIGlkOwp9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVUYXNrKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsKICBhd2FpdCBkZWxheSgpOwogIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykgewogICAgY29uc3QgaWR4ID0gcHJvamVjdC50YXNrcy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IGlkKTsKICAgIGlmIChpZHggIT09IC0xKSB7CiAgICAgIHByb2plY3QudGFza3Muc3BsaWNlKGlkeCwgMSk7CiAgICB9CiAgfQp9Cgpjb25zdCBNb2NrcyA9IHsKICBnZXRQcm9qZWN0cywKICBjcmVhdGVQcm9qZWN0LAogIGRlbGV0ZVByb2plY3QsCiAgY3JlYXRlVGFzaywKICBkZWxldGVUYXNrLAp9OwoKZXhwb3J0IGRlZmF1bHQgTW9ja3M7Cg==\"\n}], [\"src/useProjectTasks.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IE1vY2tzLCB7IE1vY2tQcm9qZWN0LCBNb2NrVGFzayB9IGZyb20gIi4vbW9ja3MiOwoKZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2plY3RUYXNrcyhwcm9qZWN0OiBNb2NrUHJvamVjdCB8IHVuZGVmaW5lZCkgewogIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1ZhbGlkYXRpbmcsIGVycm9yLCBtdXRhdGUgfSA9IHVzZVNXUjxNb2NrVGFza1tdPigKICAgIHByb2plY3QgIT0gbnVsbCA\\u002FIGBwcm9qZWN0cy8ke3Byb2plY3QuaWR9L3Rhc2tzYCA6IG51bGwsCiAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgYXN5bmMgKCkgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIHJldHVybiBwcm9qZWN0LnRhc2tzOwogICAgfSwKICApOwoKICBjb25zdCBjcmVhdGVUYXNrOiAoCiAgICB0aXRsZTogc3RyaW5nLAogICkgPT4gUHJvbWlzZTxNb2NrVGFza1siJHByaW1hcnlLZXkiXSB8IHVuZGVmaW5lZD4gPSB1c2VDYWxsYmFjaygKICAgIGFzeW5jICh0aXRsZSkgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfQogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBjb25zdCBpZCA9IGF3YWl0IE1vY2tzLmNyZWF0ZVRhc2soewogICAgICAgIHRpdGxlLAogICAgICAgIHByb2plY3RJZDogcHJvamVjdC4kcHJpbWFyeUtleSwKICAgICAgfSk7CiAgICAgIGF3YWl0IG11dGF0ZSgpOwogICAgICByZXR1cm4gaWQ7CiAgICB9LAogICAgW3Byb2plY3QsIG11dGF0ZV0sCiAgKTsKCiAgY29uc3QgZGVsZXRlVGFzazogKHRhc2s6IE1vY2tUYXNrKSA9PiBQcm9taXNlPHZvaWQ+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAodGFzaykgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGF3YWl0IHNsZWVwKDEwMDApOwogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBhd2FpdCBNb2Nrcy5kZWxldGVUYXNrKHRhc2suJHByaW1hcnlLZXkpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbcHJvamVjdCwgbXV0YXRlXSwKICApOwoKICByZXR1cm4gewogICAgdGFza3M6IGRhdGEsCiAgICBpc0xvYWRpbmcsCiAgICBpc1ZhbGlkYXRpbmcsCiAgICBpc0Vycm9yOiBlcnJvciwKICAgIGNyZWF0ZVRhc2ssCiAgICBkZWxldGVUYXNrLAogIH07Cn0KCmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHsKICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7Cn0K\"\n}], [\"src/useProjects.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IE1vY2tzLCB7IE1vY2tQcm9qZWN0IH0gZnJvbSAiLi9tb2NrcyI7CgpmdW5jdGlvbiB1c2VQcm9qZWN0cygpIHsKICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNWYWxpZGF0aW5nLCBlcnJvciwgbXV0YXRlIH0gPSB1c2VTV1I8CiAgICBNb2NrUHJvamVjdFtdCiAgPigicHJvamVjdHMiLCBhc3luYyAoKSA9PiB7CiAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgcmV0dXJuIE1vY2tzLmdldFByb2plY3RzKCk7CiAgfSk7CgogIGNvbnN0IGNyZWF0ZVByb2plY3Q6IChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8TW9ja1Byb2plY3RbIiRwcmltYXJ5S2V5Il0+ID0KICAgIHVzZUNhbGxiYWNrKAogICAgICBhc3luYyAobmFtZSkgPT4gewogICAgICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCBNb2Nrcy5jcmVhdGVQcm9qZWN0KHsgbmFtZSB9KTsKICAgICAgICBhd2FpdCBtdXRhdGUoKTsKICAgICAgICByZXR1cm4gaWQ7CiAgICAgIH0sCiAgICAgIFttdXRhdGVdLAogICAgKTsKCiAgY29uc3QgZGVsZXRlUHJvamVjdDogKHByb2plY3Q6IE1vY2tQcm9qZWN0KSA9PiBQcm9taXNlPHZvaWQ+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAocHJvamVjdCkgPT4gewogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBhd2FpdCBNb2Nrcy5kZWxldGVQcm9qZWN0KHByb2plY3QuJHByaW1hcnlLZXkpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbbXV0YXRlXSwKICApOwoKICByZXR1cm4gewogICAgcHJvamVjdHM6IGRhdGEsCiAgICBpc0xvYWRpbmcsCiAgICBpc1ZhbGlkYXRpbmcsCiAgICBpc0Vycm9yOiBlcnJvciwKICAgIGNyZWF0ZVByb2plY3QsCiAgICBkZWxldGVQcm9qZWN0LAogIH07Cn0KCmV4cG9ydCBkZWZhdWx0IHVzZVByb2plY3RzOwo=\"\n}], [\"src/vite-env.d.ts\", {\n \"type\": \"base64\",\n \"body\": \"Ly8vIDxyZWZlcmVuY2UgdHlwZXM9InZpdGUvY2xpZW50IiAvPgo=\"\n}], [\"tsconfig.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAidXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHMiOiB0cnVlLAogICAgImxpYiI6IFsiRVMyMDIwIiwgIkRPTSIsICJET00uSXRlcmFibGUiXSwKICAgICJtb2R1bGUiOiAiRVNOZXh0IiwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAoKICAgIC8qIEJ1bmRsZXIgbW9kZSAqLwogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnMiOiB0cnVlLAogICAgInJlc29sdmVKc29uTW9kdWxlIjogdHJ1ZSwKICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAogICAgIm5vRW1pdCI6IHRydWUsCiAgICAianN4IjogInJlYWN0LWpzeCIsCgogICAgLyogTGludGluZyAqLwogICAgInN0cmljdCI6IHRydWUsCiAgICAibm9VbnVzZWRMb2NhbHMiOiB0cnVlLAogICAgIm5vVW51c2VkUGFyYW1ldGVycyI6IHRydWUsCiAgICAibm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2giOiB0cnVlCiAgfSwKICAiaW5jbHVkZSI6IFsic3JjIl0sCiAgInJlZmVyZW5jZXMiOiBbeyAicGF0aCI6ICIuL3RzY29uZmlnLm5vZGUuanNvbiIgfV0KfQo=\"\n}], [\"tsconfig.node.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAiY29tcG9zaXRlIjogdHJ1ZSwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAogICAgIm1vZHVsZSI6ICJFU05leHQiLAogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cyI6IHRydWUKICB9LAogICJpbmNsdWRlIjogWyJ2aXRlLmNvbmZpZy50cyJdCn0K\"\n}], [\"vite.config.ts.hbs\", {\n type: \"raw\",\n body: `import react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vite\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [react()],\n server: {\n port: 8080,\n {{#if corsProxy}}\n proxy: {\n \"^(/multipass/api|/api)\": {\n target: \"{{foundryUrl}}\",\n changeOrigin: true,\n secure: true,\n },\n },\n {{/if}}\n },\n});\n`\n}]]);"]}
@@ -124,8 +124,8 @@ dist-ssr
124
124
  "globals": "^15.11.0",
125
125
  "typescript": "~5.5.4",
126
126
  "typescript-eslint": "^8.15.0",
127
- "vite": "^5.3.4",
128
- "vitest": "^2.0.5"
127
+ "vite": "^6.0.11",
128
+ "vitest": "^3.0.4"
129
129
  }
130
130
  }`
131
131
  }], ["public/aip-icon.svg", {
@@ -327,11 +327,11 @@ export default CreateProjectDialog;
327
327
  body: `import { useCallback, useState } from "react";
328
328
  import css from "./CreateTaskButton.module.css";
329
329
  import CreateTaskDialog from "./CreateTaskDialog";
330
- import type { MockProject } from "./mocks";
330
+ import { IProject } from "./useProjects";
331
331
  import { useProjectTasks } from "./useProjectTasks";
332
332
 
333
333
  interface CreateTaskButtonProps {
334
- project: MockProject;
334
+ project: IProject;
335
335
  onTaskCreated: (taskId: string) => void;
336
336
  }
337
337
 
@@ -373,11 +373,11 @@ import type { ChangeEvent } from "react";
373
373
  import { useCallback, useEffect, useRef, useState } from "react";
374
374
  import css from "./CreateTaskDialog.module.css";
375
375
  import Dialog from "./Dialog";
376
- import type { MockProject } from "./mocks";
376
+ import { IProject } from "./useProjects";
377
377
  import { useProjectTasks } from "./useProjectTasks";
378
378
 
379
379
  interface CreateTaskDialogProps {
380
- project: MockProject;
380
+ project: IProject;
381
381
  isOpen: boolean;
382
382
  onClose: () => void;
383
383
  onTaskCreated: (taskId: string) => void;
@@ -517,11 +517,10 @@ export default CreateTaskDialog;
517
517
  body: `import { useCallback, useState } from "react";
518
518
  import css from "./DeleteProjectButton.module.css";
519
519
  import DeleteProjectDialog from "./DeleteProjectDialog";
520
- import type { MockProject } from "./mocks";
521
- import useProjects from "./useProjects";
520
+ import useProjects, { IProject } from "./useProjects";
522
521
 
523
522
  interface DeleteProjectButtonProps {
524
- project: MockProject;
523
+ project: IProject;
525
524
  }
526
525
 
527
526
  function DeleteProjectButton({ project }: DeleteProjectButtonProps) {
@@ -560,11 +559,10 @@ export default DeleteProjectButton;
560
559
  body: `import { useCallback, useState } from "react";
561
560
  import css from "./DeleteProjectDialog.module.css";
562
561
  import Dialog from "./Dialog";
563
- import type { MockProject } from "./mocks";
564
- import useProjects from "./useProjects";
562
+ import useProjects, { IProject } from "./useProjects";
565
563
 
566
564
  interface DeleteProjectDialogProps {
567
- project: MockProject;
565
+ project: IProject;
568
566
  isOpen: boolean;
569
567
  onClose: () => void;
570
568
  }
@@ -650,10 +648,9 @@ import CreateProjectButton from "./CreateProjectButton";
650
648
  import DeleteProjectButton from "./DeleteProjectButton";
651
649
  import css from "./Home.module.css";
652
650
  import Layout from "./Layout";
653
- import type { MockProject } from "./mocks";
654
651
  import { ProjectDetails } from "./ProjectDetails";
655
652
  import ProjectSelect from "./ProjectSelect";
656
- import useProjects from "./useProjects";
653
+ import useProjects, { IProject } from "./useProjects";
657
654
 
658
655
  function Home() {
659
656
  const [projectId, setProjectId] = useState<string | undefined>(undefined);
@@ -662,7 +659,7 @@ function Home() {
662
659
  const project = projects?.find((p) => p.id === projectId);
663
660
 
664
661
  const handleSelectProject = useCallback(
665
- (p: MockProject) => setProjectId(p.id),
662
+ (p: IProject) => setProjectId(p.id),
666
663
  [],
667
664
  );
668
665
 
@@ -797,14 +794,13 @@ export default Login;
797
794
  body: `import aipLogo from "/aip-icon.svg";
798
795
  import { useCallback, useEffect, useRef, useState } from "react";
799
796
  import CreateTaskButton from "./CreateTaskButton";
800
- import type { MockProject } from "./mocks";
801
797
  import css from "./ProjectDetails.module.css";
802
798
  import TaskList from "./TaskList";
803
- import useProjects from "./useProjects";
799
+ import useProjects, { IProject } from "./useProjects";
804
800
  import { useProjectTasks } from "./useProjectTasks";
805
801
 
806
802
  interface ProjectDetailsProps {
807
- project: MockProject;
803
+ project: IProject;
808
804
  }
809
805
 
810
806
  export function ProjectDetails({ project }: ProjectDetailsProps) {
@@ -886,12 +882,12 @@ export function ProjectDetails({ project }: ProjectDetailsProps) {
886
882
  }], ["src/ProjectSelect.tsx", {
887
883
  type: "raw",
888
884
  body: `import { ChangeEvent, useCallback } from "react";
889
- import { MockProject } from "./mocks";
885
+ import { IProject } from "./useProjects";
890
886
 
891
887
  interface ProjectSelectProps {
892
- project: MockProject | undefined;
893
- projects: MockProject[];
894
- onSelectProject: (project: MockProject) => void;
888
+ project: IProject | undefined;
889
+ projects: IProject[];
890
+ onSelectProject: (project: IProject) => void;
895
891
  }
896
892
 
897
893
  function ProjectSelect({
@@ -931,13 +927,13 @@ export default ProjectSelect;
931
927
  "body": "LnRhc2tMaXN0IHsKICBsaXN0LXN0eWxlOiBub25lOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luLXRvcDogMWVtOwogIG1hcmdpbi1ib3R0b206IDFlbTsKICB3aWR0aDogMTAwJTsKfQo="
932
928
  }], ["src/TaskList.tsx", {
933
929
  type: "raw",
934
- body: `import type { MockProject } from "./mocks";
935
- import css from "./TaskList.module.css";
930
+ body: `import css from "./TaskList.module.css";
936
931
  import TaskListItem from "./TaskListItem";
932
+ import { IProject } from "./useProjects";
937
933
  import { useProjectTasks } from "./useProjectTasks";
938
934
 
939
935
  interface TaskListProps {
940
- project: MockProject;
936
+ project: IProject;
941
937
  onTaskDeleted: (taskId: string | undefined) => void;
942
938
  }
943
939
 
@@ -982,12 +978,12 @@ export default TaskList;
982
978
  }], ["src/TaskListItem.tsx", {
983
979
  type: "raw",
984
980
  body: `import { useCallback, useEffect, useRef, useState } from "react";
985
- import type { MockTask } from "./mocks";
986
981
  import css from "./TaskListItem.module.css";
982
+ import { ITask } from "./useProjectTasks";
987
983
 
988
984
  interface TaskListItemProps {
989
- task: MockTask;
990
- deleteTask: (task: MockTask) => Promise<void>;
985
+ task: ITask;
986
+ deleteTask: (task: ITask) => Promise<void>;
991
987
  onTaskDeleted: (taskId: string | undefined) => void;
992
988
  }
993
989
 
@@ -1139,13 +1135,13 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
1139
1135
  `
1140
1136
  }], ["src/mocks.ts", {
1141
1137
  "type": "base64",
1142
- "body": "ZXhwb3J0IGludGVyZmFjZSBNb2NrUHJvamVjdCB7CiAgJGFwaU5hbWU6IHN0cmluZzsKICAkcHJpbWFyeUtleTogc3RyaW5nOwogIGlkOiBzdHJpbmc7CiAgbmFtZTogc3RyaW5nOwogIGRlc2NyaXB0aW9uOiBzdHJpbmc7CiAgdGFza3M6IE1vY2tUYXNrW107Cn0KCmV4cG9ydCBpbnRlcmZhY2UgTW9ja1Rhc2sgewogICRhcGlOYW1lOiBzdHJpbmc7CiAgJHByaW1hcnlLZXk6IHN0cmluZzsKICBpZDogc3RyaW5nOwogIHRpdGxlOiBzdHJpbmc7CiAgZGVzY3JpcHRpb246IHN0cmluZzsKfQoKY29uc3QgcHJvamVjdHM6IE1vY2tQcm9qZWN0W10gPSBbCiAgewogICAgJGFwaU5hbWU6ICJNb2NrUHJvamVjdCIsCiAgICAkcHJpbWFyeUtleTogIjEiLAogICAgaWQ6ICIxIiwKICAgIG5hbWU6ICJNb2NrIHByb2plY3QiLAogICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIGEgbW9jayBkZXNjcmlwdGlvbiIsCiAgICB0YXNrczogWwogICAgICB7CiAgICAgICAgJGFwaU5hbWU6ICJNb2NrVGFzayIsCiAgICAgICAgJHByaW1hcnlLZXk6ICIxIiwKICAgICAgICBpZDogIjEiLAogICAgICAgIHRpdGxlOiAiVHJ5IHRvIiwKICAgICAgICBkZXNjcmlwdGlvbjogInRhc2sgZGVzY3JpcHRpb24gMSIsCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAkYXBpTmFtZTogIk1vY2tUYXNrIiwKICAgICAgICAkcHJpbWFyeUtleTogIjIiLAogICAgICAgIGlkOiAiMiIsCiAgICAgICAgdGl0bGU6ICJJbXBsZW1lbnQgdGhpcyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJ0YXNrIGRlc2NyaXB0aW9uIDIiLAogICAgICB9LAogICAgICB7CiAgICAgICAgJGFwaU5hbWU6ICJNb2NrVGFzayIsCiAgICAgICAgJHByaW1hcnlLZXk6ICIzIiwKICAgICAgICBpZDogIjMiLAogICAgICAgIHRpdGxlOiAiV2l0aCB0aGUgT250b2xvZ3kgU0RLISIsCiAgICAgICAgZGVzY3JpcHRpb246ICJ0YXNrIGRlc2NyaXB0aW9uIDMiLAogICAgICB9LAogICAgXSwKICB9LAogIHsKICAgICRhcGlOYW1lOiAiTW9ja1Byb2plY3QiLAogICAgJHByaW1hcnlLZXk6ICIyIiwKICAgIGlkOiAiMiIsCiAgICBuYW1lOiAiWWV0IGFub3RoZXIgbW9jayBwcm9qZWN0IiwKICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyBhbm90aGVyIG1vY2sgZGVzY3JpcHRpb24iLAogICAgdGFza3M6IFsKICAgICAgewogICAgICAgICRhcGlOYW1lOiAiTW9ja1Rhc2siLAogICAgICAgICRwcmltYXJ5S2V5OiAiNCIsCiAgICAgICAgaWQ6ICI0IiwKICAgICAgICB0aXRsZTogIk1vcmUgdGFza3MgaGVyZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICJNb3JlIHRhc2sgZGVzY3JpcHRpb24iLAogICAgICB9LAogICAgXSwKICB9LApdOwoKYXN5bmMgZnVuY3Rpb24gZGVsYXkoKTogUHJvbWlzZTx2b2lkPiB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDUwMCArIE1hdGgucmFuZG9tKCkgKiAxMDAwKQogICk7Cn0KCi8vIEdvb2QgZW5vdWdoIHJhbmRvbSBpZCBmb3IgbW9ja3MKZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHsKICByZXR1cm4gYCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMiAqKiAzMSl9YDsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UHJvamVjdHMoKTogUHJvbWlzZTxNb2NrUHJvamVjdFtdPiB7CiAgYXdhaXQgZGVsYXkoKTsKICBjb25zdCByZXN1bHQgPSBbLi4ucHJvamVjdHNdOwogIHJlc3VsdC5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWUubG9jYWxlQ29tcGFyZShwMi5uYW1lKSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKYXN5bmMgZnVuY3Rpb24gY3JlYXRlUHJvamVjdCh7CiAgbmFtZSwKICBkZXNjcmlwdGlvbiA9ICIiLAp9OiB7CiAgbmFtZTogc3RyaW5nOwogIGRlc2NyaXB0aW9uPzogc3RyaW5nOwp9KTogUHJvbWlzZTxNb2NrUHJvamVjdFsiJHByaW1hcnlLZXkiXT4gewogIGF3YWl0IGRlbGF5KCk7CiAgY29uc3QgaWQgPSByYW5kb21JZCgpOwogIHByb2plY3RzLnB1c2goewogICAgJGFwaU5hbWU6ICJNb2NrUHJvamVjdCIsCiAgICAkcHJpbWFyeUtleTogaWQsCiAgICBpZCwKICAgIG5hbWUsCiAgICBkZXNjcmlwdGlvbiwKICAgIHRhc2tzOiBbXSwKICB9KTsKICByZXR1cm4gaWQ7Cn0KCmFzeW5jIGZ1bmN0aW9uIGdldFJlY29tbWVuZGVkUHJvamVjdERlc2NyaXB0aW9uKAogIHByb2plY3Q6IE1vY2tQcm9qZWN0LAopOiBQcm9taXNlPHN0cmluZz4gewogIGF3YWl0IGRlbGF5KCk7CiAgaWYgKHByb2plY3QudGFza3MgIT0gbnVsbCAmJiBwcm9qZWN0LnRhc2tzLmxlbmd0aCA9PT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJQcm9qZWN0IGRlc2NyaXB0aW9uIHJlY29tbWVuZGF0aW9uIHJlcXVpcmVzIHRhc2tzIik7CiAgfQogIHJldHVybiBgQUlQIExvZ2ljIG1vY2sgZGVzY3JpcHRpb24gZm9yIHByb2plY3RgOwp9Cgphc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RGVzY3JpcHRpb24oCiAgcHJvamVjdDogTW9ja1Byb2plY3QsCik6IFByb21pc2U8dm9pZD4gewogIGF3YWl0IGRlbGF5KCk7CiAgcHJvamVjdC5kZXNjcmlwdGlvbiA9IGF3YWl0IGdldFJlY29tbWVuZGVkUHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QpOwp9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsKICBhd2FpdCBkZWxheSgpOwogIGNvbnN0IGlkeCA9IHByb2plY3RzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gaWQpOwogIGlmIChpZHggIT09IC0xKSB7CiAgICBwcm9qZWN0cy5zcGxpY2UoaWR4LCAxKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRhc2soewogIHRpdGxlLAogIGRlc2NyaXB0aW9uID0gIiIsCiAgcHJvamVjdElkLAp9OiB7CiAgdGl0bGU6IHN0cmluZzsKICBkZXNjcmlwdGlvbjogc3RyaW5nOwogIHByb2plY3RJZDogc3RyaW5nOwp9KTogUHJvbWlzZTxNb2NrVGFza1siJHByaW1hcnlLZXkiXT4gewogIGF3YWl0IGRlbGF5KCk7CiAgY29uc3QgcHJvamVjdCA9IHByb2plY3RzLmZpbmQoKHApID0+IHAuaWQgPT09IHByb2plY3RJZCk7CiAgaWYgKHByb2plY3QgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0ICR7cHJvamVjdElkfSBub3QgZm91bmQhYCk7CiAgfQogIGNvbnN0IGlkID0gcmFuZG9tSWQoKTsKICBwcm9qZWN0LnRhc2tzLnVuc2hpZnQoewogICAgJGFwaU5hbWU6ICJNb2NrVGFzayIsCiAgICAkcHJpbWFyeUtleTogaWQsCiAgICBpZCwKICAgIHRpdGxlLAogICAgZGVzY3JpcHRpb24sCiAgfSk7CiAgcmV0dXJuIGlkOwp9Cgphc3luYyBmdW5jdGlvbiBnZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbigKICB0YXNrTmFtZTogc3RyaW5nLAopOiBQcm9taXNlPHN0cmluZz4gewogIGF3YWl0IGRlbGF5KCk7CiAgaWYgKHRhc2tOYW1lLmxlbmd0aCA9PT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG5hbWUgbXVzdCBub3QgYmUgZW1wdHkiKTsKICB9CiAgcmV0dXJuIGBNb2NrIEFJUCBkZXNjcmlwdGlvbiBmb3IgdGFza2A7Cn0KCmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVRhc2soaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gewogIGF3YWl0IGRlbGF5KCk7CiAgZm9yIChjb25zdCBwcm9qZWN0IG9mIHByb2plY3RzKSB7CiAgICBjb25zdCBpZHggPSBwcm9qZWN0LnRhc2tzLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gaWQpOwogICAgaWYgKGlkeCAhPT0gLTEpIHsKICAgICAgcHJvamVjdC50YXNrcy5zcGxpY2UoaWR4LCAxKTsKICAgIH0KICB9Cn0KCmNvbnN0IE1vY2tzID0gewogIGdldFByb2plY3RzLAogIGNyZWF0ZVByb2plY3QsCiAgZ2V0UmVjb21tZW5kZWRQcm9qZWN0RGVzY3JpcHRpb24sCiAgZGVsZXRlUHJvamVjdCwKICBjcmVhdGVUYXNrLAogIGRlbGV0ZVRhc2ssCiAgZ2V0UmVjb21tZW5kZWRUYXNrRGVzY3JpcHRpb24sCiAgdXBkYXRlUHJvamVjdERlc2NyaXB0aW9uLAp9OwoKZXhwb3J0IGRlZmF1bHQgTW9ja3M7Cg=="
1138
+ "body": "aW1wb3J0IHsgSVByb2plY3QgfSBmcm9tICIuL3VzZVByb2plY3RzIjsKaW1wb3J0IHsgSVRhc2sgfSBmcm9tICIuL3VzZVByb2plY3RUYXNrcyI7Cgpjb25zdCBwcm9qZWN0czogSVByb2plY3RbXSA9IFsKICB7CiAgICAkYXBpTmFtZTogIk1vY2tQcm9qZWN0IiwKICAgICRwcmltYXJ5S2V5OiAiMSIsCiAgICBpZDogIjEiLAogICAgbmFtZTogIk1vY2sgcHJvamVjdCIsCiAgICBkZXNjcmlwdGlvbjogIlRoaXMgaXMgYSBtb2NrIGRlc2NyaXB0aW9uIiwKICB9LAogIHsKICAgICRhcGlOYW1lOiAiTW9ja1Byb2plY3QiLAogICAgJHByaW1hcnlLZXk6ICIyIiwKICAgIGlkOiAiMiIsCiAgICBuYW1lOiAiWWV0IGFub3RoZXIgbW9jayBwcm9qZWN0IiwKICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyBhbm90aGVyIG1vY2sgZGVzY3JpcHRpb24iLAogIH0sCl07Cgpjb25zdCB0YXNrczogSVRhc2tbXSA9IFsKICB7CiAgICAkYXBpTmFtZTogIk1vY2tUYXNrIiwKICAgICRwcmltYXJ5S2V5OiAiMSIsCiAgICBpZDogIjEiLAogICAgdGl0bGU6ICJUcnkgdG8iLAogICAgZGVzY3JpcHRpb246ICJ0YXNrIGRlc2NyaXB0aW9uIDEiLAogICAgcHJvamVjdElkOiAiMSIsCiAgfSwKICB7CiAgICAkYXBpTmFtZTogIk1vY2tUYXNrIiwKICAgICRwcmltYXJ5S2V5OiAiMiIsCiAgICBpZDogIjIiLAogICAgdGl0bGU6ICJJbXBsZW1lbnQgdGhpcyIsCiAgICBkZXNjcmlwdGlvbjogInRhc2sgZGVzY3JpcHRpb24gMiIsCiAgICBwcm9qZWN0SWQ6ICIxIiwKICB9LAogIHsKICAgICRhcGlOYW1lOiAiTW9ja1Rhc2siLAogICAgJHByaW1hcnlLZXk6ICIzIiwKICAgIGlkOiAiMyIsCiAgICB0aXRsZTogIldpdGggdGhlIE9udG9sb2d5IFNESyEiLAogICAgZGVzY3JpcHRpb246ICJ0YXNrIGRlc2NyaXB0aW9uIDMiLAogICAgcHJvamVjdElkOiAiMSIsCiAgfSwKICB7CiAgICAkYXBpTmFtZTogIk1vY2tUYXNrIiwKICAgICRwcmltYXJ5S2V5OiAiNCIsCiAgICBpZDogIjQiLAogICAgdGl0bGU6ICJNb3JlIHRhc2tzIGhlcmUiLAogICAgZGVzY3JpcHRpb246ICJNb3JlIHRhc2sgZGVzY3JpcHRpb24iLAogICAgcHJvamVjdElkOiAiMiIsCiAgfSwKXTsKYXN5bmMgZnVuY3Rpb24gZGVsYXkoKTogUHJvbWlzZTx2b2lkPiB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDUwMCArIE1hdGgucmFuZG9tKCkgKiAxMDAwKQogICk7Cn0KCi8vIEdvb2QgZW5vdWdoIHJhbmRvbSBpZCBmb3IgbW9ja3MKZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHsKICByZXR1cm4gYCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMiAqKiAzMSl9YDsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UHJvamVjdHMoKTogUHJvbWlzZTxJUHJvamVjdFtdPiB7CiAgYXdhaXQgZGVsYXkoKTsKICBjb25zdCByZXN1bHQgPSBbLi4ucHJvamVjdHNdOwogIHJlc3VsdC5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWUubG9jYWxlQ29tcGFyZShwMi5uYW1lKSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKYXN5bmMgZnVuY3Rpb24gY3JlYXRlUHJvamVjdCh7CiAgbmFtZSwKfTogewogIG5hbWU6IHN0cmluZzsKICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfSk6IFByb21pc2U8SVByb2plY3RbIiRwcmltYXJ5S2V5Il0+IHsKICBhd2FpdCBkZWxheSgpOwogIGNvbnN0IGlkID0gcmFuZG9tSWQoKTsKICBwcm9qZWN0cy5wdXNoKHsKICAgICRhcGlOYW1lOiAiTW9ja1Byb2plY3QiLAogICAgJHByaW1hcnlLZXk6IGlkLAogICAgaWQsCiAgICBuYW1lLAogICAgZGVzY3JpcHRpb246ICIiLAogIH0pOwogIHJldHVybiBpZDsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb21tZW5kZWRQcm9qZWN0RGVzY3JpcHRpb24oCiAgcHJvamVjdDogSVByb2plY3QsCik6IFByb21pc2U8c3RyaW5nPiB7CiAgYXdhaXQgZGVsYXkoKTsKICBjb25zdCBwcm9qZWN0VGFza3MgPSB0YXNrcy5maWx0ZXIoKHQpID0+IHQucHJvamVjdElkID09PSBwcm9qZWN0LmlkKTsKICBpZiAocHJvamVjdFRhc2tzLmxlbmd0aCA9PT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJQcm9qZWN0IGRlc2NyaXB0aW9uIHJlY29tbWVuZGF0aW9uIHJlcXVpcmVzIHRhc2tzIik7CiAgfQogIHJldHVybiBgQUlQIExvZ2ljIG1vY2sgZGVzY3JpcHRpb24gZm9yIHByb2plY3RgOwp9Cgphc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RGVzY3JpcHRpb24oCiAgcHJvamVjdDogSVByb2plY3QsCik6IFByb21pc2U8dm9pZD4gewogIGF3YWl0IGRlbGF5KCk7CiAgcHJvamVjdC5kZXNjcmlwdGlvbiA9IGF3YWl0IGdldFJlY29tbWVuZGVkUHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QpOwp9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsKICBhd2FpdCBkZWxheSgpOwogIGNvbnN0IGlkeCA9IHByb2plY3RzLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gaWQpOwogIGlmIChpZHggIT09IC0xKSB7CiAgICBwcm9qZWN0cy5zcGxpY2UoaWR4LCAxKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGdldFByb2plY3RUYXNrcyhwcm9qZWN0SWQ6IHN0cmluZyk6IFByb21pc2U8SVRhc2tbXT4gewogIGF3YWl0IGRlbGF5KCk7CiAgcmV0dXJuIHRhc2tzLmZpbHRlcigodCkgPT4gdC5wcm9qZWN0SWQgPT09IHByb2plY3RJZCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRhc2soewogIHRpdGxlLAogIGRlc2NyaXB0aW9uID0gIiIsCiAgcHJvamVjdElkLAp9OiB7CiAgdGl0bGU6IHN0cmluZzsKICBkZXNjcmlwdGlvbjogc3RyaW5nOwogIHByb2plY3RJZDogc3RyaW5nOwp9KTogUHJvbWlzZTxJVGFza1siJHByaW1hcnlLZXkiXT4gewogIGF3YWl0IGRlbGF5KCk7CiAgY29uc3QgcHJvamVjdCA9IHByb2plY3RzLmZpbmQoKHApID0+IHAuaWQgPT09IHByb2plY3RJZCk7CiAgaWYgKHByb2plY3QgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0ICR7cHJvamVjdElkfSBub3QgZm91bmQhYCk7CiAgfQogIGNvbnN0IGlkID0gcmFuZG9tSWQoKTsKICB0YXNrcy51bnNoaWZ0KHsKICAgICRhcGlOYW1lOiAiTW9ja1Rhc2siLAogICAgJHByaW1hcnlLZXk6IGlkLAogICAgaWQsCiAgICB0aXRsZSwKICAgIGRlc2NyaXB0aW9uLAogICAgcHJvamVjdElkLAogIH0pOwogIHJldHVybiBpZDsKfQoKYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb21tZW5kZWRUYXNrRGVzY3JpcHRpb24oCiAgdGFza05hbWU6IHN0cmluZywKKTogUHJvbWlzZTxzdHJpbmc+IHsKICBhd2FpdCBkZWxheSgpOwogIGlmICh0YXNrTmFtZS5sZW5ndGggPT09IDApIHsKICAgIHRocm93IG5ldyBFcnJvcigiVGFzayBuYW1lIG11c3Qgbm90IGJlIGVtcHR5Iik7CiAgfQogIHJldHVybiBgTW9jayBBSVAgZGVzY3JpcHRpb24gZm9yIHRhc2tgOwp9Cgphc3luYyBmdW5jdGlvbiBkZWxldGVUYXNrKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHsKICBhd2FpdCBkZWxheSgpOwogIGNvbnN0IGlkeCA9IHRhc2tzLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gaWQpOwogIGlmIChpZHggIT09IC0xKSB7CiAgICB0YXNrcy5zcGxpY2UoaWR4LCAxKTsKICB9Cn0KCmNvbnN0IE1vY2tzID0gewogIGdldFByb2plY3RzLAogIGNyZWF0ZVByb2plY3QsCiAgZ2V0UmVjb21tZW5kZWRQcm9qZWN0RGVzY3JpcHRpb24sCiAgZGVsZXRlUHJvamVjdCwKICBnZXRQcm9qZWN0VGFza3MsCiAgY3JlYXRlVGFzaywKICBkZWxldGVUYXNrLAogIGdldFJlY29tbWVuZGVkVGFza0Rlc2NyaXB0aW9uLAogIHVwZGF0ZVByb2plY3REZXNjcmlwdGlvbiwKfTsKCmV4cG9ydCBkZWZhdWx0IE1vY2tzOwo="
1143
1139
  }], ["src/useProjectTasks.ts", {
1144
1140
  "type": "base64",
1145
- "body": "aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IE1vY2tzLCB7IE1vY2tQcm9qZWN0LCBNb2NrVGFzayB9IGZyb20gIi4vbW9ja3MiOwoKZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2plY3RUYXNrcyhwcm9qZWN0OiBNb2NrUHJvamVjdCB8IHVuZGVmaW5lZCkgewogIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1ZhbGlkYXRpbmcsIGVycm9yLCBtdXRhdGUgfSA9IHVzZVNXUjxNb2NrVGFza1tdPigKICAgIHByb2plY3QgIT0gbnVsbCA/IGBwcm9qZWN0cy8ke3Byb2plY3QuaWR9L3Rhc2tzYCA6IG51bGwsCiAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgYXN5bmMgKCkgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIHJldHVybiBwcm9qZWN0LnRhc2tzOwogICAgfSwKICApOwoKICBjb25zdCBjcmVhdGVUYXNrOiAoCiAgICB0aXRsZTogc3RyaW5nLAogICAgZGVzY3JpcHRpb246IHN0cmluZywKICApID0+IFByb21pc2U8TW9ja1Rhc2tbIiRwcmltYXJ5S2V5Il0gfCB1bmRlZmluZWQ+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAodGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfQogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBjb25zdCBpZCA9IGF3YWl0IE1vY2tzLmNyZWF0ZVRhc2soewogICAgICAgIHRpdGxlLAogICAgICAgIGRlc2NyaXB0aW9uLAogICAgICAgIHByb2plY3RJZDogcHJvamVjdC4kcHJpbWFyeUtleSwKICAgICAgfSk7CiAgICAgIGF3YWl0IG11dGF0ZSgpOwogICAgICByZXR1cm4gaWQ7CiAgICB9LAogICAgW3Byb2plY3QsIG11dGF0ZV0sCiAgKTsKCiAgY29uc3QgZGVsZXRlVGFzazogKHRhc2s6IE1vY2tUYXNrKSA9PiBQcm9taXNlPHZvaWQ+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAodGFzaykgPT4gewogICAgICBpZiAocHJvamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGF3YWl0IHNsZWVwKDEwMDApOwogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBhd2FpdCBNb2Nrcy5kZWxldGVUYXNrKHRhc2suJHByaW1hcnlLZXkpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbcHJvamVjdCwgbXV0YXRlXSwKICApOwoKICBjb25zdCBnZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbjogKHRhc2tOYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPiA9CiAgICB1c2VDYWxsYmFjaygKICAgICAgYXN5bmMgKHRhc2tOYW1lOiBzdHJpbmcpID0+IHsKICAgICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICAgIGNvbnN0IHJlY29tbWVuZGVkVGFza0Rlc2NyaXB0aW9uID0gYXdhaXQgTW9ja3MKICAgICAgICAgIC5nZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbih0YXNrTmFtZSk7CiAgICAgICAgYXdhaXQgbXV0YXRlKCk7CiAgICAgICAgcmV0dXJuIHJlY29tbWVuZGVkVGFza0Rlc2NyaXB0aW9uOwogICAgICB9LAogICAgICBbbXV0YXRlXSwKICAgICk7CgogIHJldHVybiB7CiAgICB0YXNrczogZGF0YSwKICAgIGlzTG9hZGluZywKICAgIGlzVmFsaWRhdGluZywKICAgIGlzRXJyb3I6IGVycm9yLAogICAgY3JlYXRlVGFzaywKICAgIGRlbGV0ZVRhc2ssCiAgICBnZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbiwKICB9Owp9CgpmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpOwp9Cg=="
1141
+ "body": "aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IE1vY2tzIGZyb20gIi4vbW9ja3MiOwppbXBvcnQgeyBJUHJvamVjdCB9IGZyb20gIi4vdXNlUHJvamVjdHMiOwoKZXhwb3J0IGludGVyZmFjZSBJVGFzayB7CiAgJGFwaU5hbWU6IHN0cmluZzsKICAkcHJpbWFyeUtleTogc3RyaW5nOwogIGlkOiBzdHJpbmc7CiAgdGl0bGU6IHN0cmluZzsKICBkZXNjcmlwdGlvbjogc3RyaW5nOwogIHByb2plY3RJZDogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gdXNlUHJvamVjdFRhc2tzKHByb2plY3Q6IElQcm9qZWN0IHwgdW5kZWZpbmVkKSB7CiAgY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcsIGlzVmFsaWRhdGluZywgZXJyb3IsIG11dGF0ZSB9ID0gdXNlU1dSPElUYXNrW10+KAogICAgcHJvamVjdCAhPSBudWxsID8gYHByb2plY3RzLyR7cHJvamVjdC5pZH0vdGFza3NgIDogbnVsbCwKICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICBhc3luYyAoKSA9PiB7CiAgICAgIGlmIChwcm9qZWN0ID09IG51bGwpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgcmV0dXJuIE1vY2tzLmdldFByb2plY3RUYXNrcyhwcm9qZWN0LiRwcmltYXJ5S2V5KTsKICAgIH0sCiAgKTsKCiAgY29uc3QgY3JlYXRlVGFzazogKAogICAgdGl0bGU6IHN0cmluZywKICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsCiAgKSA9PiBQcm9taXNlPElUYXNrWyIkcHJpbWFyeUtleSJdIHwgdW5kZWZpbmVkPiA9IHVzZUNhbGxiYWNrKAogICAgYXN5bmMgKHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+IHsKICAgICAgaWYgKHByb2plY3QgPT0gbnVsbCkgewogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgLy8gVHJ5IHRvIGltcGxlbWVudCB0aGlzIHdpdGggdGhlIE9udG9sb2d5IFNESyEKICAgICAgY29uc3QgaWQgPSBhd2FpdCBNb2Nrcy5jcmVhdGVUYXNrKHsKICAgICAgICB0aXRsZSwKICAgICAgICBkZXNjcmlwdGlvbiwKICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3QuJHByaW1hcnlLZXksCiAgICAgIH0pOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgICAgcmV0dXJuIGlkOwogICAgfSwKICAgIFtwcm9qZWN0LCBtdXRhdGVdLAogICk7CgogIGNvbnN0IGRlbGV0ZVRhc2s6ICh0YXNrOiBJVGFzaykgPT4gUHJvbWlzZTx2b2lkPiA9IHVzZUNhbGxiYWNrKAogICAgYXN5bmMgKHRhc2spID0+IHsKICAgICAgaWYgKHByb2plY3QgPT0gbnVsbCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBhd2FpdCBNb2Nrcy5kZWxldGVUYXNrKHRhc2suJHByaW1hcnlLZXkpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbcHJvamVjdCwgbXV0YXRlXSwKICApOwoKICBjb25zdCBnZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbjogKHRhc2tOYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPiA9CiAgICB1c2VDYWxsYmFjaygKICAgICAgYXN5bmMgKHRhc2tOYW1lOiBzdHJpbmcpID0+IHsKICAgICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICAgIGNvbnN0IHJlY29tbWVuZGVkVGFza0Rlc2NyaXB0aW9uID0gYXdhaXQgTW9ja3MKICAgICAgICAgIC5nZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbih0YXNrTmFtZSk7CiAgICAgICAgYXdhaXQgbXV0YXRlKCk7CiAgICAgICAgcmV0dXJuIHJlY29tbWVuZGVkVGFza0Rlc2NyaXB0aW9uOwogICAgICB9LAogICAgICBbbXV0YXRlXSwKICAgICk7CgogIHJldHVybiB7CiAgICB0YXNrczogZGF0YSwKICAgIGlzTG9hZGluZywKICAgIGlzVmFsaWRhdGluZywKICAgIGlzRXJyb3I6IGVycm9yLAogICAgY3JlYXRlVGFzaywKICAgIGRlbGV0ZVRhc2ssCiAgICBnZXRSZWNvbW1lbmRlZFRhc2tEZXNjcmlwdGlvbiwKICB9Owp9Cg=="
1146
1142
  }], ["src/useProjects.ts", {
1147
1143
  "type": "base64",
1148
- "body": "aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IHR5cGUgeyBNb2NrUHJvamVjdCB9IGZyb20gIi4vbW9ja3MiOwppbXBvcnQgTW9ja3MgZnJvbSAiLi9tb2NrcyI7CgpmdW5jdGlvbiB1c2VQcm9qZWN0cygpIHsKICBjb25zdCB7IGRhdGEsIGlzTG9hZGluZywgaXNWYWxpZGF0aW5nLCBlcnJvciwgbXV0YXRlIH0gPSB1c2VTV1I8CiAgICBNb2NrUHJvamVjdFtdCiAgPigicHJvamVjdHMiLCBhc3luYyAoKSA9PiB7CiAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgcmV0dXJuIE1vY2tzLmdldFByb2plY3RzKCk7CiAgfSk7CgogIGNvbnN0IGNyZWF0ZVByb2plY3Q6ICgKICAgIG5hbWU6IHN0cmluZywKICApID0+IFByb21pc2U8TW9ja1Byb2plY3RbIiRwcmltYXJ5S2V5Il0+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAobmFtZTogc3RyaW5nKSA9PiB7CiAgICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICAgIGNvbnN0IGlkID0gYXdhaXQgTW9ja3MuY3JlYXRlUHJvamVjdCh7IG5hbWUgfSk7CiAgICAgIGF3YWl0IG11dGF0ZSgpOwogICAgICByZXR1cm4gaWQ7CiAgICB9LAogICAgW211dGF0ZV0sCiAgKTsKCiAgY29uc3QgdXBkYXRlUHJvamVjdERlc2NyaXB0aW9uOiAoCiAgICBwcm9qZWN0OiBNb2NrUHJvamVjdCwKICApID0+IFByb21pc2U8dm9pZD4gPSB1c2VDYWxsYmFjaygKICAgIGFzeW5jIChwcm9qZWN0KSA9PiB7CiAgICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICAgIGF3YWl0IE1vY2tzLnVwZGF0ZVByb2plY3REZXNjcmlwdGlvbihwcm9qZWN0KTsKICAgICAgYXdhaXQgbXV0YXRlKCk7CiAgICB9LAogICAgW211dGF0ZV0sCiAgKTsKCiAgY29uc3QgZGVsZXRlUHJvamVjdDogKHByb2plY3Q6IE1vY2tQcm9qZWN0KSA9PiBQcm9taXNlPHZvaWQ+ID0gdXNlQ2FsbGJhY2soCiAgICBhc3luYyAocHJvamVjdCkgPT4gewogICAgICAvLyBUcnkgdG8gaW1wbGVtZW50IHRoaXMgd2l0aCB0aGUgT250b2xvZ3kgU0RLIQogICAgICBhd2FpdCBNb2Nrcy5kZWxldGVQcm9qZWN0KHByb2plY3QuJHByaW1hcnlLZXkpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbbXV0YXRlXSwKICApOwoKICByZXR1cm4gewogICAgcHJvamVjdHM6IGRhdGEsCiAgICBpc0xvYWRpbmcsCiAgICBpc1ZhbGlkYXRpbmcsCiAgICBpc0Vycm9yOiBlcnJvciwKICAgIGNyZWF0ZVByb2plY3QsCiAgICBkZWxldGVQcm9qZWN0LAogICAgdXBkYXRlUHJvamVjdERlc2NyaXB0aW9uLAogIH07Cn0KCmV4cG9ydCBkZWZhdWx0IHVzZVByb2plY3RzOwo="
1144
+ "body": "aW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB1c2VTV1IgZnJvbSAic3dyIjsKaW1wb3J0IE1vY2tzIGZyb20gIi4vbW9ja3MiOwoKZXhwb3J0IGludGVyZmFjZSBJUHJvamVjdCB7CiAgJGFwaU5hbWU6IHN0cmluZzsKICAkcHJpbWFyeUtleTogc3RyaW5nOwogIGlkOiBzdHJpbmc7CiAgbmFtZTogc3RyaW5nOwogIGRlc2NyaXB0aW9uOiBzdHJpbmc7Cn0KCmZ1bmN0aW9uIHVzZVByb2plY3RzKCkgewogIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nLCBpc1ZhbGlkYXRpbmcsIGVycm9yLCBtdXRhdGUgfSA9IHVzZVNXUjxJUHJvamVjdFtdPigKICAgICJwcm9qZWN0cyIsCiAgICBhc3luYyAoKSA9PiB7CiAgICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICAgIGNvbnN0IHByb2plY3RzTGlzdDogSVByb2plY3RbXSA9IChhd2FpdCBNb2Nrcy5nZXRQcm9qZWN0cygpKS5tYXAoKAogICAgICAgIHByb2plY3QsCiAgICAgICkgPT4gKHsKICAgICAgICAkYXBpTmFtZTogcHJvamVjdC4kYXBpTmFtZSwKICAgICAgICAkcHJpbWFyeUtleTogcHJvamVjdC4kcHJpbWFyeUtleSwKICAgICAgICBpZDogcHJvamVjdC5pZCwKICAgICAgICBuYW1lOiBwcm9qZWN0Lm5hbWUgfHwgIiIsCiAgICAgICAgZGVzY3JpcHRpb246IHByb2plY3QuZGVzY3JpcHRpb24gfHwgIiIsCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIHByb2plY3RzTGlzdDsKICAgIH0sCiAgKTsKCiAgY29uc3QgY3JlYXRlUHJvamVjdDogKAogICAgbmFtZTogc3RyaW5nLAogICkgPT4gUHJvbWlzZTxJUHJvamVjdFsiJHByaW1hcnlLZXkiXT4gPSB1c2VDYWxsYmFjaygKICAgIGFzeW5jIChuYW1lOiBzdHJpbmcpID0+IHsKICAgICAgLy8gVHJ5IHRvIGltcGxlbWVudCB0aGlzIHdpdGggdGhlIE9udG9sb2d5IFNESyEKICAgICAgY29uc3QgaWQgPSBhd2FpdCBNb2Nrcy5jcmVhdGVQcm9qZWN0KHsgbmFtZSB9KTsKICAgICAgYXdhaXQgbXV0YXRlKCk7CiAgICAgIHJldHVybiBpZDsKICAgIH0sCiAgICBbbXV0YXRlXSwKICApOwoKICBjb25zdCB1cGRhdGVQcm9qZWN0RGVzY3JpcHRpb246ICgKICAgIHByb2plY3Q6IElQcm9qZWN0LAogICkgPT4gUHJvbWlzZTx2b2lkPiA9IHVzZUNhbGxiYWNrKAogICAgYXN5bmMgKHByb2plY3QpID0+IHsKICAgICAgLy8gVHJ5IHRvIGltcGxlbWVudCB0aGlzIHdpdGggdGhlIE9udG9sb2d5IFNESyEKICAgICAgYXdhaXQgTW9ja3MudXBkYXRlUHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QpOwogICAgICBhd2FpdCBtdXRhdGUoKTsKICAgIH0sCiAgICBbbXV0YXRlXSwKICApOwoKICBjb25zdCBkZWxldGVQcm9qZWN0OiAocHJvamVjdDogSVByb2plY3QpID0+IFByb21pc2U8dm9pZD4gPSB1c2VDYWxsYmFjaygKICAgIGFzeW5jIChwcm9qZWN0KSA9PiB7CiAgICAgIC8vIFRyeSB0byBpbXBsZW1lbnQgdGhpcyB3aXRoIHRoZSBPbnRvbG9neSBTREshCiAgICAgIGF3YWl0IE1vY2tzLmRlbGV0ZVByb2plY3QocHJvamVjdC4kcHJpbWFyeUtleSk7CiAgICAgIGF3YWl0IG11dGF0ZSgpOwogICAgfSwKICAgIFttdXRhdGVdLAogICk7CgogIHJldHVybiB7CiAgICBwcm9qZWN0czogZGF0YSwKICAgIGlzTG9hZGluZywKICAgIGlzVmFsaWRhdGluZywKICAgIGlzRXJyb3I6IGVycm9yLAogICAgY3JlYXRlUHJvamVjdCwKICAgIGRlbGV0ZVByb2plY3QsCiAgICB1cGRhdGVQcm9qZWN0RGVzY3JpcHRpb24sCiAgfTsKfQoKZXhwb3J0IGRlZmF1bHQgdXNlUHJvamVjdHM7Cg=="
1149
1145
  }], ["src/vite-env.d.ts", {
1150
1146
  "type": "base64",
1151
1147
  "body": "Ly8vIDxyZWZlcmVuY2UgdHlwZXM9InZpdGUvY2xpZW50IiAvPgo="
@@ -1180,5 +1176,5 @@ export default defineConfig({
1180
1176
  }]]);
1181
1177
 
1182
1178
  export { files };
1183
- //# sourceMappingURL=esm-FDYGPX22.js.map
1184
- //# sourceMappingURL=esm-FDYGPX22.js.map
1179
+ //# sourceMappingURL=esm-CYB2O5FN.js.map
1180
+ //# sourceMappingURL=esm-CYB2O5FN.js.map