Consolidate Lit repositories: figma-to-lit, figma_lit_example, lit-3d-piano, lit-calculator, lit-code-editor, lit-draggable-dom, lit-file-based-routing, lit-force-graph, lit-html-editor, lit-html-table, lit-modules, lit-native, lit-node-editor, lit-sheet-music, lit-starter-ts, lit-vscode-extension, lit-wmr, vite-lit-capacitor, vite-lit-element-starter, vite-rxdb-lit

This commit is contained in:
2026-05-16 22:17:12 -07:00
parent 4dc3c8a3ff
commit 95667e3038
527 changed files with 63872 additions and 54 deletions
+73
View File
@@ -0,0 +1,73 @@
import { RxCollection, RxDocument, RxJsonSchema } from "rxdb";
import type { TopLevelProperty } from "rxdb/dist/types/types";
export interface Base {
id: string;
[key: string]: any;
}
type BaseMethods = {};
type BaseStatics = {};
export type BaseCollection<
T extends Base,
M extends BaseMethods = BaseMethods,
C extends BaseStatics = BaseStatics
> = RxCollection<T, M, C>;
export type BaseDoc<T extends Base> = RxDocument<T, BaseMethods>;
export interface SchemaOptions {
title: string;
description?: string;
version?: number;
keyCompression?: boolean;
properties: {
[key: string]: TopLevelProperty;
};
}
export function buildSchema<T extends Base>(
options: SchemaOptions
): RxJsonSchema<T> {
return {
title: options.title,
description: options?.description ?? options.title,
version: options?.version ?? 0,
keyCompression: options?.keyCompression ?? true,
type: "object",
// @ts-ignore
properties: {
id: {
type: "string",
primary: true,
},
...options.properties,
},
required: [
"id",
...Object.entries(options.properties)
.filter((n) => {
const [_, value] = n;
return value.required;
})
.map((n) => {
const [key, _] = n;
return key;
}),
],
};
}
const _methods: BaseMethods = {};
const _statics: BaseStatics = {};
export function createBase<T extends Base>(options: SchemaOptions) {
return {
schema: buildSchema<T>(options),
methods: _methods,
statics: _statics,
};
}
+54
View File
@@ -0,0 +1,54 @@
import "@babel/polyfill";
import {
addRxPlugin,
createRxDatabase,
RxDatabase,
RxDocument,
RxQuery,
} from "rxdb";
// @ts-ignore
import * as idb from "pouchdb-adapter-idb";
import { TemplateResult } from "lit";
import { futureBuilder } from "../components/future-builder";
import { Todo, todosSchema } from "./todos";
import { Base, BaseCollection } from "./base";
import { DEFAULT_LOADING } from "../components/loading";
const DATABASE_NAME = "todos" + "db";
addRxPlugin(idb);
export type Schema = {
todos: BaseCollection<Todo>;
};
export var db: RxDatabase<Schema>;
async function setupDB() {
if (db) return db;
db = await createRxDatabase<Schema>({
name: DATABASE_NAME,
adapter: "idb",
});
await db.addCollections({
todos: todosSchema,
});
return db;
}
export const dbProvider = (
builder: (db: RxDatabase<Schema>) => TemplateResult,
loading: TemplateResult = DEFAULT_LOADING
) => {
return futureBuilder(setupDB(), (res) => builder(res), loading);
};
export const queryBuilder = <T extends Base>(
query: RxQuery<any>,
builder: (result: RxDocument<T> | RxDocument<T>[]) => TemplateResult,
loading: TemplateResult = DEFAULT_LOADING
) => {
return futureBuilder(query.exec(), (res) => builder(res), loading);
};
+14
View File
@@ -0,0 +1,14 @@
import { Base, createBase } from "./base";
export interface Todo extends Base {
title: string;
}
export const todosSchema = createBase<Todo>({
title: "todos",
properties: {
title: {
type: "string",
},
},
});