chore: Tina kentzen du eta pnpm erabiltzen du

This commit is contained in:
txarli committed 2025-11-03 10:33:34 +01:00
1 parent 448a37172e
commit 141e78931e
14 files changed
+3486 -20100

No files matched your search

+83
View File
@@ -0,0 +1,83 @@
{
"$ref": "#/definitions/posts",
"definitions": {
"posts": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"added": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "integer",
"format": "unix-time"
}
]
}
]
},
"updated": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "integer",
"format": "unix-time"
}
]
}
]
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"$schema": {
"type": "string"
}
},
"required": [
"title",
"slug",
"description",
"added",
"tags"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
+1
View File
@@ -0,0 +1 @@
export default new Map();
+1
View File
@@ -0,0 +1 @@
export default new Map();
+207
View File
@@ -0,0 +1,207 @@
declare module 'astro:content' {
export interface RenderResult {
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
headings: import('astro').MarkdownHeading[];
remarkPluginFrontmatter: Record<string, any>;
}
interface Render {
'.md': Promise<RenderResult>;
}
export interface RenderedContent {
html: string;
metadata?: {
imagePaths: Array<string>;
[key: string]: unknown;
};
}
}
declare module 'astro:content' {
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
export type CollectionKey = keyof AnyEntryMap;
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
export type ContentCollectionKey = keyof ContentEntryMap;
export type DataCollectionKey = keyof DataEntryMap;
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
ContentEntryMap[C]
>['slug'];
export type ReferenceDataEntry<
C extends CollectionKey,
E extends keyof DataEntryMap[C] = string,
> = {
collection: C;
id: E;
};
export type ReferenceContentEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}) = string,
> = {
collection: C;
slug: E;
};
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
collection: C;
id: string;
};
/** @deprecated Use `getEntry` instead. */
export function getEntryBySlug<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
// Note that this has to accept a regular string too, for SSR
entrySlug: E,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
/** @deprecated Use `getEntry` instead. */
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
collection: C,
entryId: E,
): Promise<CollectionEntry<C>>;
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
collection: C,
filter?: (entry: CollectionEntry<C>) => entry is E,
): Promise<E[]>;
export function getCollection<C extends keyof AnyEntryMap>(
collection: C,
filter?: (entry: CollectionEntry<C>) => unknown,
): Promise<CollectionEntry<C>[]>;
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
collection: C,
filter?: LiveLoaderCollectionFilterType<C>,
): Promise<
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
>;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
entry: ReferenceContentEntry<C, E>,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(
entry: ReferenceDataEntry<C, E>,
): E extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
slug: E,
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(
collection: C,
id: E,
): E extends keyof DataEntryMap[C]
? string extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]> | undefined
: Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
collection: C,
filter: string | LiveLoaderEntryFilterType<C>,
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
/** Resolve an array of entry references from the same collection */
export function getEntries<C extends keyof ContentEntryMap>(
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
): Promise<CollectionEntry<C>[]>;
export function getEntries<C extends keyof DataEntryMap>(
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
): Promise<CollectionEntry<C>[]>;
export function render<C extends keyof AnyEntryMap>(
entry: AnyEntryMap[C][string],
): Promise<RenderResult>;
export function reference<C extends keyof AnyEntryMap>(
collection: C,
): import('astro/zod').ZodEffects<
import('astro/zod').ZodString,
C extends keyof ContentEntryMap
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
>;
// Allow generic `string` to avoid excessive type errors in the config
// if `dev` is not running to update as you edit.
// Invalid collection names will be caught at build time.
export function reference<C extends string>(
collection: C,
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
>;
type ContentEntryMap = {
};
type DataEntryMap = {
"posts": Record<string, {
id: string;
body?: string;
collection: "posts";
data: InferEntrySchema<"posts">;
rendered?: RenderedContent;
filePath?: string;
}>;
};
type AnyEntryMap = ContentEntryMap & DataEntryMap;
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
infer TData,
infer TEntryFilter,
infer TCollectionFilter,
infer TError
>
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
: { data: never; entryFilter: never; collectionFilter: never; error: never };
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
LiveContentConfig['collections'][C]['schema'] extends undefined
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
: import('astro/zod').infer<
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
>;
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
LiveContentConfig['collections'][C]['loader']
>;
export type ContentConfig = typeof import("../src/content.config.js");
export type LiveContentConfig = never;
}
+1
View File
@@ -0,0 +1 @@
[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.15.3","content-config-digest","f756207bb1b45114","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://blahg.netlify.app/\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"material-theme-darker\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[]},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false},\"legacy\":{\"collections\":false}}","posts",["Map",11,12,31,32],"hello-world",{"id":11,"data":13,"body":19,"filePath":20,"digest":21,"rendered":22},{"title":14,"slug":11,"description":15,"added":16,"tags":17},"Hello, world!","This is an example blog!","May 01 2024",[18],"personal","This is an example blog post!","posts/hello-world.md","a5a0f2f9dc8da02e",{"html":23,"metadata":24},"\u003Cp>This is an example blog post!\u003C/p>",{"headings":25,"localImagePaths":26,"remoteImagePaths":27,"frontmatter":28,"imagePaths":30},[],[],[],{"title":14,"slug":11,"description":15,"tags":29,"added":16},[18],[],"markdown",{"id":31,"data":33,"body":39,"filePath":40,"digest":41,"rendered":42},{"title":34,"slug":31,"description":35,"added":36,"tags":37},"Markdown Example","Check out how markdown is rendered!","May 09 2024",[38],"technical","This is an example blog post!\n\n# Heading 1\n\nThis is an example lil thingy wow look at me!\n\n## Heading 2\n\n### Heading 3\n\n#### Heading 4\n\n##### Heading 5\n\n###### Heading 6\n\nI'm baby tumblr deep v franzen [umami hammock](https://google.com) scenester retro VHS, pop-up truffaut tacos polaroid gochujang. Jean ugh _vexillologist snackwave keytar williamsburg bitters pinterest_. Photo booth schlitz quinoa tbh edison bulb vexillologist occupy single-origin dreamcatcher. **Chartreuse meggings gochujang synth.** Narwhal green juice snackwave thundercats kickstarter XOXO deep v.\n\n1. numbered\n2. list\n3. of\n4. items\n\nHello there, welcome to my list.\n\n- list\n- of\n- items\n - nested\n - list\n- wow\n\n## Hello, babies, I think that you need to understand what a long line length is\n\nV franzen umami hammock scenester retro VHS, pop-up truffaut tacos polaroid heirloom gochujang.\n\n- [x] hello\n- [ ] these\n- [x] are\n- [ ] tasks\n\n**bold** _italic_\n**_bold and italic_**\n\n```js\n// This is an example of some React\n\nuseEffect(() => {\n\tlet isCurrent = true;\n\n\tif (isCurrent === true) {\n\t\tfetch(\"...\");\n\t}\n\n\treturn () => {\n\t\tisCurrent = false;\n\t};\n}, []);\n```\n\nLanguage-less:\n\n```\nuseEffect(() => { // wow\n let isCurrent = true;\n\n if (isCurrent === true) {\n \tfetch('...')\n }\n\n return () => {\n \tisCurrent = false;\n }\n}, [])\n```\n\nA horizontal line:\n\n---\n\nSome inline `code` between normal text\n\n> A blockquote, lorem ipsum dolor\n\nJust some normal text, wow.\n\n---\n\n| Example table | Example things |\n| ------------- | -------------- |\n| What | how |\n| Why | when |\n\nOkay, that's it! Good luck! Write more! Follow your dreams!","posts/markdown-example.md","b43f932b64a68879",{"html":43,"metadata":44},"\u003Cp>This is an example blog post!\u003C/p>\n\u003Ch1 id=\"heading-1\">Heading 1\u003C/h1>\n\u003Cp>This is an example lil thingy wow look at me!\u003C/p>\n\u003Ch2 id=\"heading-2\">Heading 2\u003C/h2>\n\u003Ch3 id=\"heading-3\">Heading 3\u003C/h3>\n\u003Ch4 id=\"heading-4\">Heading 4\u003C/h4>\n\u003Ch5 id=\"heading-5\">Heading 5\u003C/h5>\n\u003Ch6 id=\"heading-6\">Heading 6\u003C/h6>\n\u003Cp>I’m baby tumblr deep v franzen \u003Ca href=\"https://google.com\">umami hammock\u003C/a> scenester retro VHS, pop-up truffaut tacos polaroid gochujang. Jean ugh \u003Cem>vexillologist snackwave keytar williamsburg bitters pinterest\u003C/em>. Photo booth schlitz quinoa tbh edison bulb vexillologist occupy single-origin dreamLine truncated
+5
View File
@@ -0,0 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1762162348969
}
}
+2
View File
@@ -0,0 +1,2 @@
/// <reference types="astro/client" />
/// <reference path="content.d.ts" />
-19959
View File
File diff suppressed because it is too large. Load diff
+2 -7
View File
@@ -3,9 +3,8 @@
"version": "0.0.6",
"private": true,
"scripts": {
"dev": "npx tinacms dev -c \"astro dev\"",
"start": "astro dev",
"build": "tinacms build && astro build",
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
@@ -15,9 +14,5 @@
"astro": "^5.13.6",
"prettier": "^3.3.3",
"prettier-plugin-astro": "^0.14.1"
},
"dependencies": {
"@tinacms/cli": "^1.10.2",
"tinacms": "^2.8.2"
}
}
+3181
View File
File diff suppressed because it is too large. Load diff
+3
View File
@@ -0,0 +1,3 @@
onlyBuiltDependencies:
- esbuild
- sharp
-1
View File
@@ -1 +0,0 @@
__generated__
-132
View File
@@ -1,132 +0,0 @@
import { defineConfig } from "tinacms";
// Your hosting provider likely exposes this as an environment variable
const branch = process.env.HEAD || "main";
export default defineConfig({
branch,
clientId: process.env.TINACLIENTID, // Get this from tina.io
token: process.env.TINATOKEN, // Get this from tina.io
build: {
outputFolder: "admin",
publicFolder: "public",
},
media: {
tina: {
mediaRoot: "assets",
publicFolder: "public",
},
},
schema: {
collections: [
{
name: "post",
label: "Posts",
path: "posts",
defaultItem: () => ({
title: "New Post",
added: new Date(),
tags: [],
}),
ui: {
dateFormat: "MMM DD YYYY",
filename: {
readonly: false,
slugify: (values) => {
return values?.slug?.toLowerCase().replace(/ /g, "-");
},
},
},
fields: [
{
name: "title",
label: "Title",
type: "string",
isTitle: true,
required: true,
},
{
label: "Slug",
name: "slug",
type: "string",
required: true,
},
{
label: "Description",
name: "description",
type: "string",
required: true,
},
{
label: "Tags",
name: "tags",
type: "string",
list: true,
options: [
{
value: "technical",
label: "Technical",
},
{
value: "advice",
label: "Advice",
},
{
value: "events",
label: "Events",
},
{
value: "learning",
label: "Learning",
},
{
value: "meta",
label: "Meta",
},
{
value: "work",
label: "Work",
},
{
value: "personal",
label: "Personal",
},
{
value: "projects",
label: "Projects",
},
],
},
{
label: "Added",
name: "added",
type: "datetime",
dateFormat: "MMM DD YYYY",
required: true,
},
{
label: "Updated",
name: "updated",
type: "datetime",
dateFormat: "MMM DD YYYY",
},
{
type: "rich-text",
name: "body",
label: "Body",
isBody: true,
},
],
},
],
},
search: {
tina: {
indexerToken: process.env.TINASEARCH,
stopwordLanguages: ["eng"],
},
indexBatchSize: 50,
maxSearchIndexFieldLength: 100,
},
});
-1
View File
@@ -1 +0,0 @@
{"schema":{"version":{"fullVersion":"1.6.1","major":"1","minor":"6","patch":"1"},"meta":{"flags":["experimentalData"]},"collections":[{"name":"post","label":"Posts","path":"posts","ui":{"dateFormat":"MMM DD YYYY","filename":{"readonly":false}},"fields":[{"name":"title","label":"Title","type":"string","isTitle":true,"required":true,"namespace":["post","title"],"searchable":true,"uid":false},{"label":"Slug","name":"slug","type":"string","required":true,"namespace":["post","slug"],"searchable":true,"uid":false},{"label":"Description","name":"description","type":"string","required":true,"namespace":["post","description"],"searchable":true,"uid":false},{"label":"Tags","name":"tags","type":"string","list":true,"options":[{"value":"technical","label":"Technical"},{"value":"advice","label":"Advice"},{"value":"events","label":"Events"},{"value":"learning","label":"Learning"},{"value":"meta","label":"Meta"},{"value":"work","label":"Work"},{"value":"personal","label":"Personal"},{"value":"projects","label":"Projects"}],"namespace":["post","tags"],"searchable":true,"uid":false},{"label":"Added","name":"added","type":"datetime","dateFormat":"MMM DD YYYY","required":true,"namespace":["post","added"],"searchable":true,"uid":false},{"label":"Updated","name":"updated","type":"datetime","dateFormat":"MMM DD YYYY","namespace":["post","updated"],"searchable":true,"uid":false},{"type":"rich-text","name":"body","label":"Body","isBody":true,"namespace":["post","body"],"searchable":true,"parser":{"type":"markdown"},"uid":false}],"namespace":["post"]}],"config":{"media":{"tina":{"publicFolder":"public","mediaRoot":"assets"}}}},"lookup":{"DocumentConnection":{"type":"DocumentConnection","resolveType":"multiCollectionDocumentList","collections":["post"]},"Node":{"type":"Node","resolveType":"nodeDocument"},"DocumentNode":{"type":"DocumentNode","resolveType":"multiCollectionDocument","createDocument":"create","updateDocument":"update"},"Post":{"type":"Post","resolveType":"collectionDocument","collection":"post","createPost":"create","updatePost":"update"},"PostConnection":{"type":"PostConnection","resolveType":"collectionDocumentList","collection":"post"}},"graphql":{"kind":"Document","definitions":[{"kind":"ScalarTypeDefinition","name":{"kind":"Name","value":"Reference"},"description":{"kind":"StringValue","value":"References another document, used as a foreign key"},"directives":[]},{"kind":"ScalarTypeDefinition","name":{"kind":"Name","value":"JSON"},"description":{"kind":"StringValue","value":""},"directives":[]},{"kind":"ObjectTypeDefinition","interfaces":[],"directives":[],"name":{"kind":"Name","value":"SystemInfo"},"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"filename"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"title"},"arguments":[],"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"basename"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"hasReferences"},"arguments":[],"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"breadcrumbs"},"arguments":[{"kind":"InputValueDefinition","name":{"kind":"Name","value":"excludeExtension"},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}],"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"path"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"relativePath"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"extension"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"template"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"collection"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Collection"}}}}]},{"kind":"ObjectTypeDefinition","interfaces":[],"directives":[],"name":{"kind":"Name","value":"Folder"},"fields":[{"kind":"FieldDefinition","name":{"kind":"Name","value":"name"},"arguments":[],"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"FieldDefinition","name":{"kind":"Name","value":"path"},"arguments":Line truncated