diff --git a/.adonisjs/api.ts b/.adonisjs/api.ts new file mode 100644 index 0000000..9c3a99e --- /dev/null +++ b/.adonisjs/api.ts @@ -0,0 +1,476 @@ +// @ts-nocheck +/* eslint-disable */ +// -------------------------------------------------- +// This file is auto-generated by Tuyau. Do not edit manually ! +// -------------------------------------------------- + +import type { MakeTuyauRequest, MakeTuyauResponse } from '@tuyau/utils/types'; +import type { InferInput } from '@vinejs/vine/types'; + +type AdminGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/admin/controllers/admin_controller.ts').default['index'], + false + >; +}; +type AuthCallbackGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/auth/controllers/auth_controller.ts').default['callbackAuth'], + false + >; +}; +type AuthLogoutGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/auth/controllers/auth_controller.ts').default['logout'], + false + >; +}; +type DashboardGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['index'], + false + >; +}; +type CollectionsCreateGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['showCreatePage'], + false + >; +}; +type CollectionsPost = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/collections/validators/create_collection_validator.ts'))['createCollectionValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['store'], + true + >; +}; +type CollectionsEditGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['showEditPage'], + false + >; +}; +type CollectionsIdPut = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/collections/validators/update_collection_validator.ts'))['updateCollectionValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['update'], + true + >; +}; +type CollectionsDeleteGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['showDeletePage'], + false + >; +}; +type CollectionsIdDelete = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/collections/validators/delete_collection_validator.ts'))['deleteCollectionValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/collections/controllers/collections_controller.ts').default['delete'], + true + >; +}; +type FaviconGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/favicons/controllers/favicons_controller.ts').default['index'], + false + >; +}; +type LinksCreateGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['showCreatePage'], + false + >; +}; +type LinksPost = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/links/validators/create_link_validator.ts'))['createLinkValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['store'], + true + >; +}; +type LinksEditGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['showEditPage'], + false + >; +}; +type LinksIdPut = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/links/validators/update_link_validator.ts'))['updateLinkValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['update'], + true + >; +}; +type LinksIdFavoritePut = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/links/validators/update_favorite_link_validator.ts'))['updateLinkFavoriteStatusValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['toggleFavorite'], + true + >; +}; +type LinksDeleteGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['showDeletePage'], + false + >; +}; +type LinksIdDelete = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/links/validators/delete_link_validator.ts'))['deleteLinkValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/links/controllers/links_controller.ts').default['delete'], + true + >; +}; +type SearchGetHead = { + request: unknown; + response: MakeTuyauResponse< + import('../app/search/controllers/search_controller.ts').default['search'], + false + >; +}; +type SharedIdGetHead = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/shared_collections/validators/shared_collection.ts'))['getSharedCollectionValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/shared_collections/controllers/shared_collections_controller.ts').default['index'], + true + >; +}; +type UserThemePost = { + request: MakeTuyauRequest< + InferInput< + (typeof import('../app/user/validators/update_theme_validator.ts'))['updateThemeValidator'] + > + >; + response: MakeTuyauResponse< + import('../app/user/controllers/theme_controller.ts').default['index'], + true + >; +}; +export interface ApiDefinition { + admin: { + $url: {}; + $get: AdminGetHead; + $head: AdminGetHead; + }; + auth: { + callback: { + $url: {}; + $get: AuthCallbackGetHead; + $head: AuthCallbackGetHead; + }; + logout: { + $url: {}; + $get: AuthLogoutGetHead; + $head: AuthLogoutGetHead; + }; + }; + dashboard: { + $url: {}; + $get: DashboardGetHead; + $head: DashboardGetHead; + }; + collections: { + create: { + $url: {}; + $get: CollectionsCreateGetHead; + $head: CollectionsCreateGetHead; + }; + $url: {}; + $post: CollectionsPost; + edit: { + $url: {}; + $get: CollectionsEditGetHead; + $head: CollectionsEditGetHead; + }; + ':id': { + $url: {}; + $put: CollectionsIdPut; + $delete: CollectionsIdDelete; + }; + delete: { + $url: {}; + $get: CollectionsDeleteGetHead; + $head: CollectionsDeleteGetHead; + }; + }; + favicon: { + $url: {}; + $get: FaviconGetHead; + $head: FaviconGetHead; + }; + links: { + create: { + $url: {}; + $get: LinksCreateGetHead; + $head: LinksCreateGetHead; + }; + $url: {}; + $post: LinksPost; + edit: { + $url: {}; + $get: LinksEditGetHead; + $head: LinksEditGetHead; + }; + ':id': { + $url: {}; + $put: LinksIdPut; + favorite: { + $url: {}; + $put: LinksIdFavoritePut; + }; + $delete: LinksIdDelete; + }; + delete: { + $url: {}; + $get: LinksDeleteGetHead; + $head: LinksDeleteGetHead; + }; + }; + search: { + $url: {}; + $get: SearchGetHead; + $head: SearchGetHead; + }; + shared: { + ':id': { + $url: {}; + $get: SharedIdGetHead; + $head: SharedIdGetHead; + }; + }; + user: { + theme: { + $url: {}; + $post: UserThemePost; + }; + }; +} +const routes = [ + { + params: [], + name: 'admin.dashboard', + path: '/admin', + method: ['GET', 'HEAD'], + types: {} as AdminGetHead, + }, + { + params: [], + name: 'auth', + path: '/auth/google', + method: ['GET', 'HEAD'], + types: {} as unknown, + }, + { + params: [], + name: 'auth.callback', + path: '/auth/callback', + method: ['GET', 'HEAD'], + types: {} as AuthCallbackGetHead, + }, + { + params: [], + name: 'auth.logout', + path: '/auth/logout', + method: ['GET', 'HEAD'], + types: {} as AuthLogoutGetHead, + }, + { + params: [], + name: 'dashboard', + path: '/dashboard', + method: ['GET', 'HEAD'], + types: {} as DashboardGetHead, + }, + { + params: [], + name: 'collection.create-form', + path: '/collections/create', + method: ['GET', 'HEAD'], + types: {} as CollectionsCreateGetHead, + }, + { + params: [], + name: 'collection.create', + path: '/collections', + method: ['POST'], + types: {} as CollectionsPost, + }, + { + params: [], + name: 'collection.edit-form', + path: '/collections/edit', + method: ['GET', 'HEAD'], + types: {} as CollectionsEditGetHead, + }, + { + params: ['id'], + name: 'collection.edit', + path: '/collections/:id', + method: ['PUT'], + types: {} as CollectionsIdPut, + }, + { + params: [], + name: 'collection.delete-form', + path: '/collections/delete', + method: ['GET', 'HEAD'], + types: {} as CollectionsDeleteGetHead, + }, + { + params: ['id'], + name: 'collection.delete', + path: '/collections/:id', + method: ['DELETE'], + types: {} as CollectionsIdDelete, + }, + { + params: [], + name: 'favicon', + path: '/favicon', + method: ['GET', 'HEAD'], + types: {} as FaviconGetHead, + }, + { + params: [], + name: 'home', + path: '/', + method: ['GET', 'HEAD'], + types: {} as unknown, + }, + { + params: [], + name: 'terms', + path: '/terms', + method: ['GET', 'HEAD'], + types: {} as unknown, + }, + { + params: [], + name: 'privacy', + path: '/privacy', + method: ['GET', 'HEAD'], + types: {} as unknown, + }, + { + params: [], + name: 'link.create-form', + path: '/links/create', + method: ['GET', 'HEAD'], + types: {} as LinksCreateGetHead, + }, + { + params: [], + name: 'link.create', + path: '/links', + method: ['POST'], + types: {} as LinksPost, + }, + { + params: [], + name: 'link.edit-form', + path: '/links/edit', + method: ['GET', 'HEAD'], + types: {} as LinksEditGetHead, + }, + { + params: ['id'], + name: 'link.edit', + path: '/links/:id', + method: ['PUT'], + types: {} as LinksIdPut, + }, + { + params: ['id'], + name: 'link.toggle-favorite', + path: '/links/:id/favorite', + method: ['PUT'], + types: {} as LinksIdFavoritePut, + }, + { + params: [], + name: 'link.delete-form', + path: '/links/delete', + method: ['GET', 'HEAD'], + types: {} as LinksDeleteGetHead, + }, + { + params: ['id'], + name: 'link.delete', + path: '/links/:id', + method: ['DELETE'], + types: {} as LinksIdDelete, + }, + { + params: [], + name: 'search', + path: '/search', + method: ['GET', 'HEAD'], + types: {} as SearchGetHead, + }, + { + params: ['id'], + name: 'shared', + path: '/shared/:id', + method: ['GET', 'HEAD'], + types: {} as SharedIdGetHead, + }, + { + params: [], + name: 'user.theme', + path: '/user/theme', + method: ['POST'], + types: {} as UserThemePost, + }, +] as const; +export const api = { + routes, + definition: {} as ApiDefinition, +}; +declare module '@tuyau/inertia/types' { + type InertiaApi = typeof api; + export interface Api extends InertiaApi {} +} diff --git a/.adonisjs/index.ts b/.adonisjs/index.ts new file mode 100644 index 0000000..d8c4226 --- /dev/null +++ b/.adonisjs/index.ts @@ -0,0 +1,3 @@ +/// + +export * from './api.js'; diff --git a/Makefile b/Makefile index 81f5df1..cc4d483 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +tuyau: + @node ace tuyau:generate + @pnpm run format + dev: @docker compose down @docker compose -f dev.compose.yml pull diff --git a/adonisrc.ts b/adonisrc.ts index a391801..1a443d8 100644 --- a/adonisrc.ts +++ b/adonisrc.ts @@ -2,29 +2,30 @@ import { defineConfig } from '@adonisjs/core/app'; export default defineConfig({ /* - |-------------------------------------------------------------------------- - | Commands - |-------------------------------------------------------------------------- - | - | List of ace commands to register from packages. The application commands - | will be scanned automatically from the "./commands" directory. - | - */ +|-------------------------------------------------------------------------- +| Commands +|-------------------------------------------------------------------------- +| +| List of ace commands to register from packages. The application commands +| will be scanned automatically from the "./commands" directory. +| +*/ commands: [ () => import('@adonisjs/core/commands'), () => import('@adonisjs/lucid/commands'), () => import('@izzyjs/route/commands'), + () => import('@tuyau/core/commands'), ], /* - |-------------------------------------------------------------------------- - | Service providers - |-------------------------------------------------------------------------- - | - | List of service providers to import and register when booting the - | application - | - */ +|-------------------------------------------------------------------------- +| Service providers +|-------------------------------------------------------------------------- +| +| List of service providers to import and register when booting the +| application +| +*/ providers: [ () => import('@adonisjs/core/providers/app_provider'), () => import('@adonisjs/core/providers/hash_provider'), @@ -45,27 +46,28 @@ export default defineConfig({ () => import('@adonisjs/ally/ally_provider'), () => import('@izzyjs/route/izzy_provider'), () => import('#providers/route_provider'), + () => import('@tuyau/core/tuyau_provider'), ], /* - |-------------------------------------------------------------------------- - | Preloads - |-------------------------------------------------------------------------- - | - | List of modules to import before starting the application. - | - */ +|-------------------------------------------------------------------------- +| Preloads +|-------------------------------------------------------------------------- +| +| List of modules to import before starting the application. +| +*/ preloads: [() => import('#start/routes'), () => import('#start/kernel')], /* - |-------------------------------------------------------------------------- - | Tests - |-------------------------------------------------------------------------- - | - | List of test suites to organize tests by their type. Feel free to remove - | and add additional suites. - | - */ +|-------------------------------------------------------------------------- +| Tests +|-------------------------------------------------------------------------- +| +| List of test suites to organize tests by their type. Feel free to remove +| and add additional suites. +| +*/ tests: { suites: [ { @@ -83,14 +85,14 @@ export default defineConfig({ }, /* - |-------------------------------------------------------------------------- - | Metafiles - |-------------------------------------------------------------------------- - | - | A collection of files you want to copy to the build folder when creating - | the production build. - | - */ +|-------------------------------------------------------------------------- +| Metafiles +|-------------------------------------------------------------------------- +| +| A collection of files you want to copy to the build folder when creating +| the production build. +| +*/ metaFiles: [ { pattern: 'resources/views/**/*.edge', diff --git a/config/tuyau.ts b/config/tuyau.ts new file mode 100644 index 0000000..e29907e --- /dev/null +++ b/config/tuyau.ts @@ -0,0 +1,7 @@ +import { defineConfig } from '@tuyau/core'; + +const tuyauConfig = defineConfig({ + codegen: {}, +}); + +export default tuyauConfig; diff --git a/package.json b/package.json index b24092d..f5e36ba 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,12 @@ "check": "pnpm run lint && pnpm run typecheck", "prepare": "husky", "release": "release-it", - "generate-icons": "pwa-assets-generator" + "generate-icons": "pwa-assets-generator", + "tuyau": "node ace tuyau:generate" }, "imports": { "#admin/*": "./app/admin/*.js", + "#adonis/api": "./.adonisjs/api.ts", "#auth/*": "./app/auth/*.js", "#collections/*": "./app/collections/*.js", "#core/*": "./app/core/*.js", @@ -31,6 +33,7 @@ "#providers/*": "./providers/*.js", "#database/*": "./database/*.js", "#tests/*": "./tests/*.js", + "#shared/*": "./shared/*.js", "#start/*": "./start/*.js", "#config/*": "./config/*.js" }, @@ -44,6 +47,7 @@ "@japa/plugin-adonisjs": "^4.0.0", "@japa/runner": "^4.3.0", "@swc/core": "^1.13.3", + "@tuyau/utils": "^0.0.9", "@types/luxon": "^3.7.1", "@types/node": "^24.2.0", "@types/react": "^19.1.9", @@ -76,9 +80,13 @@ "@adonisjs/static": "^1.1.1", "@adonisjs/vite": "^4.0.0", "@inertiajs/react": "^2.0.17", + "@izzyjs/route": "^1.2.0", "@mantine/core": "^8.2.3", "@mantine/hooks": "^8.2.3", "@mantine/spotlight": "^8.2.3", + "@tuyau/client": "^0.2.10", + "@tuyau/core": "^0.4.2", + "@tuyau/inertia": "^0.0.15", "@vinejs/vine": "^3.0.1", "@vitejs/plugin-react-oxc": "^0.3.0", "bentocache": "^1.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10681ef..bb0e9e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: '@inertiajs/react': specifier: ^2.0.17 version: 2.0.17(react@19.1.1) + '@izzyjs/route': + specifier: ^1.2.0 + version: 1.2.0(@adonisjs/core@6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0))(edge.js@6.3.0) '@mantine/core': specifier: ^8.2.3 version: 8.2.3(@mantine/hooks@8.2.3(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -53,6 +56,15 @@ importers: '@mantine/spotlight': specifier: ^8.2.3 version: 8.2.3(@mantine/core@8.2.3(@mantine/hooks@8.2.3(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.3(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tuyau/client': + specifier: ^0.2.10 + version: 0.2.10 + '@tuyau/core': + specifier: ^0.4.2 + version: 0.4.2(@adonisjs/core@6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0)) + '@tuyau/inertia': + specifier: ^0.0.15 + version: 0.0.15(@inertiajs/react@2.0.17(react@19.1.1))(@tuyau/client@0.2.10)(react@19.1.1) '@vinejs/vine': specifier: ^3.0.1 version: 3.0.1 @@ -135,6 +147,9 @@ importers: '@swc/core': specifier: ^1.13.3 version: 1.13.3 + '@tuyau/utils': + specifier: ^0.0.9 + version: 0.0.9 '@types/luxon': specifier: ^3.7.1 version: 3.7.1 @@ -1336,6 +1351,21 @@ packages: '@types/node': optional: true + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@izzyjs/route@1.2.0': + resolution: {integrity: sha512-GOc2tf4xNrFMZK3SGK7XSweUfxNskJX6vrdhx9M8mDOgkRONnpuIzaVM/N7AgRjCft8f97d5t2oOXyk5Sq92hA==} + engines: {node: '>=20.6.0'} + peerDependencies: + '@adonisjs/core': ^6.2.0 + edge.js: ^6.0.2 + '@japa/assert@4.1.1': resolution: {integrity: sha512-Hhv8A/gkd1b4Xa2Jti4XJ3FsP/pJ8ZXAWwvgYVKZQNcl79lqIHsMjMrL3e475pbf8lybB++FvXi4ruoz2SsiBA==} engines: {node: '>=18.16.0'} @@ -1850,6 +1880,9 @@ packages: '@ts-morph/common@0.24.0': resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==} + '@ts-morph/common@0.27.0': + resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -1862,9 +1895,39 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tuyau/client@0.2.10': + resolution: {integrity: sha512-sVp4JX9uvvV3BSPgZNogJWYp0oleqi2Zy0gyBLFjFz6KWtTVPqNKBA74n0UsnaeZB8y3xxXkYSeWf19z+7yhmg==} + + '@tuyau/core@0.4.2': + resolution: {integrity: sha512-thobRIBW+fQGt9gXQ9zdvhVUyZE5qLZorBeDqxJ2SF07igZAqm0+fyvMTQbOH/vIcpwK2ob9ev3bBhqW4E2hWw==} + engines: {node: '>=20.6.0'} + peerDependencies: + '@adonisjs/core': ^6.2.0 + + '@tuyau/inertia@0.0.15': + resolution: {integrity: sha512-1pJCqeGOUPYvdR1FuvyvpGci0n69QJmeKAy7bJx+rtg8cxGnGCh+fa0vYp/o2LJ8CEOUBT7bDZya9GzLx82Mwg==} + peerDependencies: + '@inertiajs/react': ^1.0.0 || ^2.0.0 + '@inertiajs/vue3': ^1.0.0 || ^2.0.0 + '@tuyau/client': 0.2.10 + react: ^18.0.0 || ^19.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + '@inertiajs/react': + optional: true + '@inertiajs/vue3': + optional: true + react: + optional: true + vue: + optional: true + '@tuyau/utils@0.0.7': resolution: {integrity: sha512-Y1JgQoshbcxEwmajeWpJibBmoBlGuEq38ICKmWQ5dS+ESqY0J0757rWcHAQgiB74J1vf/DxHkt8veBRSKTAjJQ==} + '@tuyau/utils@0.0.9': + resolution: {integrity: sha512-Uirv4CH7d7US5atdKda3mPmg2K0PsYQx2Gab7Xe/PSGdlq/fp4Ia1IWYKRL2Lfx36QAzEuHqrk4WmDxmw1sTVw==} + '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} @@ -3771,6 +3834,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3876,6 +3943,9 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + object-to-formdata@4.5.1: + resolution: {integrity: sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw==} + object.assign@4.1.7: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} @@ -4892,6 +4962,9 @@ packages: ts-morph@23.0.0: resolution: {integrity: sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==} + ts-morph@26.0.0: + resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} + ts-node-maintained@10.9.6: resolution: {integrity: sha512-m/1ZCksNnIofWjmY5/K+6y8oia05Y/5+vMWTvuFzrr6UGRV7ImrLMyYAB06cHlwBW5/NuYeZoh44mAOGNRNxZA==} hasBin: true @@ -6655,6 +6728,17 @@ snapshots: optionalDependencies: '@types/node': 24.2.0 + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@izzyjs/route@1.2.0(@adonisjs/core@6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0))(edge.js@6.3.0)': + dependencies: + '@adonisjs/core': 6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0) + edge.js: 6.3.0 + '@japa/assert@4.1.1(@japa/runner@4.3.0)': dependencies: '@japa/runner': 4.3.0 @@ -7177,6 +7261,12 @@ snapshots: mkdirp: 3.0.1 path-browserify: 1.0.1 + '@ts-morph/common@0.27.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 10.0.3 + path-browserify: 1.0.1 + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -7185,8 +7275,29 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tuyau/client@0.2.10': + dependencies: + '@tuyau/utils': 0.0.9 + ky: 1.8.2 + object-to-formdata: 4.5.1 + + '@tuyau/core@0.4.2(@adonisjs/core@6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0))': + dependencies: + '@adonisjs/core': 6.19.0(@adonisjs/assembler@7.8.2(typescript@5.9.2))(@vinejs/vine@3.0.1)(edge.js@6.3.0) + '@tuyau/utils': 0.0.9 + ts-morph: 26.0.0 + + '@tuyau/inertia@0.0.15(@inertiajs/react@2.0.17(react@19.1.1))(@tuyau/client@0.2.10)(react@19.1.1)': + dependencies: + '@tuyau/client': 0.2.10 + optionalDependencies: + '@inertiajs/react': 2.0.17(react@19.1.1) + react: 19.1.1 + '@tuyau/utils@0.0.7': {} + '@tuyau/utils@0.0.9': {} + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 @@ -9068,6 +9179,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -9152,6 +9267,8 @@ snapshots: object-keys@1.1.1: {} + object-to-formdata@4.5.1: {} + object.assign@4.1.7: dependencies: call-bind: 1.0.8 @@ -10243,6 +10360,11 @@ snapshots: '@ts-morph/common': 0.24.0 code-block-writer: 13.0.3 + ts-morph@26.0.0: + dependencies: + '@ts-morph/common': 0.27.0 + code-block-writer: 13.0.3 + ts-node-maintained@10.9.6(@swc/core@1.13.3)(@types/node@24.2.0)(typescript@5.9.2): dependencies: '@cspotcode/source-map-support': 0.8.1 diff --git a/shared/types/index.ts b/shared/types/index.ts new file mode 100644 index 0000000..7a3a7a4 --- /dev/null +++ b/shared/types/index.ts @@ -0,0 +1,3 @@ +import { api } from '#adonis/api'; + +export type ApiRouteName = (typeof api.routes)[number]['name'];