0.0.9
Publish npm package / publish (push) Failing after 16s

This commit is contained in:
2026-10-08 09:39:38 +02:00
parent 8e3abca9d7
commit 6afe1f7b67
25 changed files with 340 additions and 170 deletions
@@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example
@@ -0,0 +1,83 @@
<script setup lang="ts">
import { gsap } from "gsap"
import { Flip } from "gsap/Flip"
import { createRouter, type Todo } from "@<@var(context.project.name)>/rpc"
gsap.registerPlugin(Flip)
const router = createRouter("http://127.0.0.1:8080")
// Changes made elsewhere (another tab, the mobile app) show up within this interval.
const syncIntervalMs = 2000
const todos = ref<Todo[]>([])
const offline = ref(false)
const todoToCreateTask = ref("")
// Like the mobile app: rows spring into their new place when the list re-sorts, new rows fade in.
const showTodos = async (next: Todo[]) => {
const rows = Flip.getState(".todo-row")
todos.value = next
await nextTick()
Flip.from(rows, {
targets: ".todo-row",
duration: 0.5,
ease: "back.out(1.4)",
onEnter: (entering) => gsap.fromTo(entering, { opacity: 0 }, { opacity: 1, duration: 0.3 }),
})
}
const fetchTodos = () => {
router.todos.listTodos({}).then((r) => {
offline.value = false
// Polling returns the same list most of the time; skip re-rendering it.
if (JSON.stringify(todos.value) !== JSON.stringify(r.todos)) showTodos(r.todos)
}).catch(() => offline.value = true)
}
let interval: ReturnType<typeof setInterval> | undefined
onMounted(() => {
fetchTodos()
interval = setInterval(fetchTodos, syncIntervalMs)
})
onUnmounted(() => clearInterval(interval))
const setTodoDone = (todo: Todo, event: Event) => {
const done = (event.target as HTMLInputElement).checked
router.todos.updateTodo({ todo: { id: todo.id, task: todo.task, done } }).then(fetchTodos, () => offline.value = true)
}
const deleteTodo = async (todo: Todo, event: Event) => {
await gsap.to((event.currentTarget as HTMLElement).closest(".todo-row"), { opacity: 0, duration: 0.3 })
router.todos.deleteTodo({ todo: { id: todo.id } }).then(fetchTodos, () => offline.value = true)
}
const createTodo = () => {
const task = todoToCreateTask.value.trim()
if (!task) return
router.todos.createTodo({ todo: { id: crypto.randomUUID(), task } }).then(() => {
todoToCreateTask.value = ""
fetchTodos()
}, () => offline.value = true)
}
</script>
<template>
<main>
<h1>Create Todo</h1>
<p v-if="offline" class="offline">Can't reach the API, retrying…</p>
<form @submit.prevent="createTodo">
<input v-model="todoToCreateTask" type="text" placeholder="What needs to be done?">
<button>create Todo</button>
</form>
<div v-for="todo in todos" :key="todo.id" class="todo-row" :data-flip-id="todo.id">
<span>{{ todo.task }}</span>
<input type="checkbox" :checked="todo.done" @change="setTodoDone(todo, $event)">
<button @click="deleteTodo(todo, $event)">delete</button>
</div>
</main>
</template>
<style>
main { max-width: 32rem; margin: 2rem auto; font-family: system-ui, sans-serif; }
form, .todo-row { display: flex; gap: 0.75rem; align-items: center; margin-bottom: 0.75rem; }
input[type="text"] { flex: 1; padding: 0.5rem; border: 1px solid #8e8e93; border-radius: 8px; }
.todo-row span { flex: 1; }
.offline { color: #d32f2f; }
</style>
@@ -0,0 +1,7 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: '2025-07-15',
devtools: { enabled: true },
// Same port as the other web templates, which the API allows via CORS.
devServer: { port: 5173 },
})
@@ -0,0 +1,24 @@
{
"name": "web",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare",
"check": "nuxt typecheck"
},
"dependencies": {
"@<@var(context.project.name)>/rpc": "workspace:*",
"gsap": "^3.15.0",
"nuxt": "^4.6.0",
"vue": "^3.5.43",
"vue-router": "^5.3.1"
},
"devDependencies": {
"typescript": "^6.0.3",
"vue-tsc": "^3.3.12"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,2 @@
User-Agent: *
Disallow:
@@ -0,0 +1,18 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"files": [],
"references": [
{
"path": "./.nuxt/tsconfig.app.json"
},
{
"path": "./.nuxt/tsconfig.server.json"
},
{
"path": "./.nuxt/tsconfig.shared.json"
},
{
"path": "./.nuxt/tsconfig.node.json"
}
]
}