chore: add tuyau

This commit is contained in:
Sonny
2025-08-06 19:09:22 +02:00
parent 216c404b16
commit 8b176e3d0e
8 changed files with 665 additions and 40 deletions

476
.adonisjs/api.ts Normal file
View File

@@ -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 {}
}

3
.adonisjs/index.ts Normal file
View File

@@ -0,0 +1,3 @@
/// <reference path="../adonisrc.ts" />
export * from './api.js';

View File

@@ -1,3 +1,7 @@
tuyau:
@node ace tuyau:generate
@pnpm run format
dev:
@docker compose down
@docker compose -f dev.compose.yml pull

View File

@@ -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',

7
config/tuyau.ts Normal file
View File

@@ -0,0 +1,7 @@
import { defineConfig } from '@tuyau/core';
const tuyauConfig = defineConfig({
codegen: {},
});
export default tuyauConfig;

View File

@@ -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",

122
pnpm-lock.yaml generated
View File

@@ -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

3
shared/types/index.ts Normal file
View File

@@ -0,0 +1,3 @@
import { api } from '#adonis/api';
export type ApiRouteName = (typeof api.routes)[number]['name'];