Skip to content

Instantly share code, notes, and snippets.

View innocenzi's full-sized avatar
🌸

Enzo Innocenzi innocenzi

🌸
View GitHub Profile
@innocenzi
innocenzi / migration.php
Last active September 28, 2023 22:35
Querying direct and indirect relations in a many-to-many table
<?php
Schema::create('media', function (Blueprint $table) {
$table->id();
$table->string('native_title')->index();
// ...
$table->timestamp('published_at');
$table->timestamps();
});
<?php
/**
* @template T
* @param T $target
* @return T
*/
function memoize($target) {
static $memo = new \WeakMap();
@innocenzi
innocenzi / app.ts
Last active January 24, 2023 09:52
Inertia reload plugin PoC
import { createApp, h } from 'vue'
import { createInertiaApp, router } from '@inertiajs/vue3'
// This virtual import adds the HMR code to the client
import 'virtual:inertia/reload'
// This persists the router to `window`, can't think of another way unfortunately
window.inertia = { router }
// Alternatively you could just have the "client code" here, but the packagability would be worse
createInertiaApp({
@innocenzi
innocenzi / RoutesTest.php
Created September 20, 2022 15:35
No closure route assertion
<?php
use Illuminate\Routing\Route;
use Illuminate\Routing\Router;
test('basic feature test', function () {
$routes = collect(app(Router::class)->getRoutes()->getRoutes())
->filter(fn (Route $route) => ! isVendorRoute($route));
foreach ($routes as $route) {
{
"description": "The settings in this file are persisted server-side. This file is generated automatically. Editing it is not recommended. Modify SettingsToPersist.json to specify which settings are persisted.",
"files": [
{
"name": "Game.cfg",
"sections": [
{
"name": "Accessibility",
"settings": [
{
<script setup lang="ts">
import { useNotifications } from '~/ts/notifications/notifications'
const { notifications, dismiss } = useNotifications()
</script>
<template>
<div aria-live="assertive" class="flex fixed inset-0 z-40 items-end py-6 px-4 pointer-events-none sm:items-start sm:p-6">
<div class="flex flex-col items-center space-y-4 w-full sm:items-end">
<TransitionGroup
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;
use Tightenco\Ziggy\Ziggy;
class GenerateRoutesCommand extends Command
{
@innocenzi
innocenzi / inertia-layout.ts
Last active October 27, 2022 07:34
Laravel domain-driven front-end with Vite
import type { Plugin } from 'vite'
const PLUGIN_NAME = 'vite:inertia:layout'
const TEMPLATE_LAYOUT_REGEX = /<template +layout(?: *= *['"](?:(?:(\w+):)?(\w+))['"] *)?>/
export default (): Plugin => ({
name: PLUGIN_NAME,
transform: (code: string) => {
if (!TEMPLATE_LAYOUT_REGEX.test(code)) {
return
import { VisitOptions } from '../router'
import { useForm as useSlimeForm, UseFormBuilder, UseFormRule } from 'slimeform'
import { reactive, readonly, ref, UnwrapNestedRefs } from 'vue'
import { router } from '../router'
type SubmitFunctionParameters = Omit<VisitOptions, 'data'>
interface FormOptions<FormT extends {}> extends Omit<VisitOptions, 'data'> {
timeout?: number
/** Target URL. */
@innocenzi
innocenzi / some-page.vue
Last active June 24, 2022 13:14
Dealing with cached visits with Inertia
<script setup lang="ts">
import { useBackForward } from '@/scripts/use-back-forward'
const { reloadOnBackForward } = useBackForward()
// When the page component is loaded, if it's a visit made with the "back" or "forward"
// browser functionality, the page will reload. You can optionally pass options to Inertia.
reloadOnBackForward({
only: ['quotations'],
})