├── .env ├── .gitignore ├── LICENSE ├── README.md ├── dbschema ├── default.esdl ├── edgeql-js │ ├── __spec__.d.ts │ ├── __spec__.mjs │ ├── cardinality.d.ts │ ├── cardinality.mjs │ ├── cast.d.ts │ ├── cast.mjs │ ├── castMaps.d.ts │ ├── castMaps.mjs │ ├── casting.d.ts │ ├── casting.mjs │ ├── collections.d.ts │ ├── collections.mjs │ ├── config.json │ ├── detached.d.ts │ ├── detached.mjs │ ├── external.d.ts │ ├── external.mjs │ ├── for.d.ts │ ├── for.mjs │ ├── funcops.d.ts │ ├── funcops.mjs │ ├── globals.d.ts │ ├── globals.mjs │ ├── group.d.ts │ ├── group.mjs │ ├── hydrate.d.ts │ ├── hydrate.mjs │ ├── imports.d.ts │ ├── imports.mjs │ ├── index.d.ts │ ├── index.mjs │ ├── insert.d.ts │ ├── insert.mjs │ ├── json.d.ts │ ├── json.mjs │ ├── literal.d.ts │ ├── literal.mjs │ ├── modules │ │ ├── cal.d.ts │ │ ├── cal.mjs │ │ ├── cfg.d.ts │ │ ├── cfg.mjs │ │ ├── default.d.ts │ │ ├── default.mjs │ │ ├── math.d.ts │ │ ├── math.mjs │ │ ├── schema.d.ts │ │ ├── schema.mjs │ │ ├── std.d.ts │ │ ├── std.mjs │ │ ├── sys.d.ts │ │ └── sys.mjs │ ├── operators.d.ts │ ├── operators.mjs │ ├── params.d.ts │ ├── params.mjs │ ├── path.d.ts │ ├── path.mjs │ ├── query.d.ts │ ├── query.mjs │ ├── range.d.ts │ ├── range.mjs │ ├── reflection.d.ts │ ├── reflection.mjs │ ├── select.d.ts │ ├── select.mjs │ ├── set.d.ts │ ├── set.mjs │ ├── setImpl.d.ts │ ├── setImpl.mjs │ ├── syntax.d.ts │ ├── syntax.mjs │ ├── toEdgeQL.d.ts │ ├── toEdgeQL.mjs │ ├── typesystem.d.ts │ ├── typesystem.mjs │ ├── update.d.ts │ ├── update.mjs │ ├── with.d.ts │ └── with.mjs ├── futures.esdl └── migrations │ └── 00001.edgeql ├── edgedb.toml ├── jsconfig.json ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── postcss.config.cjs ├── src ├── app.css ├── app.d.ts ├── app.html ├── hooks.server.js ├── lib │ ├── SvgIcons.svelte │ ├── admin │ │ ├── form.svelte │ │ └── page.svelte │ ├── config.js │ ├── demo-mode-header.svelte │ ├── field-error-message.svelte │ ├── form-field.svelte │ ├── form-message.svelte │ ├── images │ │ └── svelte-logo.svg │ ├── server │ │ ├── database.js │ │ └── seed.js │ └── tailwind.js └── routes │ ├── (app) │ ├── +layout.svelte │ ├── +page.server.js │ ├── Footer.svelte │ ├── Header.svelte │ ├── posts │ │ ├── +page.server.js │ │ ├── +page.svelte │ │ ├── Card.svelte │ │ └── [slug] │ │ │ ├── +page.server.js │ │ │ └── +page.svelte │ └── user │ │ ├── register │ │ ├── +page.server.js │ │ └── +page.svelte │ │ ├── settings │ │ ├── +layout.js │ │ ├── +layout.svelte │ │ ├── +page.server.js │ │ ├── +page.svelte │ │ └── password │ │ │ ├── +page.server.js │ │ │ └── +page.svelte │ │ ├── sign-in │ │ ├── +page.server.js │ │ └── +page.svelte │ │ └── sign-out │ │ └── +page.server.js │ ├── +error.svelte │ ├── +layout.server.js │ ├── +layout.svelte │ └── admin │ ├── +layout.svelte │ ├── +page.svelte │ ├── SidebarProfileSection.svelte │ ├── SidebarSections.svelte │ ├── comments │ ├── +page.server.js │ └── +page.svelte │ ├── posts │ ├── +page.server.js │ └── +page.svelte │ ├── tags │ ├── +page.server.js │ └── +page.svelte │ └── users │ ├── +page.server.js │ └── +page.svelte ├── static ├── favicon.png ├── images │ ├── avatars │ │ ├── ava.jpeg │ │ ├── blaze.jpeg │ │ ├── chip.jpeg │ │ ├── gigi.jpeg │ │ ├── iris.jpeg │ │ ├── siri.jpeg │ │ ├── victor.jpeg │ │ └── zander.jpeg │ ├── desk1.avif │ ├── desk2.avif │ └── desk3.avif ├── logo.svg └── robots.txt ├── svelte.config.js ├── tailwind.config.cjs └── vite.config.js /.env: -------------------------------------------------------------------------------- 1 | # used to create demo sites where data is not editable after initialization 2 | # options: production, disabled, enabled 3 | PUBLIC_READONLY_MODE='production' -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env.* 7 | !.env.example 8 | .vercel 9 | .output 10 | 11 | # dbschema/edgeql-js # todo: once generated files used for vercel deployment, don't check these in 12 | 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 pro7tech 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![SvelteKitBlogApp](https://user-images.githubusercontent.com/29139306/223408199-decaa65b-6213-462b-891f-2996d7f7590c.png) 2 | 3 | ## About 4 | 5 | The Real-World App (https://github.com/gothinkster/realworld) named the “mother of all demo apps” provides a fullstack Medium.com blog clone with a variety of frontend and backend stacks to demo the features needed for a robust web application. 6 | 7 | This app demos the same features of “querying & persisting data to a database, an authentication system, session management, full CRUD for resources” while simplifying the app to an integrated stack of: 8 | 9 | - **SvelteKit:** A top framework for developer retention in the 2021 and 2022 State of JS Survey ([Source](https://2022.stateofjs.com/en-US/libraries/rendering-frameworks/)) 10 | - **Tailwind:** Consistently the most popular CSS Framework in the annual State of CSS Survey ([Source](https://2022.stateofcss.com/en-US/css-frameworks/)) 11 | - **EdgeDB:** Open Source Database with 10 Years of Development providing the best of both worlds between SQL and an ORM ([Source](https://www.edgedb.com/blog/a-solution-to-the-sql-vs-orm-dilemma)) 12 | 13 | ## Features 14 | - **Simplicity:** Minimizes 3rd party dependencies in favor of using the platform to keep things simple 15 | - **Modern Tailwind Design:** Uses the latest best practices for a beautiful design 16 | - **Desktop and Mobile-friendly:** Looks great on both large-screen and small-screen (mobile) devices. 17 | - **Authentication and Authorization:** Built-in users management with role based authorization 18 | - **100% Performance Score** on Google Lighthouse 19 | - **Modern Admin Panel:** Elegant admin dashboard demoing CRUD operations for Posts, Comments, Tags, and Users 20 | 21 | ## Screenshots 22 | 23 | ### Frontend Pages 24 | A blog overview page, blog page with comments, sign-in, sign-up and error pages. 25 | ![frontend](https://user-images.githubusercontent.com/29139306/223408688-22e9d832-6d05-4272-9d4f-b3a46ab61b08.png) 26 | 27 | ### User Profile Screens 28 | Pages for users to update their profile and password. 29 | ![profile](https://user-images.githubusercontent.com/29139306/223408403-f49b4e52-09aa-4c5a-b7fd-35e2a24cde96.png) 30 | 31 | ### Admin Pages 32 | Only users with role of ‘admin’ can access these pages. CRUD pages for users, posts, comments, tags. 33 | ![admin](https://user-images.githubusercontent.com/29139306/223407889-93cab579-ebe9-48e7-9283-413a808a5f2a.png) 34 | 35 | ### Mobile Friendly 36 | ![mobile](https://user-images.githubusercontent.com/29139306/223408426-a0a08c4c-854b-478b-8c9f-685bdbdc0866.png) 37 | 38 | ### EdgeDb UI 39 | 40 | Run command 'edgedb ui' in root folder to see the database explorer and query REPL 41 | ![Screenshot 2023-03-15 at 9 54 05 PM](https://user-images.githubusercontent.com/29139306/225521291-ab5f18b8-ea6f-4686-b27d-f6f0dace7b99.png) 42 | ![Screenshot 2023-03-15 at 9 54 45 PM](https://user-images.githubusercontent.com/29139306/225521308-a3671129-64a6-4551-8220-1c375bddbf45.png) 43 | 44 | 45 | ### Performance 46 | 100% Performance on Google Lighthouse 47 | ![Screenshot 2023-03-15 at 4 26 31 PM](https://user-images.githubusercontent.com/29139306/225521173-0e4c09fb-61b4-4928-a0ae-1840642b78fe.png) 48 | 49 | ### Code Show Feature 50 | Use Keyboard shortcut for your platform (Command ⌘ + Shift ⇧ on Mac) to activate a hover component that shows the code generating the UI under the mouse cursor 51 | ![Screenshot 2023-03-15 at 10 05 34 PM](https://user-images.githubusercontent.com/29139306/225521088-694050c9-f6ce-4e37-8950-b41d4cce9e25.png) 52 | ![ezgif-1-c611e45007](https://user-images.githubusercontent.com/29139306/226241441-e2534ddf-6da6-414d-a2cc-ff8d6ba2d441.gif) 53 | 54 | ## Installation: 55 | 56 | EdgeDb is a prerequisite: https://www.edgedb.com/install 57 | 58 | 1. Clone the repository and install dependencies: 59 | 60 | ``` 61 | git clone https://github.com/pro7tech/sveltekit-blog-app.git 62 | cd sveltekit-blog-app 63 | npm install 64 | ``` 65 | 66 | 2. Initialize files for connecting to database 67 | 68 | ``` 69 | edgedb project init 70 | npx @edgedb/generate edgeql-js 71 | ``` 72 | 73 | 3. Run the dev server 74 | 75 | ``` 76 | npm run dev 77 | ``` 78 | 79 | Then navigate to the root directory of the app to automatically seed the database: http://localhost:5173/ 80 | 81 | You can then login to the admin pages with: 82 | * email: admin@example.com 83 | * password: password 84 | 85 | ## Deploying to Production with Digital Ocean and Vercel 86 | 87 | 1. Use the Digital Ocean on click deploy tutorial to setup your database: https://www.edgedb.com/docs/guides/deployment/digitalocean#one-click-deploy 88 | 2. Copy your Database Connection String (DSN) from step 1. It has the format edgedb://username:password@hostname:port 89 | 3. Run the migration file against your remote database 90 | 91 | ``` 92 | $ edgedb migrate --dsn edgedb://username:password@hostname:port --tls-security insecure 93 | ``` 94 | 95 | 4. Deploy this app to Vercel with the link below. 96 | 97 | https://vercel.com/new/git/external?repository-url=https://github.com/pro7tech/sveltekit-blog-app&repository-name=sveltekit-blog-app&env=EDGEDB_DSN,EDGEDB_CLIENT_TLS_SECURITY 98 | 99 | When Prompted: 100 | * Set EDGEDB_DSN to your database’s DSN 101 | * Set EDGEDB_CLIENT_TLS_SECURITY to insecure. This will disable EdgeDB’s default TLS checks. 102 | 103 | ## License 104 | 105 | MIT Licensed 106 | 107 | -------------------------------------------------------------------------------- /dbschema/default.esdl: -------------------------------------------------------------------------------- 1 | module default { 2 | type Post extending HasTimestamp { 3 | required property title -> str; 4 | required property slug -> str { constraint exclusive; }; 5 | required property content -> str; 6 | property snippet -> str; 7 | required link author -> User; 8 | property image_src -> str; 9 | multi link tags -> Tag; 10 | multi link comments := . str; 15 | required link author -> User; 16 | required link post -> Post; 17 | } 18 | 19 | type Tag { 20 | required property name -> str { constraint exclusive; } 21 | } 22 | 23 | type User extending HasTimestamp { 24 | required property email -> str { constraint exclusive; }; 25 | required property username -> str { constraint exclusive; }; 26 | property first_name -> str; 27 | property last_name -> str; 28 | property password_hash -> str ; 29 | property user_auth_token -> str { constraint exclusive; }; 30 | property avatar_src -> str; 31 | property full_name := .first_name ++ ' ' ++ .last_name; 32 | property role -> Role { 33 | default := 'user'; 34 | } 35 | } 36 | 37 | abstract type HasTimestamp { 38 | required property created_at -> datetime { 39 | default := (datetime_current()); 40 | } 41 | } 42 | 43 | scalar type Role extending enum <"admin", "user">; 44 | } 45 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/__spec__.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "./reflection"; 5 | declare const spec: $.introspect.Types; 6 | 7 | 8 | 9 | export { spec }; 10 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/cardinality.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { TypeSet } from "./typesystem"; 6 | export declare namespace cardutil { 7 | export type multiplyCardinalities = C1 extends Cardinality.Empty ? Cardinality.Empty : C1 extends Cardinality.One ? C2 : C1 extends Cardinality.AtMostOne ? C2 extends Cardinality.One ? Cardinality.AtMostOne : C2 extends Cardinality.AtLeastOne ? Cardinality.Many : C2 : C1 extends Cardinality.Many ? C2 extends Cardinality.Empty ? Cardinality.Empty : Cardinality.Many : C1 extends Cardinality.AtLeastOne ? C2 extends Cardinality.AtMostOne ? Cardinality.Many : C2 extends Cardinality.One ? Cardinality.AtLeastOne : C2 : never; 8 | export function multiplyCardinalities(c1: Cardinality, c2: Cardinality): Cardinality; 9 | type _multiplyCardinalitiesVariadic = Cards extends [infer Card] ? Card : Cards extends [infer A, infer B, ...infer Rest] ? A extends Cardinality ? B extends Cardinality ? Rest extends Cardinality[] ? multiplyCardinalities extends Cardinality ? _multiplyCardinalitiesVariadic<[ 10 | multiplyCardinalities, 11 | ...Rest 12 | ]> : never : never : never : never : never; 13 | export type multiplyCardinalitiesVariadic = _multiplyCardinalitiesVariadic extends Cardinality ? _multiplyCardinalitiesVariadic : never; 14 | export function multiplyCardinalitiesVariadic(cards: Cards): multiplyCardinalitiesVariadic; 15 | export type mergeCardinalities = A extends Cardinality.Empty ? B : B extends Cardinality.Empty ? A : A extends Cardinality.AtLeastOne ? Cardinality.AtLeastOne : B extends Cardinality.AtLeastOne ? Cardinality.AtLeastOne : A extends Cardinality.One ? Cardinality.AtLeastOne : B extends Cardinality.One ? Cardinality.AtLeastOne : Cardinality.Many; 16 | export function mergeCardinalities(a: A, b: B): mergeCardinalities; 17 | type _mergeCardinalitiesVariadic = Cards extends [infer Card] ? Card : Cards extends [infer A, infer B, ...infer Rest] ? A extends Cardinality ? B extends Cardinality ? Rest extends Cardinality[] ? mergeCardinalities extends Cardinality ? _mergeCardinalitiesVariadic<[mergeCardinalities, ...Rest]> : never : never : never : never : never; 18 | export type mergeCardinalitiesVariadic = _mergeCardinalitiesVariadic extends Cardinality ? _mergeCardinalitiesVariadic : never; 19 | export function mergeCardinalitiesVariadic(cards: Cards): mergeCardinalitiesVariadic; 20 | export type orCardinalities = C1 extends C2 ? C1 : C1 extends Cardinality.Many ? C1 : C1 extends Cardinality.AtMostOne ? C2 extends Cardinality.Many ? C2 : C2 extends Cardinality.AtLeastOne ? Cardinality.Many : C1 : C1 extends Cardinality.AtLeastOne ? C2 extends Cardinality.One ? Cardinality.AtLeastOne : Cardinality.Many : C1 extends Cardinality.Empty ? C2 extends Cardinality.AtMostOne ? Cardinality.AtMostOne : C2 extends Cardinality.One ? Cardinality.AtMostOne : Cardinality.Many : C2 extends Cardinality.Empty ? Cardinality.AtMostOne : C2; 21 | export function orCardinalities(c1: Cardinality, c2: Cardinality): Cardinality; 22 | export type overrideLowerBound = O extends "One" ? C extends Cardinality.Many ? Cardinality.AtLeastOne : C extends Cardinality.AtLeastOne ? Cardinality.AtLeastOne : Cardinality.One : C extends Cardinality.Empty ? Cardinality.Empty : C extends Cardinality.Many ? Cardinality.Many : C extends Cardinality.AtLeastOne ? Cardinality.Many : Cardinality.AtMostOne; 23 | export function overrideLowerBound(card: C, override: O): overrideLowerBound; 24 | export type overrideUpperBound = O extends "One" ? C extends Cardinality.Many ? Cardinality.AtMostOne : C extends Cardinality.AtLeastOne ? Cardinality.One : C extends Cardinality.Empty ? Cardinality.AtMostOne : C : C extends Cardinality.One ? Cardinality.AtLeastOne : C extends Cardinality.AtMostOne ? Cardinality.Many : C extends Cardinality.Empty ? Cardinality.Many : C; 25 | export function overrideUpperBound(card: C, override: O): overrideUpperBound; 26 | export type paramCardinality

= [P] extends [TypeSet] ? [ 27 | Cardinality 28 | ] extends [P["__cardinality__"]] ? Cardinality.One : P["__cardinality__"] : Cardinality.One; 29 | export type optionalParamCardinality

= overrideLowerBound, "One">; 30 | type _paramArrayCardinality = { 31 | [K in keyof T]: T[K] extends TypeSet ? T[K]["__cardinality__"] : Cardinality.One; 32 | }; 33 | export type paramArrayCardinality = multiplyCardinalitiesVariadic<_paramArrayCardinality>; 34 | export type assignable = C extends Cardinality.Empty ? Cardinality.Empty : C extends Cardinality.One ? Cardinality.One : C extends Cardinality.AtMostOne ? Cardinality.One | Cardinality.AtMostOne | Cardinality.Empty : C extends Cardinality.AtLeastOne ? Cardinality.One | Cardinality.AtLeastOne | Cardinality.Many : C extends Cardinality.Many ? Cardinality : never; 35 | export {}; 36 | } 37 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/cardinality.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality } from "edgedb/dist/reflection/index.js"; 5 | export var cardutil; 6 | (function (cardutil) { 7 | function multiplyCardinalities(c1, c2) { 8 | if (c1 === Cardinality.Empty) 9 | return Cardinality.Empty; 10 | if (c1 === Cardinality.One) 11 | return c2; 12 | if (c1 === Cardinality.AtMostOne) { 13 | if (c2 === Cardinality.One) 14 | return Cardinality.AtMostOne; 15 | if (c2 === Cardinality.AtLeastOne) 16 | return Cardinality.Many; 17 | return c2; 18 | } 19 | if (c1 === Cardinality.Many) { 20 | if (c2 === Cardinality.Empty) 21 | return Cardinality.Empty; 22 | return Cardinality.Many; 23 | } 24 | if (c1 === Cardinality.AtLeastOne) { 25 | if (c2 === Cardinality.AtMostOne) 26 | return Cardinality.Many; 27 | if (c2 === Cardinality.One) 28 | return Cardinality.AtLeastOne; 29 | return c2; 30 | } 31 | throw new Error(`Invalid Cardinality ${c1}`); 32 | } 33 | cardutil.multiplyCardinalities = multiplyCardinalities; 34 | function multiplyCardinalitiesVariadic(cards) { 35 | if (cards.length === 0) 36 | throw new Error("Empty tuple not allowed"); 37 | if (cards.length === 1) 38 | return cards[0]; 39 | return cards.reduce((product, card) => multiplyCardinalities(product, card), Cardinality.One); 40 | } 41 | cardutil.multiplyCardinalitiesVariadic = multiplyCardinalitiesVariadic; 42 | function mergeCardinalities(a, b) { 43 | if (a === Cardinality.Empty) 44 | return b; 45 | if (b === Cardinality.Empty) 46 | return a; 47 | if (a === Cardinality.AtLeastOne) 48 | return Cardinality.AtLeastOne; 49 | if (b === Cardinality.AtLeastOne) 50 | return Cardinality.AtLeastOne; 51 | if (a === Cardinality.One) 52 | return Cardinality.AtLeastOne; 53 | if (b === Cardinality.One) 54 | return Cardinality.AtLeastOne; 55 | return Cardinality.Many; 56 | } 57 | cardutil.mergeCardinalities = mergeCardinalities; 58 | function mergeCardinalitiesVariadic(cards) { 59 | if (cards.length === 0) 60 | throw new Error("Empty tuple not allowed"); 61 | if (cards.length === 1) 62 | return cards[0]; 63 | const [first, second, ...rest] = cards; 64 | if (cards.length === 2) 65 | return mergeCardinalities(first, second); 66 | return mergeCardinalitiesVariadic([ 67 | mergeCardinalities(first, second), 68 | ...rest 69 | ]); 70 | } 71 | cardutil.mergeCardinalitiesVariadic = mergeCardinalitiesVariadic; 72 | function orCardinalities(c1, c2) { 73 | if (c1 === c2 || c1 === Cardinality.Many) 74 | return c1; 75 | if (c1 === Cardinality.AtLeastOne) { 76 | if (c2 === Cardinality.One) 77 | return Cardinality.AtLeastOne; 78 | return Cardinality.Many; 79 | } 80 | if (c1 === Cardinality.AtMostOne) { 81 | if (c2 === Cardinality.Many || c2 === Cardinality.AtLeastOne) { 82 | return Cardinality.Many; 83 | } 84 | return c1; 85 | } 86 | if (c1 === Cardinality.Empty) { 87 | if (c2 === Cardinality.AtMostOne || c2 === Cardinality.One) { 88 | return Cardinality.AtMostOne; 89 | } 90 | return Cardinality.Many; 91 | } 92 | if (c2 === Cardinality.Empty) 93 | return Cardinality.AtMostOne; 94 | return c2; 95 | } 96 | cardutil.orCardinalities = orCardinalities; 97 | function overrideLowerBound(card, override) { 98 | if (override === "One") { 99 | if (card === Cardinality.Many || card === Cardinality.AtLeastOne) { 100 | return Cardinality.AtLeastOne; 101 | } 102 | else { 103 | return Cardinality.One; 104 | } 105 | } 106 | else { 107 | if (card === Cardinality.Many || card === Cardinality.AtLeastOne) { 108 | return Cardinality.Many; 109 | } 110 | else if (card === Cardinality.Empty) { 111 | return Cardinality.Empty; 112 | } 113 | else { 114 | return Cardinality.AtMostOne; 115 | } 116 | } 117 | } 118 | cardutil.overrideLowerBound = overrideLowerBound; 119 | function overrideUpperBound(card, override) { 120 | if (override === "One") { 121 | if (card === Cardinality.One || card === Cardinality.AtLeastOne) { 122 | return Cardinality.One; 123 | } 124 | else { 125 | return Cardinality.AtMostOne; 126 | } 127 | } 128 | else { 129 | if (card === Cardinality.One || card === Cardinality.AtLeastOne) { 130 | return Cardinality.AtLeastOne; 131 | } 132 | else { 133 | return Cardinality.Many; 134 | } 135 | } 136 | } 137 | cardutil.overrideUpperBound = overrideUpperBound; 138 | })(cardutil || (cardutil = {})); 139 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/cast.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { Expression, BaseType, TypeSet } from "./typesystem"; 6 | import type { orScalarLiteral } from "./castMaps"; 7 | export declare function cast(target: Target, arg: null): $expr_Cast; 8 | export declare function cast(target: Target, expr: orScalarLiteral): $expr_Cast; 9 | export declare type $expr_Cast = Expression<{ 10 | __element__: Target; 11 | __cardinality__: Card; 12 | __kind__: ExpressionKind.Cast; 13 | __expr__: TypeSet | null; 14 | }>; 15 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/cast.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify } from "./path.mjs"; 6 | import { literalToTypeSet } from "./castMaps.mjs"; 7 | export function cast(target, expr) { 8 | const cleanedExpr = expr === null ? null : literalToTypeSet(expr); 9 | return $expressionify({ 10 | __element__: target, 11 | __cardinality__: cleanedExpr === null ? Cardinality.Empty : cleanedExpr.__cardinality__, 12 | __expr__: cleanedExpr, 13 | __kind__: ExpressionKind.Cast 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/casting.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { ArrayType, BaseType, BaseTypeTuple, BaseTypeToTsType, EnumType, LinkDesc, NamedTupleType, ObjectType, ObjectTypeSet, PrimitiveTypeSet, PropertyDesc, ScalarType, TupleType, TypeSet, RangeType } from "./typesystem"; 6 | import type { cardutil } from "./cardinality"; 7 | import type { scalarCastableFrom, scalarAssignableBy } from "./castMaps"; 8 | export declare type anonymizeObject = ObjectType; 9 | declare type assignableTuple = { 10 | [k in keyof Items]: Items[k] extends BaseType ? assignableBy : never; 11 | } extends infer NewItems ? NewItems extends BaseTypeTuple ? NewItems : never : never; 12 | export declare type assignableBy = T extends ScalarType ? scalarAssignableBy : T extends ObjectType ? anonymizeObject : T extends EnumType ? T : T extends ArrayType ? ArrayType> : T extends TupleType ? TupleType> : T extends NamedTupleType ? NamedTupleType<{ 13 | [k in keyof T["__shape__"]]: assignableBy; 14 | }> : T extends RangeType ? RangeType extends ScalarType ? scalarAssignableBy : never> : never; 15 | export declare type pointerToAssignmentExpression = setToAssignmentExpression, IsSetModifier>; 16 | export declare type setToAssignmentExpression = [Set] extends [PrimitiveTypeSet] ? TypeSet, cardutil.assignable>> | getAssignmentLiteral : [Set] extends [ObjectTypeSet] ? TypeSet, cardutil.assignable>> : never; 17 | declare type getAssignmentLiteral = BaseTypeToTsType extends infer TsType ? TsType | (Set["__cardinality__"] extends Cardinality.Many ? TsType[] : Set["__cardinality__"] extends Cardinality.AtLeastOne ? IsSetModifier extends true ? TsType[] : [TsType, ...TsType[]] : never) : never; 18 | declare type castableTuple = { 19 | [k in keyof Items]: Items[k] extends BaseType ? castableFrom : never; 20 | } extends infer NewItems ? NewItems extends BaseTypeTuple ? NewItems : never : never; 21 | export declare type castableFrom = T extends ScalarType ? scalarCastableFrom : T extends ObjectType ? anonymizeObject : T extends ArrayType ? ArrayType> : T extends TupleType ? TupleType> : T extends NamedTupleType ? NamedTupleType<{ 22 | [k in keyof T["__shape__"]]: castableFrom; 23 | }> : never; 24 | export declare type pointerToCastableExpression = [Pointer] extends [PropertyDesc] ? { 25 | __element__: castableFrom; 26 | __cardinality__: cardutil.assignable; 27 | } : [Pointer] extends [LinkDesc] ? TypeSet, cardutil.assignable> : never; 28 | export {}; 29 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/casting.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export {}; 5 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/collections.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { typeutil } from "edgedb/dist/reflection/index"; 5 | import { cardutil } from "./cardinality"; 6 | import type { $expr_Array, $expr_NamedTuple, $expr_Tuple, ArrayType, BaseType, getPrimitiveBaseType, NamedTupleShape, NamedTupleType, NonArrayType, TupleType, TypeSet } from "./typesystem"; 7 | import { ExpressionRoot } from "./path"; 8 | import type { getCardsFromExprs } from "./set"; 9 | import { literalToScalarType, mapLiteralToTypeSet, orScalarLiteral, scalarLiterals } from "./castMaps"; 10 | export declare function $arrayLikeIndexify(_expr: ExpressionRoot): any; 11 | export declare function array(element: Element): ArrayType; 12 | export declare function array | scalarLiterals, Exprs extends orScalarLiteral : getPrimitiveBaseType>>>[]>(arg: [Expr, ...Exprs]): $expr_Array : getPrimitiveBaseType>>, cardutil.multiplyCardinalitiesVariadic>>>; 13 | export declare function $tuplePathify(expr: ExpressionRoot): ExpressionRoot; 14 | export declare function tuple>(items: Items): TupleType; 15 | export declare function tuple>(items: Items): $expr_Tuple ? mapLiteralToTypeSet : never>; 16 | export declare function tuple(shape: Shape): NamedTupleType; 17 | export declare function tuple(shape: Shape): $expr_NamedTuple>; 20 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/config.json: -------------------------------------------------------------------------------- 1 | // EdgeDB query builder. To update, run `npx @edgedb/generate edgeql-js` 2 | {"target":"esm"} 3 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/detached.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind } from "edgedb/dist/reflection/index"; 5 | import type { Expression, TypeSet } from "./typesystem"; 6 | export declare function detached(expr: Expr): $expr_Detached; 7 | export declare type $expr_Detached = Expression<{ 8 | __element__: Expr["__element__"]; 9 | __cardinality__: Expr["__cardinality__"]; 10 | __kind__: ExpressionKind.Detached; 11 | __expr__: TypeSet; 12 | }>; 13 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/detached.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify } from "./path.mjs"; 6 | export function detached(expr) { 7 | return $expressionify({ 8 | __element__: expr.__element__, 9 | __cardinality__: expr.__cardinality__, 10 | __expr__: expr, 11 | __kind__: ExpressionKind.Detached 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/external.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { TypeSet, setToTsType } from "./typesystem"; 5 | export { literal } from "./literal"; 6 | export {} from "./path"; 7 | export { set } from "./set"; 8 | export { cast } from "./cast"; 9 | export { ASC, DESC, EMPTY_FIRST, EMPTY_LAST, is, delete, select } from "./select"; 10 | export { update } from "./update"; 11 | export { insert } from "./insert"; 12 | export { array, tuple } from "./collections"; 13 | export {} from "./funcops"; 14 | export { for } from "./for"; 15 | export { alias, with } from "./with"; 16 | export { optional, params } from "./params"; 17 | export { detached } from "./detached"; 18 | export {} from "./toEdgeQL"; 19 | export declare type $infer = setToTsType; 20 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/external.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export { literal } from "./literal.mjs"; 5 | export { set } from "./set.mjs"; 6 | export { cast } from "./cast.mjs"; 7 | export { ASC, DESC, EMPTY_FIRST, EMPTY_LAST, is, delete, select } from "./select.mjs"; 8 | export { update } from "./update.mjs"; 9 | export { insert } from "./insert.mjs"; 10 | export { array, tuple } from "./collections.mjs"; 11 | export { for } from "./for.mjs"; 12 | export { alias, with } from "./with.mjs"; 13 | export { optional, params } from "./params.mjs"; 14 | export { detached } from "./detached.mjs"; 15 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/for.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index"; 5 | import { cardutil } from "./cardinality"; 6 | import type { Expression, BaseType, BaseTypeSet } from "./typesystem"; 7 | export declare type $expr_For = Expression<{ 8 | __element__: El; 9 | __cardinality__: Card; 10 | __kind__: ExpressionKind.For; 11 | __iterSet__: BaseTypeSet; 12 | __forVar__: $expr_ForVar; 13 | __expr__: BaseTypeSet; 14 | }>; 15 | export declare type $expr_ForVar = Expression<{ 16 | __element__: Type; 17 | __cardinality__: Cardinality.One; 18 | __kind__: ExpressionKind.ForVar; 19 | }>; 20 | declare function _for(set: IteratorSet, expr: (variable: $expr_ForVar) => Expr): $expr_For>; 21 | export { _for as for }; 22 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/for.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { cardutil } from "./cardinality.mjs"; 6 | import { $expressionify } from "./path.mjs"; 7 | function _for(set, expr) { 8 | const forVar = $expressionify({ 9 | __kind__: ExpressionKind.ForVar, 10 | __element__: set.__element__, 11 | __cardinality__: Cardinality.One 12 | }); 13 | const returnExpr = expr(forVar); 14 | return $expressionify({ 15 | __kind__: ExpressionKind.For, 16 | __element__: returnExpr.__element__, 17 | __cardinality__: cardutil.multiplyCardinalities(set.__cardinality__, returnExpr.__cardinality__), 18 | __iterSet__: set, 19 | __expr__: returnExpr, 20 | __forVar__: forVar 21 | }); 22 | } 23 | export { _for as for }; 24 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/funcops.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, introspect } from "edgedb/dist/reflection/index"; 5 | import type { BaseType, BaseTypeSet, TypeSet, Expression } from "./typesystem"; 6 | import type { ExpressionKind, OperatorKind } from "edgedb/dist/reflection/index"; 7 | export declare type $expr_Function = Expression<{ 8 | __element__: El; 9 | __cardinality__: Card; 10 | __kind__: ExpressionKind.Function; 11 | __name__: string; 12 | __args__: (BaseTypeSet | undefined)[]; 13 | __namedargs__: { 14 | [key: string]: BaseTypeSet; 15 | }; 16 | }>; 17 | export declare type $expr_Operator = Expression<{ 18 | __element__: El; 19 | __cardinality__: Card; 20 | __kind__: ExpressionKind.Operator; 21 | __name__: string; 22 | __opkind__: OperatorKind; 23 | __args__: TypeSet[]; 24 | }>; 25 | interface OverloadFuncArgDef { 26 | typeId: string; 27 | optional?: boolean; 28 | setoftype?: boolean; 29 | variadic?: boolean; 30 | } 31 | interface OverloadFuncDef { 32 | kind?: string; 33 | args: OverloadFuncArgDef[]; 34 | namedArgs?: { 35 | [key: string]: OverloadFuncArgDef; 36 | }; 37 | returnTypeId: string; 38 | returnTypemod?: "SetOfType" | "OptionalType"; 39 | preservesOptionality?: boolean; 40 | } 41 | export declare function $resolveOverload(funcName: string, args: any[], typeSpec: introspect.Types, funcDefs: OverloadFuncDef[]): { 42 | kind?: string | undefined; 43 | returnType: BaseType; 44 | cardinality: Cardinality; 45 | args: BaseTypeSet[]; 46 | namedArgs: { 47 | [key: string]: BaseTypeSet; 48 | }; 49 | }; 50 | export {}; 51 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/globals.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { Expression, BaseType } from "./typesystem"; 6 | export declare function makeGlobal(name: string, type: Type, card: Card): $expr_Global; 7 | export declare type $expr_Global = Expression<{ 8 | __name__: string; 9 | __element__: Type; 10 | __cardinality__: Card; 11 | __kind__: ExpressionKind.Global; 12 | }>; 13 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/globals.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify } from "./path.mjs"; 6 | export function makeGlobal(name, type, card) { 7 | return $expressionify({ 8 | __name__: name, 9 | __element__: type, 10 | __cardinality__: card, 11 | __kind__: ExpressionKind.Global 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/group.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { Expression, ObjectType, ObjectTypeSet, TypeSet, BaseType, $scopify, PropertyDesc, LinkDesc } from "./typesystem"; 5 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index"; 6 | import type { $FreeObjectλShape, $str } from "./modules/std"; 7 | import type { normaliseShape, objectTypeToSelectShape } from "./select"; 8 | declare type SingletonSet = Expression>; 9 | declare type SimpleGroupElements = { 10 | [k: string]: SingletonSet; 11 | }; 12 | declare type GroupModifiers = { 13 | by: SimpleGroupElements; 14 | }; 15 | declare type NestedGroupElements = { 16 | [k: string]: SingletonSet | GroupingSet; 17 | }; 18 | export declare type GroupingSet = { 19 | __kind__: "groupingset"; 20 | __settype__: "set" | "tuple" | "rollup" | "cube"; 21 | __elements__: NestedGroupElements; 22 | __exprs__: [string, SingletonSet][]; 23 | }; 24 | export declare function isGroupingSet(arg: any): arg is GroupingSet; 25 | declare const setFuncs: { 26 | set: (grps: T) => { [k in keyof T]?: T[k] | undefined; }; 27 | tuple: (grps: T) => { [k in keyof T]?: T[k] | undefined; }; 28 | rollup: (grps: T) => { [k in keyof T]?: T[k] | undefined; }; 29 | cube: (grps: T) => { [k in keyof T]?: T[k] | undefined; }; 30 | }; 31 | export declare type $expr_Group = Expression<{ 34 | __element__: ObjectType<"std::FreeObject", $FreeObjectλShape & { 35 | grouping: PropertyDesc<$str, Cardinality.Many, false, true, true, false>; 36 | key: LinkDesc; 38 | }>, Cardinality.One, {}, false, true, true, false>; 39 | elements: LinkDesc; 40 | }, { 41 | grouping: TypeSet<$str, Cardinality.Many>; 42 | key: Expression<{ 43 | __element__: ObjectType<"std::FreeObject", $FreeObjectλShape, { 44 | [k in keyof Mods["by"]]: Expression<{ 45 | __element__: Mods["by"][k]["__element__"]; 46 | __cardinality__: Cardinality.AtMostOne; 47 | }>; 48 | }>; 49 | __cardinality__: Cardinality.One; 50 | }>; 51 | elements: Expression<{ 52 | __element__: ObjectType>; 53 | __cardinality__: Cardinality.Many; 54 | }>; 55 | }>; 56 | __cardinality__: Cardinality.Many; 57 | __modifiers__: Mods; 58 | __kind__: ExpressionKind.Group; 59 | __expr__: ObjectTypeSet; 60 | __scope__: ObjectTypeSet; 61 | }>; 62 | declare type noUndefined = T extends undefined ? never : T; 63 | declare type groupFunc = >(expr: Expr, getter: (arg: $scopify) => Readonly) => $expr_Group; 67 | }, normaliseShape>; 68 | declare const groupFunc: groupFunc; 69 | export declare const group: typeof setFuncs & groupFunc; 70 | export {}; 71 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/group.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind, TypeKind } from "edgedb/dist/reflection/index.js"; 5 | import { makeType } from "./hydrate.mjs"; 6 | import { $expressionify, $getScopedExpr } from "./path.mjs"; 7 | import { spec } from "./__spec__.mjs"; 8 | import { literal } from "./literal.mjs"; 9 | import { resolveShapeElement } from "./select.mjs"; 10 | export function isGroupingSet(arg) { 11 | return arg.__kind__ === "groupingset"; 12 | } 13 | const makeGroupingSet = (prefix) => (grps) => { 14 | const seenKeys = new Map(); 15 | const unfiltered = Object.entries(grps).flatMap(([k, grp]) => isGroupingSet(grp) 16 | ? grp.__exprs__ 17 | : [[k, grp]]); 18 | const filtered = unfiltered.filter(([k, expr]) => { 19 | if (!seenKeys.has(k)) { 20 | seenKeys.set(k, expr); 21 | return true; 22 | } 23 | if (expr !== seenKeys.get(k)) { 24 | throw new Error(`Cannot override pre-existing expression with key "${k}"`); 25 | } 26 | return false; 27 | }); 28 | return { 29 | [`${Math.round(1000000 * Math.random())}___`]: { 30 | __kind__: "groupingset", 31 | __settype__: prefix, 32 | __elements__: grps, 33 | __exprs__: filtered 34 | } 35 | }; 36 | }; 37 | const set = makeGroupingSet("set"); 38 | const tuple = makeGroupingSet("tuple"); 39 | const rollup = makeGroupingSet("rollup"); 40 | const cube = makeGroupingSet("cube"); 41 | const setFuncs = { set, tuple, rollup, cube }; 42 | const groupFunc = (expr, getter) => { 43 | const { shape, scope, modifiers } = resolveShape(getter, expr); 44 | const groupSet = tuple(modifiers.by); 45 | const key = Object.keys(groupSet)[0]; 46 | const grouping = groupSet[key]; 47 | const keyShape = {}; 48 | const keyPointers = {}; 49 | const keyShapeElement = {}; 50 | for (const [k, e] of grouping.__exprs__) { 51 | keyShape[k] = $expressionify({ 52 | __element__: e.__element__, 53 | __cardinality__: Cardinality.AtMostOne 54 | }); 55 | keyPointers[k] = { 56 | __kind__: "property", 57 | target: e.__element__, 58 | cardinality: Cardinality.AtMostOne, 59 | exclusive: false, 60 | computed: false, 61 | readonly: false, 62 | hasDefault: false 63 | }; 64 | keyShapeElement[k] = true; 65 | } 66 | const $FreeObject = makeType(spec, [...spec.values()].find(s => s.name === "std::FreeObject").id, literal); 67 | const str = makeType(spec, [...spec.values()].find(s => s.name === "std::str").id, literal); 68 | return $expressionify({ 69 | __element__: { 70 | ...$FreeObject, 71 | __name__: "std::FreeObject", 72 | __pointers__: { 73 | ...$FreeObject.__pointers__, 74 | __name__: "std::FreeObject", 75 | grouping: { 76 | __kind__: "property", 77 | target: str, 78 | cardinality: Cardinality.Many, 79 | exclusive: false, 80 | computed: false, 81 | readonly: false, 82 | hasDefault: false 83 | }, 84 | key: { 85 | __kind__: "link", 86 | target: { 87 | ...$FreeObject, 88 | __name__: "std::FreeObject", 89 | __pointers__: { 90 | ...$FreeObject.__pointers__, 91 | ...keyPointers 92 | }, 93 | __shape__: keyShape 94 | }, 95 | properties: {}, 96 | cardinality: Cardinality.One, 97 | exclusive: false, 98 | computed: false, 99 | readonly: false, 100 | hasDefault: false 101 | }, 102 | elements: { 103 | __kind__: "link", 104 | target: expr.__element__, 105 | cardinality: Cardinality.Many, 106 | properties: {}, 107 | exclusive: false, 108 | computed: false, 109 | readonly: false, 110 | hasDefault: false 111 | } 112 | }, 113 | __shape__: { 114 | grouping: $expressionify({ 115 | __element__: str, 116 | __cardinality__: Cardinality.Many 117 | }), 118 | key: $expressionify({ 119 | __element__: { 120 | ...$FreeObject, 121 | __shape__: keyShape 122 | }, 123 | __cardinality__: Cardinality.One 124 | }), 125 | elements: $expressionify({ 126 | __element__: { ...expr.__element__, __shape__: shape }, 127 | __cardinality__: Cardinality.Many 128 | }) 129 | } 130 | }, 131 | __cardinality__: Cardinality.Many, 132 | __expr__: expr, 133 | __modifiers__: { by: grouping }, 134 | __kind__: ExpressionKind.Group, 135 | __scope__: scope 136 | }); 137 | }; 138 | Object.assign(groupFunc, setFuncs); 139 | function resolveShape(shapeGetter, expr) { 140 | const modifiers = {}; 141 | const shape = {}; 142 | const scope = $getScopedExpr(expr); 143 | const selectShape = typeof shapeGetter === "function" ? shapeGetter(scope) : shapeGetter; 144 | for (const [key, value] of Object.entries(selectShape)) { 145 | if (key === "by") { 146 | modifiers[key] = value; 147 | } 148 | else { 149 | if (expr.__element__.__kind__ !== TypeKind.object) { 150 | throw new Error(`Invalid select shape key '${key}' on scalar expression, ` + 151 | `only modifiers are allowed (filter, order_by, offset and limit)`); 152 | } 153 | shape[key] = resolveShapeElement(key, value, scope); 154 | } 155 | } 156 | if (Object.keys(shape).length === 0) { 157 | shape.id = true; 158 | } 159 | if (!modifiers.by) { 160 | throw new Error("Must provide a `by` key in `e.group`"); 161 | } 162 | return { shape, modifiers, scope }; 163 | } 164 | export const group = groupFunc; 165 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/hydrate.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { $ } from "edgedb"; 5 | import type { BaseType, ObjectType, ObjectTypePointers, TupleType } from "./typesystem"; 6 | import type { typeutil } from "edgedb/dist/reflection/index"; 7 | export declare function makeType(spec: $.introspect.Types, id: string, literal: any, anytype?: BaseType): T; 8 | export declare type mergeObjectShapes = typeutil.flatten<{ 9 | [k in keyof A & keyof B]: A[k] extends B[k] ? B[k] extends A[k] ? A[k] : never : never; 10 | }>; 11 | export declare type mergeObjectTypes = A extends ObjectType ? B extends ObjectType ? ObjectType<`${A["__name__"]} UNION ${B["__name__"]}`, mergeObjectShapes, null> : A : B extends ObjectType ? B : undefined; 12 | export declare function $mergeObjectTypes(a: A, b: B): mergeObjectTypes; 13 | export declare function $mergeTupleTypes(a: A, b: B): TupleType; 14 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/imports.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * as edgedb from "edgedb"; 5 | export { spec } from "./__spec__"; 6 | export * as syntax from "./syntax"; 7 | export * as castMaps from "./castMaps"; 8 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/imports.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * as edgedb from "edgedb"; 5 | export { spec } from "./__spec__.mjs"; 6 | export * as syntax from "./syntax.mjs"; 7 | export * as castMaps from "./castMaps.mjs"; 8 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/index.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * from "./external"; 5 | export { createClient } from "edgedb"; 6 | import * as $ from "./reflection"; 7 | import * as $syntax from "./syntax"; 8 | import * as $op from "./operators"; 9 | import _std from "./modules/std"; 10 | import _cal from "./modules/cal"; 11 | import _cfg from "./modules/cfg"; 12 | import _default from "./modules/default"; 13 | import _schema from "./modules/schema"; 14 | import _sys from "./modules/sys"; 15 | import _math from "./modules/math"; 16 | 17 | declare const ExportDefault: typeof _std & 18 | typeof _default & 19 | $.util.OmitDollarPrefixed & 20 | typeof $op & { 21 | "std": typeof _std; 22 | "cal": typeof _cal; 23 | "cfg": typeof _cfg; 24 | "default": typeof _default; 25 | "schema": typeof _schema; 26 | "sys": typeof _sys; 27 | "math": typeof _math; 28 | } 29 | declare type Cardinality = $.Cardinality; 30 | export declare type Set< 31 | Type extends $.BaseType, 32 | Card extends $.Cardinality = $.Cardinality.Many 33 | > = $.TypeSet; 34 | 35 | 36 | export default ExportDefault; 37 | export { Cardinality }; 38 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/index.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * from "./external.mjs"; 5 | export { createClient } from "edgedb"; 6 | import * as $ from "./reflection.mjs"; 7 | import * as $syntax from "./syntax.mjs"; 8 | import * as $op from "./operators.mjs"; 9 | import _std from "./modules/std.mjs"; 10 | import _cal from "./modules/cal.mjs"; 11 | import _cfg from "./modules/cfg.mjs"; 12 | import _default from "./modules/default.mjs"; 13 | import _schema from "./modules/schema.mjs"; 14 | import _sys from "./modules/sys.mjs"; 15 | import _math from "./modules/math.mjs"; 16 | 17 | const ExportDefault 18 | = { 19 | ..._std, 20 | ..._default, 21 | ...$.util.omitDollarPrefixed($syntax), 22 | ...$op, 23 | "std": _std, 24 | "cal": _cal, 25 | "cfg": _cfg, 26 | "default": _default, 27 | "schema": _schema, 28 | "sys": _sys, 29 | "math": _math, 30 | }; 31 | const Cardinality = $.Cardinality; 32 | 33 | 34 | export default ExportDefault; 35 | export { Cardinality }; 36 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/insert.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind, typeutil } from "edgedb/dist/reflection/index"; 5 | import type { Expression, LinkDesc, ObjectTypeSet, ObjectTypePointers, PropertyDesc, stripBacklinks, stripNonInsertables, $scopify, stripSet, TypeSet, ObjectType } from "./typesystem"; 6 | import type { pointerToAssignmentExpression } from "./casting"; 7 | import type { $expr_PathNode } from "./path"; 8 | import type { $Object } from "./modules/std"; 9 | import type { scalarLiterals } from "./castMaps"; 10 | export declare type pointerIsOptional = T["cardinality"] extends Cardinality.Many | Cardinality.Empty | Cardinality.AtMostOne ? true : false; 11 | export declare type InsertShape = typeutil.flatten>; 12 | export declare type RawInsertShape = ObjectType extends El ? never : typeutil.stripNever>> extends infer Shape ? Shape extends ObjectTypePointers ? typeutil.addQuestionMarks<{ 13 | [k in keyof Shape]: pointerToAssignmentExpression | (pointerIsOptional extends true ? undefined | null : never) | (Shape[k]["hasDefault"] extends true ? undefined : never); 14 | }> & { 15 | [k in `@${string}`]: TypeSet | scalarLiterals; 16 | } : never : never; 17 | interface UnlessConflict { 18 | on: TypeSet | null; 19 | else?: TypeSet; 20 | } 21 | declare type InsertBaseExpression = { 22 | __kind__: ExpressionKind.Insert; 23 | __element__: Root["__element__"]; 24 | __cardinality__: Cardinality.One; 25 | __expr__: stripSet; 26 | __shape__: any; 27 | }; 28 | export declare type $expr_Insert = Expression<{ 29 | __kind__: ExpressionKind.Insert; 30 | __element__: El; 31 | __cardinality__: Cardinality.One; 32 | __expr__: $expr_PathNode; 33 | __shape__: InsertShape; 34 | unlessConflict(): $expr_InsertUnlessConflict; 37 | unlessConflict(conflictGetter: (scope: $scopify) => Conflict): $expr_InsertUnlessConflict; 38 | }>; 39 | export declare type $expr_InsertUnlessConflict = Expression<{ 40 | __kind__: ExpressionKind.InsertUnlessConflict; 41 | __element__: Conflict["else"] extends TypeSet ? Conflict["else"]["__element__"]["__name__"] extends El["__name__"] ? El : $Object : El; 42 | __cardinality__: Conflict["else"] extends TypeSet ? Conflict["else"]["__cardinality__"] : Cardinality.AtMostOne; 43 | __expr__: InsertBaseExpression; 44 | __conflict__: Conflict; 45 | }>; 46 | export declare function $insertify(expr: Omit<$expr_Insert, "unlessConflict">): $expr_Insert; 47 | export declare function $normaliseInsertShape(root: ObjectTypeSet, shape: { 48 | [key: string]: any; 49 | }, isUpdate?: boolean): { 50 | [key: string]: TypeSet | { 51 | "+=": TypeSet; 52 | } | { 53 | "-=": TypeSet; 54 | }; 55 | }; 56 | export declare function insert(root: Root, shape: InsertShape): $expr_Insert; 57 | export {}; 58 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/insert.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind, TypeKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify, $getScopedExpr } from "./path.mjs"; 6 | import { cast } from "./cast.mjs"; 7 | import { set } from "./set.mjs"; 8 | import { literal } from "./literal.mjs"; 9 | import { $getTypeByName } from "./literal.mjs"; 10 | function unlessConflict(conflictGetter) { 11 | const expr = { 12 | __kind__: ExpressionKind.InsertUnlessConflict, 13 | __element__: this.__element__, 14 | __cardinality__: Cardinality.AtMostOne, 15 | __expr__: this 16 | }; 17 | if (!conflictGetter) { 18 | expr.__conflict__ = { on: null }; 19 | return $expressionify(expr); 20 | } 21 | else { 22 | const scopedExpr = $getScopedExpr(this.__expr__); 23 | const conflict = conflictGetter(scopedExpr); 24 | expr.__conflict__ = conflict; 25 | if (conflict.else) { 26 | expr.__cardinality__ = conflict.else.__cardinality__; 27 | if (this.__element__.__name__ !== conflict.else.__element__.__name__) { 28 | expr.__element__ = $getTypeByName("std::Object"); 29 | } 30 | } 31 | return $expressionify(expr); 32 | } 33 | } 34 | export function $insertify(expr) { 35 | expr.unlessConflict = unlessConflict.bind(expr); 36 | return expr; 37 | } 38 | export function $normaliseInsertShape(root, shape, isUpdate = false) { 39 | const newShape = {}; 40 | for (const [key, _val] of Object.entries(shape)) { 41 | let val = _val; 42 | let setModify = null; 43 | if (isUpdate && _val != null && typeof _val === "object") { 44 | const valKeys = Object.keys(_val); 45 | if (valKeys.length === 1 && 46 | (valKeys[0] === "+=" || valKeys[0] === "-=")) { 47 | val = _val[valKeys[0]]; 48 | setModify = valKeys[0]; 49 | } 50 | } 51 | const pointer = root.__element__.__pointers__[key]; 52 | const isLinkProp = key[0] === "@"; 53 | if (!pointer && !isLinkProp) { 54 | throw new Error(`Could not find property pointer for ${isUpdate ? "update" : "insert"} shape key: '${key}'`); 55 | } 56 | if (val === undefined) 57 | continue; 58 | if (val === null || val === void 0 ? void 0 : val.__kind__) { 59 | if (val.__kind__ === ExpressionKind.Literal && 60 | val.__element__.__kind__ === TypeKind.range && 61 | val.__element__.__element__.__name__ === "std::number") { 62 | newShape[key] = literal(pointer.target, val.__value__); 63 | } 64 | else { 65 | newShape[key] = _val; 66 | } 67 | continue; 68 | } 69 | if (isLinkProp) { 70 | throw new Error(`Cannot assign plain data to link property '${key}'. Provide an expression instead.`); 71 | } 72 | if (pointer.__kind__ !== "property" && val !== null) { 73 | throw new Error(`Must provide subquery when assigning to link '${key}' in ${isUpdate ? "update" : "insert"} query.`); 74 | } 75 | const isMulti = pointer.cardinality === Cardinality.AtLeastOne || 76 | pointer.cardinality === Cardinality.Many; 77 | if (pointer.__kind__ === "property") { 78 | if (pointer.target.__name__ === "std::json") { 79 | } 80 | } 81 | const wrappedVal = val === null 82 | ? cast(pointer.target, null) 83 | : isMulti && Array.isArray(val) 84 | ? val.length === 0 85 | ? cast(pointer.target, null) 86 | : set(...val.map(v => literal(pointer.target, v))) 87 | : literal(pointer.target, val); 88 | newShape[key] = setModify 89 | ? { [setModify]: wrappedVal } 90 | : wrappedVal; 91 | } 92 | return newShape; 93 | } 94 | export function insert(root, shape) { 95 | if (typeof shape !== "object") { 96 | throw new Error(`invalid insert shape.${typeof shape === "function" 97 | ? " Hint: Insert shape is expected to be an object, " + 98 | "not a function returning a shape object." 99 | : ""}`); 100 | } 101 | const expr = { 102 | __kind__: ExpressionKind.Insert, 103 | __element__: root.__element__, 104 | __cardinality__: Cardinality.One, 105 | __expr__: root, 106 | __shape__: $normaliseInsertShape(root, shape) 107 | }; 108 | expr.unlessConflict = unlessConflict.bind(expr); 109 | return $expressionify($insertify(expr)); 110 | } 111 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/json.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export declare function jsonifyComplexParams(expr: any, _args: any): any; 5 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/json.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, TypeKind } from "edgedb/dist/reflection/index.js"; 5 | import { encodeB64 } from "edgedb/dist/primitives/buffer.js"; 6 | function jsonStringify(type, val) { 7 | if (type.__kind__ === TypeKind.array) { 8 | if (Array.isArray(val)) { 9 | return `[${val 10 | .map(item => jsonStringify(type.__element__, item)) 11 | .join()}]`; 12 | } 13 | throw new Error(`Param with array type is not an array`); 14 | } 15 | if (type.__kind__ === TypeKind.tuple) { 16 | if (!Array.isArray(val)) { 17 | throw new Error(`Param with tuple type is not an array`); 18 | } 19 | if (val.length !== type.__items__.length) { 20 | throw new Error(`Param with tuple type has incorrect number of items. Got ${val.length} expected ${type.__items__.length}`); 21 | } 22 | return `[${val 23 | .map((item, i) => jsonStringify(type.__items__[i], item)) 24 | .join()}]`; 25 | } 26 | if (type.__kind__ === TypeKind.namedtuple) { 27 | if (typeof val !== "object") { 28 | throw new Error(`Param with named tuple type is not an object`); 29 | } 30 | if (Object.keys(val).length !== Object.keys(type.__shape__).length) { 31 | throw new Error(`Param with named tuple type has incorrect number of items. Got ${Object.keys(val).length} expected ${Object.keys(type.__shape__).length}`); 32 | } 33 | return `{${Object.entries(val) 34 | .map(([key, item]) => { 35 | if (!type.__shape__[key]) { 36 | throw new Error(`Unexpected key in named tuple param: ${key}, expected keys: ${Object.keys(type.__shape__).join()}`); 37 | } 38 | return `"${key}": ${jsonStringify(type.__shape__[key], item)}`; 39 | }) 40 | .join()}}`; 41 | } 42 | if (type.__kind__ === TypeKind.scalar) { 43 | switch (type.__name__) { 44 | case "std::bigint": 45 | return val.toString(); 46 | case "std::json": 47 | return JSON.stringify(val); 48 | case "std::bytes": 49 | return `"${encodeB64(val)}"`; 50 | case "cfg::memory": 51 | return `"${val.toString()}"`; 52 | default: 53 | return JSON.stringify(val); 54 | } 55 | } 56 | if (type.__kind__ === TypeKind.enum) { 57 | return JSON.stringify(val); 58 | } 59 | throw new Error(`Invalid param type: ${type.__kind__}`); 60 | } 61 | export function jsonifyComplexParams(expr, _args) { 62 | if (_args && expr.__kind__ === ExpressionKind.WithParams) { 63 | const args = { ..._args }; 64 | for (const param of expr.__params__) { 65 | if (param.__isComplex__) { 66 | args[param.__name__] = jsonStringify(param.__element__, args[param.__name__]); 67 | } 68 | } 69 | return args; 70 | } 71 | return _args; 72 | } 73 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/literal.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { Expression, BaseType, BaseTypeToTsType, ScalarType } from "./typesystem"; 5 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index"; 6 | export declare type $expr_Literal = Expression<{ 7 | __element__: Type; 8 | __cardinality__: Cardinality.One; 9 | __kind__: ExpressionKind.Literal; 10 | __value__: any; 11 | }>; 12 | export declare function literal(type: T, value: BaseTypeToTsType): $expr_Literal; 13 | export declare const $nameMapping: Map; 14 | export declare function $getType(id: string): (val: any) => $expr_Literal; 15 | export declare function $getTypeByName(name: string): (val: any) => $expr_Literal; 16 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/literal.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { $expressionify } from "./path.mjs"; 5 | import { spec } from "./__spec__.mjs"; 6 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index.js"; 7 | import { makeType } from "./hydrate.mjs"; 8 | export function literal(type, value) { 9 | return $expressionify({ 10 | __element__: type, 11 | __cardinality__: Cardinality.One, 12 | __kind__: ExpressionKind.Literal, 13 | __value__: value 14 | }); 15 | } 16 | export const $nameMapping = new Map([ 17 | ...[...spec.values()].map(type => [type.name, type.id]), 18 | ["std::number", "00000000-0000-0000-0000-0000000001ff"] 19 | ]); 20 | export function $getType(id) { 21 | return makeType(spec, id, literal); 22 | } 23 | export function $getTypeByName(name) { 24 | return makeType(spec, $nameMapping.get(name), literal); 25 | } 26 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/modules/cfg.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "../reflection.mjs"; 5 | import * as _ from "../imports.mjs"; 6 | const AllowBareDDL = $.makeType(_.spec, "1fd936ec-b413-11ed-960e-c15f44cb5808", _.syntax.literal); 7 | 8 | const ConnectionTransport = $.makeType(_.spec, "1fd9936c-b413-11ed-abef-01655181ec17", _.syntax.literal); 9 | 10 | const memory = $.makeType(_.spec, "00000000-0000-0000-0000-000000000130", _.syntax.literal); 11 | 12 | const $ConfigObject = $.makeType(_.spec, "1fd9f348-b413-11ed-8358-29d6f0278a39", _.syntax.literal); 13 | 14 | const ConfigObject= _.syntax.$PathNode($.$toSet($ConfigObject, $.Cardinality.Many), null); 15 | 16 | const $AbstractConfig = $.makeType(_.spec, "2008948c-b413-11ed-82a0-950aba2d3c56", _.syntax.literal); 17 | 18 | const AbstractConfig= _.syntax.$PathNode($.$toSet($AbstractConfig, $.Cardinality.Many), null); 19 | 20 | const $Auth = $.makeType(_.spec, "1ffbc324-b413-11ed-bd04-7d8694d31ca4", _.syntax.literal); 21 | 22 | const Auth= _.syntax.$PathNode($.$toSet($Auth, $.Cardinality.Many), null); 23 | 24 | const $AuthMethod = $.makeType(_.spec, "1fdff2de-b413-11ed-b498-afecefe7e4f8", _.syntax.literal); 25 | 26 | const AuthMethod= _.syntax.$PathNode($.$toSet($AuthMethod, $.Cardinality.Many), null); 27 | 28 | const $Config = $.makeType(_.spec, "2020d448-b413-11ed-b0a0-e965a0c51e83", _.syntax.literal); 29 | 30 | const Config= _.syntax.$PathNode($.$toSet($Config, $.Cardinality.Many), null); 31 | 32 | const $DatabaseConfig = $.makeType(_.spec, "2054b812-b413-11ed-8dc2-e19c0cc67a9b", _.syntax.literal); 33 | 34 | const DatabaseConfig= _.syntax.$PathNode($.$toSet($DatabaseConfig, $.Cardinality.Many), null); 35 | 36 | const $InstanceConfig = $.makeType(_.spec, "203a9996-b413-11ed-bc69-9ddb7bd58450", _.syntax.literal); 37 | 38 | const InstanceConfig= _.syntax.$PathNode($.$toSet($InstanceConfig, $.Cardinality.Many), null); 39 | 40 | const $JWT = $.makeType(_.spec, "1ff44bb2-b413-11ed-bb8c-97117b7e0548", _.syntax.literal); 41 | 42 | const JWT= _.syntax.$PathNode($.$toSet($JWT, $.Cardinality.Many), null); 43 | 44 | const $SCRAM = $.makeType(_.spec, "1fed1cac-b413-11ed-a939-57aebde61d9d", _.syntax.literal); 45 | 46 | const SCRAM= _.syntax.$PathNode($.$toSet($SCRAM, $.Cardinality.Many), null); 47 | 48 | const $Trust = $.makeType(_.spec, "1fe672a8-b413-11ed-9375-951ed51f4766", _.syntax.literal); 49 | 50 | const Trust= _.syntax.$PathNode($.$toSet($Trust, $.Cardinality.Many), null); 51 | 52 | function get_config_json(...args) { 53 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('cfg::get_config_json', args, _.spec, [ 54 | {args: [], namedArgs: {"sources": {typeId: "05f91774-15ea-9001-038e-092c1cad80af", optional: true, setoftype: false, variadic: false}, "max_source": {typeId: "00000000-0000-0000-0000-000000000101", optional: true, setoftype: false, variadic: false}}, returnTypeId: "00000000-0000-0000-0000-00000000010f"}, 55 | ]); 56 | return _.syntax.$expressionify({ 57 | __kind__: $.ExpressionKind.Function, 58 | __element__: returnType, 59 | __cardinality__: cardinality, 60 | __name__: "cfg::get_config_json", 61 | __args__: positionalArgs, 62 | __namedargs__: namedArgs, 63 | }); 64 | }; 65 | 66 | 67 | 68 | export { AllowBareDDL, ConnectionTransport, memory, $ConfigObject, ConfigObject, $AbstractConfig, AbstractConfig, $Auth, Auth, $AuthMethod, AuthMethod, $Config, Config, $DatabaseConfig, DatabaseConfig, $InstanceConfig, InstanceConfig, $JWT, JWT, $SCRAM, SCRAM, $Trust, Trust }; 69 | 70 | const __defaultExports = { 71 | "AllowBareDDL": AllowBareDDL, 72 | "ConnectionTransport": ConnectionTransport, 73 | "memory": memory, 74 | "ConfigObject": ConfigObject, 75 | "AbstractConfig": AbstractConfig, 76 | "Auth": Auth, 77 | "AuthMethod": AuthMethod, 78 | "Config": Config, 79 | "DatabaseConfig": DatabaseConfig, 80 | "InstanceConfig": InstanceConfig, 81 | "JWT": JWT, 82 | "SCRAM": SCRAM, 83 | "Trust": Trust, 84 | "get_config_json": get_config_json 85 | }; 86 | export default __defaultExports; 87 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/modules/default.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "../reflection"; 5 | import * as _ from "../imports"; 6 | import type * as _std from "./std"; 7 | export declare type $Role = { 8 | "admin": $.$expr_Literal<$Role>; 9 | "user": $.$expr_Literal<$Role>; 10 | } & $.EnumType<"default::Role", ["admin", "user"]>; 11 | declare const Role: $Role 12 | 13 | export declare type $HasTimestampλShape = $.typeutil.flatten<_std.$Object_1bdf7c72b41311edb12de75f7ba87378λShape & { 14 | "created_at": $.PropertyDesc<_std.$datetime, $.Cardinality.One, false, false, false, true>; 15 | }>; 16 | declare type $HasTimestamp = $.ObjectType<"default::HasTimestamp", $HasTimestampλShape, null, [ 17 | ..._std.$Object_1bdf7c72b41311edb12de75f7ba87378['__exclusives__'], 18 | ]>; 19 | declare const $HasTimestamp: $HasTimestamp 20 | 21 | declare const HasTimestamp: $.$expr_PathNode<$.TypeSet<$HasTimestamp, $.Cardinality.Many>, null> 22 | 23 | export declare type $CommentλShape = $.typeutil.flatten<$HasTimestampλShape & { 24 | "content": $.PropertyDesc<_std.$str, $.Cardinality.One, false, false, false, false>; 25 | "author": $.LinkDesc<$User, $.Cardinality.One, {}, false, false, false, false>; 26 | "post": $.LinkDesc<$Post, $.Cardinality.One, {}, false, false, false, false>; 27 | "; 28 | "; 29 | }>; 30 | declare type $Comment = $.ObjectType<"default::Comment", $CommentλShape, null, [ 31 | ...$HasTimestamp['__exclusives__'], 32 | ]>; 33 | declare const $Comment: $Comment 34 | 35 | declare const Comment: $.$expr_PathNode<$.TypeSet<$Comment, $.Cardinality.Many>, null> 36 | 37 | export declare type $PostλShape = $.typeutil.flatten<$HasTimestampλShape & { 38 | "content": $.PropertyDesc<_std.$str, $.Cardinality.One, false, false, false, false>; 39 | "image_src": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 40 | "slug": $.PropertyDesc<_std.$str, $.Cardinality.One, true, false, false, false>; 41 | "snippet": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 42 | "title": $.PropertyDesc<_std.$str, $.Cardinality.One, false, false, false, false>; 43 | "author": $.LinkDesc<$User, $.Cardinality.One, {}, false, false, false, false>; 44 | "tags": $.LinkDesc<$Tag, $.Cardinality.Many, {}, false, false, false, false>; 45 | "comments": $.LinkDesc<$Comment, $.Cardinality.Many, {}, false, true, false, false>; 46 | "; 47 | "; 48 | }>; 49 | declare type $Post = $.ObjectType<"default::Post", $PostλShape, null, [ 50 | ...$HasTimestamp['__exclusives__'], 51 | {slug: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, 52 | ]>; 53 | declare const $Post: $Post 54 | 55 | declare const Post: $.$expr_PathNode<$.TypeSet<$Post, $.Cardinality.Many>, null> 56 | 57 | export declare type $TagλShape = $.typeutil.flatten<_std.$Object_1bdf7c72b41311edb12de75f7ba87378λShape & { 58 | "name": $.PropertyDesc<_std.$str, $.Cardinality.One, true, false, false, false>; 59 | "; 60 | "; 61 | }>; 62 | declare type $Tag = $.ObjectType<"default::Tag", $TagλShape, null, [ 63 | ..._std.$Object_1bdf7c72b41311edb12de75f7ba87378['__exclusives__'], 64 | {name: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, 65 | ]>; 66 | declare const $Tag: $Tag 67 | 68 | declare const Tag: $.$expr_PathNode<$.TypeSet<$Tag, $.Cardinality.Many>, null> 69 | 70 | export declare type $UserλShape = $.typeutil.flatten<$HasTimestampλShape & { 71 | "email": $.PropertyDesc<_std.$str, $.Cardinality.One, true, false, false, false>; 72 | "first_name": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 73 | "last_name": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 74 | "avatar_src": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 75 | "full_name": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, true, false, false>; 76 | "password_hash": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, false>; 77 | "role": $.PropertyDesc<$Role, $.Cardinality.AtMostOne, false, false, false, true>; 78 | "user_auth_token": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, true, false, false, false>; 79 | "username": $.PropertyDesc<_std.$str, $.Cardinality.One, true, false, false, false>; 80 | "; 81 | "; 82 | "; 83 | }>; 84 | declare type $User = $.ObjectType<"default::User", $UserλShape, null, [ 85 | ...$HasTimestamp['__exclusives__'], 86 | {user_auth_token: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, 87 | {username: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, 88 | {email: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, 89 | ]>; 90 | declare const $User: $User 91 | 92 | declare const User: $.$expr_PathNode<$.TypeSet<$User, $.Cardinality.Many>, null> 93 | 94 | 95 | 96 | export { Role, $HasTimestamp, HasTimestamp, $Comment, Comment, $Post, Post, $Tag, Tag, $User, User }; 97 | 98 | declare type __defaultExports = { 99 | "Role": typeof Role; 100 | "HasTimestamp": typeof HasTimestamp; 101 | "Comment": typeof Comment; 102 | "Post": typeof Post; 103 | "Tag": typeof Tag; 104 | "User": typeof User 105 | }; 106 | declare const __defaultExports: __defaultExports; 107 | export default __defaultExports; 108 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/modules/default.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "../reflection.mjs"; 5 | import * as _ from "../imports.mjs"; 6 | const Role = $.makeType(_.spec, "16a0a1e8-bce5-11ed-a6a8-ed4719dbfde7", _.syntax.literal); 7 | 8 | const $HasTimestamp = $.makeType(_.spec, "169e4362-bce5-11ed-aad8-3137ce08c83e", _.syntax.literal); 9 | 10 | const HasTimestamp= _.syntax.$PathNode($.$toSet($HasTimestamp, $.Cardinality.Many), null); 11 | 12 | const $Comment = $.makeType(_.spec, "169f6e9a-bce5-11ed-bc95-291739ba819c", _.syntax.literal); 13 | 14 | const Comment= _.syntax.$PathNode($.$toSet($Comment, $.Cardinality.Many), null); 15 | 16 | const $Post = $.makeType(_.spec, "16a56f5c-bce5-11ed-b822-bd748f7efdd1", _.syntax.literal); 17 | 18 | const Post= _.syntax.$PathNode($.$toSet($Post, $.Cardinality.Many), null); 19 | 20 | const $Tag = $.makeType(_.spec, "16a411fc-bce5-11ed-a508-5d7587d3d042", _.syntax.literal); 21 | 22 | const Tag= _.syntax.$PathNode($.$toSet($Tag, $.Cardinality.Many), null); 23 | 24 | const $User = $.makeType(_.spec, "16a0ad78-bce5-11ed-b3d1-7bf59907d7b4", _.syntax.literal); 25 | 26 | const User= _.syntax.$PathNode($.$toSet($User, $.Cardinality.Many), null); 27 | 28 | 29 | 30 | export { Role, $HasTimestamp, HasTimestamp, $Comment, Comment, $Post, Post, $Tag, Tag, $User, User }; 31 | 32 | const __defaultExports = { 33 | "Role": Role, 34 | "HasTimestamp": HasTimestamp, 35 | "Comment": Comment, 36 | "Post": Post, 37 | "Tag": Tag, 38 | "User": User 39 | }; 40 | export default __defaultExports; 41 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/modules/sys.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "../reflection.mjs"; 5 | import * as _ from "../imports.mjs"; 6 | const TransactionIsolation = $.makeType(_.spec, "1f728ca8-b413-11ed-a7df-53776b71759f", _.syntax.literal); 7 | 8 | const VersionStage = $.makeType(_.spec, "1f72eaae-b413-11ed-ba90-83e65fa53ec8", _.syntax.literal); 9 | 10 | const $SystemObject = $.makeType(_.spec, "1f7348b4-b413-11ed-9d53-4b64e4639147", _.syntax.literal); 11 | 12 | const SystemObject= _.syntax.$PathNode($.$toSet($SystemObject, $.Cardinality.Many), null); 13 | 14 | const $Database = $.makeType(_.spec, "1f83a510-b413-11ed-accb-0182adf43866", _.syntax.literal); 15 | 16 | const Database= _.syntax.$PathNode($.$toSet($Database, $.Cardinality.Many), null); 17 | 18 | const $ExtensionPackage = $.makeType(_.spec, "1f96143e-b413-11ed-89c8-d742e337a86e", _.syntax.literal); 19 | 20 | const ExtensionPackage= _.syntax.$PathNode($.$toSet($ExtensionPackage, $.Cardinality.Many), null); 21 | 22 | const $Role = $.makeType(_.spec, "1fab487c-b413-11ed-98a8-156b6596e307", _.syntax.literal); 23 | 24 | const Role= _.syntax.$PathNode($.$toSet($Role, $.Cardinality.Many), null); 25 | 26 | function get_version(...args) { 27 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('sys::get_version', args, _.spec, [ 28 | {args: [], returnTypeId: "09dc6990-b15e-7212-00cf-d34184678c78"}, 29 | ]); 30 | return _.syntax.$expressionify({ 31 | __kind__: $.ExpressionKind.Function, 32 | __element__: returnType, 33 | __cardinality__: cardinality, 34 | __name__: "sys::get_version", 35 | __args__: positionalArgs, 36 | __namedargs__: namedArgs, 37 | }); 38 | }; 39 | 40 | function get_version_as_str(...args) { 41 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('sys::get_version_as_str', args, _.spec, [ 42 | {args: [], returnTypeId: "00000000-0000-0000-0000-000000000101"}, 43 | ]); 44 | return _.syntax.$expressionify({ 45 | __kind__: $.ExpressionKind.Function, 46 | __element__: returnType, 47 | __cardinality__: cardinality, 48 | __name__: "sys::get_version_as_str", 49 | __args__: positionalArgs, 50 | __namedargs__: namedArgs, 51 | }); 52 | }; 53 | 54 | function get_instance_name(...args) { 55 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('sys::get_instance_name', args, _.spec, [ 56 | {args: [], returnTypeId: "00000000-0000-0000-0000-000000000101"}, 57 | ]); 58 | return _.syntax.$expressionify({ 59 | __kind__: $.ExpressionKind.Function, 60 | __element__: returnType, 61 | __cardinality__: cardinality, 62 | __name__: "sys::get_instance_name", 63 | __args__: positionalArgs, 64 | __namedargs__: namedArgs, 65 | }); 66 | }; 67 | 68 | function get_transaction_isolation(...args) { 69 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('sys::get_transaction_isolation', args, _.spec, [ 70 | {args: [], returnTypeId: "1f728ca8-b413-11ed-a7df-53776b71759f"}, 71 | ]); 72 | return _.syntax.$expressionify({ 73 | __kind__: $.ExpressionKind.Function, 74 | __element__: returnType, 75 | __cardinality__: cardinality, 76 | __name__: "sys::get_transaction_isolation", 77 | __args__: positionalArgs, 78 | __namedargs__: namedArgs, 79 | }); 80 | }; 81 | 82 | function get_current_database(...args) { 83 | const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('sys::get_current_database', args, _.spec, [ 84 | {args: [], returnTypeId: "00000000-0000-0000-0000-000000000101"}, 85 | ]); 86 | return _.syntax.$expressionify({ 87 | __kind__: $.ExpressionKind.Function, 88 | __element__: returnType, 89 | __cardinality__: cardinality, 90 | __name__: "sys::get_current_database", 91 | __args__: positionalArgs, 92 | __namedargs__: namedArgs, 93 | }); 94 | }; 95 | 96 | 97 | 98 | export { TransactionIsolation, VersionStage, $SystemObject, SystemObject, $Database, Database, $ExtensionPackage, ExtensionPackage, $Role, Role }; 99 | 100 | const __defaultExports = { 101 | "TransactionIsolation": TransactionIsolation, 102 | "VersionStage": VersionStage, 103 | "SystemObject": SystemObject, 104 | "Database": Database, 105 | "ExtensionPackage": ExtensionPackage, 106 | "Role": Role, 107 | "get_version": get_version, 108 | "get_version_as_str": get_version_as_str, 109 | "get_instance_name": get_instance_name, 110 | "get_transaction_isolation": get_transaction_isolation, 111 | "get_current_database": get_current_database 112 | }; 113 | export default __defaultExports; 114 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/params.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { Executor } from "edgedb"; 5 | import { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index"; 6 | import type { Expression, ParamType, setToTsType, TypeSet, BaseTypeToTsType } from "./typesystem"; 7 | export declare type $expr_OptionalParam = { 8 | __kind__: ExpressionKind.OptionalParam; 9 | __type__: Type; 10 | }; 11 | export declare function optional(type: Type): $expr_OptionalParam; 12 | export declare type QueryableWithParamsExpression = Expression & { 15 | run(cxn: Executor, args: paramsToParamArgs): Promise>; 16 | runJSON(cxn: Executor, args: paramsToParamArgs): Promise; 17 | }; 18 | export declare type $expr_WithParams = QueryableWithParamsExpression<{ 21 | __kind__: ExpressionKind.WithParams; 22 | __element__: Expr["__element__"]; 23 | __cardinality__: Expr["__cardinality__"]; 24 | __expr__: Expr; 25 | __params__: $expr_Param[]; 26 | }, Params>; 27 | declare type paramsToParamArgs = { 30 | [key in keyof Params as Params[key] extends ParamType ? key : never]: Params[key] extends ParamType ? Readonly> : never; 31 | } & { 32 | [key in keyof Params as Params[key] extends $expr_OptionalParam ? key : never]?: Params[key] extends $expr_OptionalParam ? Readonly | null> : never; 33 | }; 34 | export declare type $expr_Param = Expression<{ 35 | __kind__: ExpressionKind.Param; 36 | __element__: Type; 37 | __cardinality__: Optional extends true ? Cardinality.AtMostOne : Cardinality.One; 38 | __name__: Name; 39 | __isComplex__: boolean; 40 | }>; 41 | declare type paramsToParamExprs = { 44 | [key in keyof Params]: Params[key] extends $expr_OptionalParam ? $expr_Param : Params[key] extends ParamType ? $expr_Param : never; 45 | }; 46 | export declare function params(paramsDef: Params, expr: (params: paramsToParamExprs) => Expr): $expr_WithParams; 49 | export {}; 50 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/params.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality, TypeKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify } from "./path.mjs"; 6 | export function optional(type) { 7 | return { 8 | __kind__: ExpressionKind.OptionalParam, 9 | __type__: type 10 | }; 11 | } 12 | const complexParamKinds = new Set([TypeKind.tuple, TypeKind.namedtuple]); 13 | export function params(paramsDef, expr) { 14 | const paramExprs = {}; 15 | for (const [key, param] of Object.entries(paramsDef)) { 16 | const paramType = param.__kind__ === ExpressionKind.OptionalParam ? param.__type__ : param; 17 | const isComplex = complexParamKinds.has(paramType.__kind__) || 18 | (paramType.__kind__ === TypeKind.array && 19 | complexParamKinds.has(paramType.__element__.__kind__)); 20 | paramExprs[key] = $expressionify({ 21 | __kind__: ExpressionKind.Param, 22 | __element__: paramType, 23 | __cardinality__: param.__kind__ === ExpressionKind.OptionalParam 24 | ? Cardinality.AtMostOne 25 | : Cardinality.One, 26 | __name__: key, 27 | __isComplex__: isComplex 28 | }); 29 | } 30 | const returnExpr = expr(paramExprs); 31 | return $expressionify({ 32 | __kind__: ExpressionKind.WithParams, 33 | __element__: returnExpr.__element__, 34 | __cardinality__: returnExpr.__cardinality__, 35 | __expr__: returnExpr, 36 | __params__: Object.values(paramExprs) 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/path.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality, typeutil } from "edgedb/dist/reflection/index"; 5 | import { cardutil } from "./cardinality"; 6 | import type { BaseType, Expression, LinkDesc, ObjectType, ObjectTypePointers, ObjectTypeSet, PropertyDesc, PropertyShape, TypeSet } from "./typesystem"; 7 | declare type getChildOfObjectTypeSet = TypeSet>; 8 | export interface PathParent { 9 | type: Parent; 10 | linkName: L; 11 | } 12 | export declare type $linkPropify = Root extends { 13 | __parent__: PathParent; 14 | } ? Parent["__element__"]["__pointers__"][L] extends LinkDesc ? pathifyLinkProps> : {} : unknown; 15 | export declare type $pathify = Root extends ObjectTypeSet ? ObjectTypeSet extends Root ? {} : pathifyPointers & pathifyShape & $linkPropify : {}; 16 | export declare type pathifyPointers = ObjectTypePointers extends Root["__element__"]["__pointers__"] ? unknown : { 17 | [k in keyof Root["__element__"]["__pointers__"] & string]: Root["__element__"]["__pointers__"][k] extends PropertyDesc ? $expr_PathLeaf, { 18 | type: anonymizeObjectTypeSet; 19 | linkName: k; 20 | }> : Root["__element__"]["__pointers__"][k] extends LinkDesc ? getChildOfObjectTypeSet extends ObjectTypeSet ? $expr_PathNode, { 21 | type: anonymizeObjectTypeSet; 22 | linkName: k; 23 | }> : unknown : unknown; 24 | }; 25 | declare type anonymizeObjectTypeSet = typeutil.flatten<{ 26 | __element__: ObjectType; 29 | __cardinality__: T["__cardinality__"]; 30 | }>; 31 | export declare type pathifyShape = string extends keyof Shape ? {} : { 34 | [k in keyof Shape & string]: Shape[k] extends ObjectTypeSet ? $expr_PathNode>, { 35 | type: Root; 36 | linkName: k; 37 | }> : Shape[k] extends TypeSet ? $expr_PathLeaf>, { 38 | type: Root; 39 | linkName: k; 40 | }> : unknown; 41 | }; 42 | declare type pathifyLinkProps = { 43 | [k in keyof Props & string]: Props[k] extends PropertyDesc ? $expr_PathLeaf>, { 44 | type: $expr_PathNode; 45 | linkName: k; 46 | }> : unknown; 47 | }; 48 | export declare type getPropsShape = typeutil.flatten>; 51 | export declare type $expr_PathNode = Expression<{ 52 | __element__: Root["__element__"]; 53 | __cardinality__: Root["__cardinality__"]; 54 | __parent__: Parent; 55 | __kind__: ExpressionKind.PathNode; 56 | "*": getPropsShape; 57 | }>; 58 | export declare type $expr_TypeIntersection = Expression<{ 59 | __element__: Intersection; 60 | __cardinality__: Card; 61 | __kind__: ExpressionKind.TypeIntersection; 62 | __expr__: TypeSet; 63 | }>; 64 | export declare type $expr_PathLeaf = Expression<{ 65 | __element__: Root["__element__"]; 66 | __cardinality__: Root["__cardinality__"]; 67 | __kind__: ExpressionKind.PathLeaf; 68 | __parent__: Parent; 69 | }>; 70 | export declare type ExpressionRoot = { 71 | __element__: BaseType; 72 | __cardinality__: Cardinality; 73 | __kind__: ExpressionKind; 74 | }; 75 | declare function PathLeaf(root: Root, parent: Parent, exclusive: Exclusive, scopeRoot?: TypeSet | null): $expr_PathLeaf; 76 | declare function PathNode(root: Root, parent: Parent, scopeRoot?: TypeSet | null): $expr_PathNode; 77 | export declare function $pathify(_root: Root): $pathify; 78 | export declare function $jsonDestructure(_expr: ExpressionRoot): any; 79 | export declare function $expressionify(_expr: T): Expression; 80 | export declare function $getScopedExpr(expr: T, existingScopes?: Set): Expression; 81 | export { PathLeaf as $PathLeaf, PathNode as $PathNode }; 82 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/query.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type * as edgedb from "edgedb"; 5 | export declare function $queryFunc(this: any, cxn: edgedb.Executor, args: any): Promise; 6 | export declare function $queryFuncJSON(this: any, cxn: edgedb.Executor, args: any): Promise; 7 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/query.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Cardinality, ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { jsonifyComplexParams } from "./json.mjs"; 6 | import { select } from "./select.mjs"; 7 | const runnableExpressionKinds = new Set([ 8 | ExpressionKind.Select, 9 | ExpressionKind.Update, 10 | ExpressionKind.Insert, 11 | ExpressionKind.InsertUnlessConflict, 12 | ExpressionKind.Delete, 13 | ExpressionKind.Group, 14 | ExpressionKind.For, 15 | ExpressionKind.With, 16 | ExpressionKind.WithParams 17 | ]); 18 | const wrappedExprCache = new WeakMap(); 19 | export async function $queryFunc(cxn, args) { 20 | var _a; 21 | const expr = runnableExpressionKinds.has(this.__kind__) 22 | ? this 23 | : (_a = wrappedExprCache.get(this)) !== null && _a !== void 0 ? _a : wrappedExprCache.set(this, select(this)).get(this); 24 | const _args = jsonifyComplexParams(expr, args); 25 | const query = expr.toEdgeQL(); 26 | if (expr.__cardinality__ === Cardinality.One || 27 | expr.__cardinality__ === Cardinality.AtMostOne || 28 | expr.__cardinality__ === Cardinality.Empty) { 29 | return cxn.querySingle(query, _args); 30 | } 31 | else { 32 | return cxn.query(query, _args); 33 | } 34 | } 35 | export async function $queryFuncJSON(cxn, args) { 36 | var _a; 37 | const expr = runnableExpressionKinds.has(this.__kind__) 38 | ? this 39 | : (_a = wrappedExprCache.get(this)) !== null && _a !== void 0 ? _a : wrappedExprCache.set(this, select(this)).get(this); 40 | const _args = jsonifyComplexParams(expr, args); 41 | if (expr.__cardinality__ === Cardinality.One || 42 | expr.__cardinality__ === Cardinality.AtMostOne) { 43 | return cxn.querySingleJSON(expr.toEdgeQL(), _args); 44 | } 45 | else { 46 | return cxn.queryJSON(expr.toEdgeQL(), _args); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/range.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { LocalDate, LocalDateTime, Duration } from "edgedb"; 5 | import { Range } from "edgedb"; 6 | import type { cardutil } from "./cardinality"; 7 | import type { RangeType, getPrimitiveBaseType, TypeSet, BaseType } from "./typesystem"; 8 | import type { $expr_Literal } from "./literal"; 9 | import type { $number, $decimal, $datetime, $duration, $bool } from "./modules/std"; 10 | import type { $local_date, $local_datetime } from "./modules/cal"; 11 | import type { literalToScalarType, orScalarLiteral } from "./castMaps"; 12 | import { $expr_Function } from "./funcops"; 13 | declare type $anypoint = $number | $local_date | $decimal | $datetime | $local_datetime | $duration; 14 | declare function range(element: Element): RangeType; 15 | declare function range(val: Range): $expr_Literal>>>; 16 | declare function range>; 18 | inc_upper?: orScalarLiteral>; 19 | empty?: orScalarLiteral>; 20 | }, P1 extends orScalarLiteral> | undefined, P2 extends orScalarLiteral ? $anypoint : getPrimitiveBaseType>>> | undefined>(namedArgs: NamedArgs, lower?: P1, upper?: P2): $expr_Function extends $anypoint ? literalToScalarType : literalToScalarType extends $anypoint ? literalToScalarType : $anypoint>, cardutil.multiplyCardinalities, cardutil.optionalParamCardinality>, cardutil.optionalParamCardinality>, cardutil.optionalParamCardinality>, cardutil.optionalParamCardinality>>; 21 | declare function range> | undefined, P2 extends orScalarLiteral ? $anypoint : getPrimitiveBaseType>>> | undefined>(lower?: P1, upper?: P2): $expr_Function extends $anypoint ? literalToScalarType : literalToScalarType extends $anypoint ? literalToScalarType : $anypoint>, cardutil.multiplyCardinalities, cardutil.optionalParamCardinality>>; 22 | export { range as $range }; 23 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/range.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { Range } from "edgedb"; 5 | import { TypeKind, ExpressionKind } from "edgedb/dist/reflection/index.js"; 6 | import { literalToTypeSet } from "./castMaps.mjs"; 7 | import { spec } from "./__spec__.mjs"; 8 | import { literal, $nameMapping } from "./literal.mjs"; 9 | import { $resolveOverload } from "./funcops.mjs"; 10 | import { $expressionify } from "./path.mjs"; 11 | function range(...args) { 12 | var _a; 13 | if (args.length === 1) { 14 | const arg = args[0]; 15 | if (arg instanceof Range) { 16 | if (arg.lower === null && arg.upper === null) { 17 | throw new Error(`Can't create literal expression from unbounded range. Try this instead:\n\n e.range(e.cast(e.int64, e.set()), e.cast(e.int64, e.set()))`); 18 | } 19 | if (arg.isEmpty) { 20 | throw new Error(`Can't create literal expression from empty range.`); 21 | } 22 | return literal(range(literalToTypeSet((_a = arg.lower) !== null && _a !== void 0 ? _a : arg.upper).__element__), arg); 23 | } 24 | if (arg.__kind__ && !arg.__element__) { 25 | return { 26 | __kind__: TypeKind.range, 27 | __name__: `range<${arg.__name__}>`, 28 | __element__: arg 29 | }; 30 | } 31 | } 32 | const { returnType, cardinality, args: positionalArgs, namedArgs } = $resolveOverload("std::range", args, spec, [ 33 | { 34 | args: [ 35 | { 36 | typeId: $nameMapping.get("std::anypoint"), 37 | optional: true, 38 | setoftype: false, 39 | variadic: false 40 | }, 41 | { 42 | typeId: $nameMapping.get("std::anypoint"), 43 | optional: true, 44 | setoftype: false, 45 | variadic: false 46 | } 47 | ], 48 | namedArgs: { 49 | inc_lower: { 50 | typeId: $nameMapping.get("std::bool"), 51 | optional: true, 52 | setoftype: false, 53 | variadic: false 54 | }, 55 | inc_upper: { 56 | typeId: $nameMapping.get("std::bool"), 57 | optional: true, 58 | setoftype: false, 59 | variadic: false 60 | }, 61 | empty: { 62 | typeId: $nameMapping.get("std::bool"), 63 | optional: true, 64 | setoftype: false, 65 | variadic: false 66 | } 67 | }, 68 | returnTypeId: $nameMapping.get("range") 69 | } 70 | ]); 71 | return $expressionify({ 72 | __kind__: ExpressionKind.Function, 73 | __element__: returnType, 74 | __cardinality__: cardinality, 75 | __name__: "std::range", 76 | __args__: positionalArgs, 77 | __namedargs__: namedArgs 78 | }); 79 | } 80 | export { range as $range }; 81 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/reflection.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * from "edgedb/dist/reflection/index"; 5 | export * from "./typesystem"; 6 | export { cardutil } from "./cardinality"; 7 | export type { $expr_Literal } from "./literal"; 8 | export type { $expr_PathNode, $expr_PathLeaf } from "./path"; 9 | export type { $expr_Function, $expr_Operator } from "./funcops"; 10 | export { makeType, $mergeObjectTypes } from "./hydrate"; 11 | export type { mergeObjectTypes } from "./hydrate"; 12 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/reflection.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * from "edgedb/dist/reflection/index.js"; 5 | export * from "./typesystem.mjs"; 6 | export { cardutil } from "./cardinality.mjs"; 7 | export { makeType, $mergeObjectTypes } from "./hydrate.mjs"; 8 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/set.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { ArrayType, BaseTypeTuple, BaseType, NamedTupleType, ObjectTypeSet, TypeSet, TupleType, Expression, ObjectType, getPrimitiveBaseType, SomeType } from "./typesystem"; 6 | import { mergeObjectTypes } from "./hydrate"; 7 | import * as castMaps from "./castMaps"; 8 | export declare function getSharedParent(a: SomeType, b: SomeType): SomeType; 9 | export { set } from "./setImpl"; 10 | export declare type $expr_Set = Expression<{ 11 | __element__: Set["__element__"]; 12 | __cardinality__: Set["__cardinality__"]; 13 | __exprs__: TypeSet[]; 14 | __kind__: ExpressionKind.Set; 15 | }>; 16 | declare type mergeTypeTuples = { 17 | [k in keyof AItems]: k extends keyof BItems ? getSharedParentPrimitive : never; 18 | }; 19 | export declare type getSharedParentPrimitive = A extends undefined ? B extends undefined ? undefined : B : B extends undefined ? A : A extends ArrayType ? B extends ArrayType ? ArrayType> : never : A extends NamedTupleType ? B extends NamedTupleType ? NamedTupleType<{ 20 | [k in keyof AShape & keyof BShape]: castMaps.getSharedParentScalar; 21 | }> : never : A extends TupleType ? B extends TupleType ? mergeTypeTuples extends BaseTypeTuple ? TupleType> : never : never : castMaps.getSharedParentScalar; 22 | declare type _getSharedParentPrimitiveVariadic = Types extends [infer U] ? U : Types extends [infer A, infer B, ...infer Rest] ? _getSharedParentPrimitiveVariadic<[ 23 | getSharedParentPrimitive, 24 | ...Rest 25 | ]> : never; 26 | export declare type getSharedParentPrimitiveVariadic = _getSharedParentPrimitiveVariadic; 27 | export declare type LooseTypeSet = { 28 | __element__: T; 29 | __cardinality__: C; 30 | }; 31 | export type { mergeObjectTypes }; 32 | declare type _mergeObjectTypesVariadic = Types extends [infer U] ? U : Types extends [infer A, infer B, ...infer Rest] ? A extends ObjectType ? B extends ObjectType ? mergeObjectTypes extends BaseType ? mergeObjectTypesVariadic<[mergeObjectTypes, ...Rest]> : never : never : never : never; 33 | export declare type mergeObjectTypesVariadic = _mergeObjectTypesVariadic; 34 | export declare type getTypesFromExprs = { 35 | [k in keyof Exprs]: Exprs[k] extends TypeSet ? getPrimitiveBaseType : never; 36 | }; 37 | export declare type getTypesFromObjectExprs = { 38 | [k in keyof Exprs]: Exprs[k] extends TypeSet ? El : never; 39 | }; 40 | export declare type getCardsFromExprs = { 41 | [k in keyof Exprs]: Exprs[k] extends TypeSet ? Card : never; 42 | }; 43 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/set.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { TypeKind } from "edgedb/dist/reflection/index.js"; 5 | import { $mergeObjectTypes } from "./hydrate.mjs"; 6 | import * as castMaps from "./castMaps.mjs"; 7 | export function getSharedParent(a, b) { 8 | if (a.__kind__ !== b.__kind__) { 9 | throw new Error(`Incompatible array types: ${a.__name__} and ${b.__name__}`); 10 | } 11 | if (a.__kind__ === TypeKind.scalar && b.__kind__ === TypeKind.scalar) { 12 | return castMaps.getSharedParentScalar(a, b); 13 | } 14 | else if (a.__kind__ === TypeKind.object && 15 | b.__kind__ === TypeKind.object) { 16 | return $mergeObjectTypes(a, b); 17 | } 18 | else if (a.__kind__ === TypeKind.tuple && b.__kind__ === TypeKind.tuple) { 19 | if (a.__items__.length !== b.__items__.length) { 20 | throw new Error(`Incompatible tuple types: ${a.__name__} and ${b.__name__}`); 21 | } 22 | try { 23 | const items = a.__items__.map((_, i) => { 24 | if (!a.__items__[i] || !b.__items__[i]) { 25 | throw new Error(); 26 | } 27 | return getSharedParent(a.__items__[i], b.__items__[i]); 28 | }); 29 | return { 30 | __kind__: TypeKind.tuple, 31 | __name__: `tuple<${items.map(item => item.__name__).join(", ")}>`, 32 | __items__: items 33 | }; 34 | } 35 | catch (err) { 36 | throw new Error(`Incompatible tuple types: ${a.__name__} and ${b.__name__}`); 37 | } 38 | } 39 | else if (a.__kind__ === TypeKind.namedtuple && 40 | b.__kind__ === TypeKind.namedtuple) { 41 | const aKeys = Object.keys(a); 42 | const bKeys = new Set(Object.keys(b)); 43 | const sameKeys = aKeys.length === bKeys.size && aKeys.every(k => bKeys.has(k)); 44 | if (!sameKeys) { 45 | throw new Error(`Incompatible tuple types: ${a.__name__} and ${b.__name__}`); 46 | } 47 | try { 48 | const items = {}; 49 | for (const [i] of Object.entries(a.__shape__)) { 50 | if (!a.__shape__[i] || !b.__shape__[i]) { 51 | throw new Error(); 52 | } 53 | items[i] = getSharedParent(a.__shape__[i], b.__shape__[i]); 54 | } 55 | return { 56 | __kind__: TypeKind.namedtuple, 57 | __name__: `tuple<${Object.entries(items) 58 | .map(([key, val]) => `${key}: ${val.__name__}`) 59 | .join(", ")}>`, 60 | __shape__: items 61 | }; 62 | } 63 | catch (err) { 64 | throw new Error(`Incompatible tuple types: ${a.__name__} and ${b.__name__}`); 65 | } 66 | } 67 | else if (a.__kind__ === TypeKind.array && b.__kind__ === TypeKind.array) { 68 | try { 69 | const mergedEl = getSharedParent(a.__element__, b.__element__); 70 | return { 71 | __kind__: TypeKind.array, 72 | __name__: a.__name__, 73 | __element__: mergedEl 74 | }; 75 | } 76 | catch (err) { 77 | throw new Error(`Incompatible array types: ${a.__name__} and ${b.__name__}`); 78 | } 79 | } 80 | else if (a.__kind__ === TypeKind.enum && b.__kind__ === TypeKind.enum) { 81 | if (a.__name__ === b.__name__) 82 | return a; 83 | throw new Error(`Incompatible array types: ${a.__name__} and ${b.__name__}`); 84 | } 85 | else { 86 | throw new Error(`Incompatible array types: ${a.__name__} and ${b.__name__}`); 87 | } 88 | } 89 | export { set } from "./setImpl.mjs"; 90 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/setImpl.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "./reflection"; 5 | import * as castMaps from "./castMaps"; 6 | import type { $expr_Set, mergeObjectTypesVariadic, getTypesFromExprs, getTypesFromObjectExprs, getCardsFromExprs, getSharedParentPrimitiveVariadic, LooseTypeSet } from "./set"; 7 | import type * as _cal from "./modules/cal"; 8 | import type * as _std from "./modules/std"; 9 | 10 | declare type getSetTypeFromExprs< 11 | Exprs extends [$.TypeSet, ...$.TypeSet[]] 12 | > = LooseTypeSet< 13 | getSharedParentPrimitiveVariadic>, 14 | $.cardutil.mergeCardinalitiesVariadic> 15 | >; 16 | 17 | declare function set(): null; 18 | declare function set< 19 | Expr extends castMaps.orScalarLiteral<$.TypeSet> 20 | >(expr: Expr): $expr_Set>; 21 | declare function set< 22 | Expr extends castMaps.orScalarLiteral<$.TypeSet<_cal.$relative_durationλICastableTo>>, 23 | Exprs extends [Expr, ...Expr[]] 24 | >(...exprs: Exprs): $expr_Set>>; 25 | declare function set< 26 | Expr extends $.TypeSet<$.ArrayType<_cal.$relative_durationλICastableTo>>, 27 | Exprs extends [Expr, ...Expr[]] 28 | >(...exprs: Exprs): $expr_Set>; 29 | declare function set< 30 | Expr extends castMaps.orScalarLiteral<$.TypeSet<_cal.$local_datetimeλICastableTo>>, 31 | Exprs extends [Expr, ...Expr[]] 32 | >(...exprs: Exprs): $expr_Set>>; 33 | declare function set< 34 | Expr extends $.TypeSet<$.ArrayType<_cal.$local_datetimeλICastableTo>>, 35 | Exprs extends [Expr, ...Expr[]] 36 | >(...exprs: Exprs): $expr_Set>; 37 | declare function set< 38 | Expr extends castMaps.orScalarLiteral<$.TypeSet<_std.$decimalλICastableTo>>, 39 | Exprs extends [Expr, ...Expr[]] 40 | >(...exprs: Exprs): $expr_Set>>; 41 | declare function set< 42 | Expr extends $.TypeSet<$.ArrayType<_std.$decimalλICastableTo>>, 43 | Exprs extends [Expr, ...Expr[]] 44 | >(...exprs: Exprs): $expr_Set>; 45 | declare function set< 46 | Expr extends $.ObjectTypeSet, 47 | Exprs extends [Expr, ...Expr[]] 48 | >( 49 | ...exprs: Exprs 50 | ): $expr_Set< 51 | LooseTypeSet< 52 | mergeObjectTypesVariadic>, 53 | $.cardutil.mergeCardinalitiesVariadic> 54 | > 55 | >; 56 | declare function set< 57 | Expr extends $.TypeSet<$.AnyTupleType>, 58 | Exprs extends [Expr, ...Expr[]] 59 | >(...exprs: Exprs): $expr_Set>; 60 | declare function set< 61 | Expr extends $.TypeSet<$.BaseType> | castMaps.scalarLiterals, 62 | Exprs extends castMaps.orScalarLiteral< 63 | $.TypeSet<$.getPrimitiveBaseType["__element__"]>> 64 | >[] 65 | >( 66 | expr: Expr, 67 | ...exprs: Exprs 68 | ): $expr_Set< 69 | $.TypeSet< 70 | $.getPrimitiveBaseType["__element__"]>, 71 | $.cardutil.mergeCardinalitiesVariadic< 72 | getCardsFromExprs> 73 | > 74 | > 75 | >; 76 | declare function set | castMaps.scalarLiterals>( 77 | ...exprs: Expr[] 78 | ): $expr_Set< 79 | $.TypeSet< 80 | $.getPrimitiveBaseType["__element__"]>, 81 | $.Cardinality.Many 82 | > 83 | >; 84 | 85 | 86 | export { set }; 87 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/setImpl.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import * as $ from "./reflection.mjs"; 5 | import * as castMaps from "./castMaps.mjs"; 6 | import { $expressionify } from "./path.mjs"; 7 | import { getSharedParent } from "./set.mjs"; 8 | 9 | 10 | function set(..._exprs) { 11 | // if no arg 12 | // if arg 13 | // return empty set 14 | // if object set 15 | // merged objects 16 | // if primitive 17 | // return shared parent of scalars 18 | if(_exprs.length === 0){ 19 | return null; 20 | } 21 | 22 | const exprs = _exprs.map(expr => castMaps.literalToTypeSet(expr)); 23 | 24 | return $expressionify({ 25 | __kind__: $.ExpressionKind.Set, 26 | __element__: exprs 27 | .map(expr => expr.__element__) 28 | .reduce(getSharedParent), 29 | __cardinality__: $.cardutil.mergeCardinalitiesVariadic( 30 | exprs.map(expr => expr.__cardinality__) 31 | ), 32 | __exprs__: exprs, 33 | }); 34 | 35 | } 36 | 37 | 38 | export { set }; 39 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/syntax.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import type { TypeSet, setToTsType } from "./typesystem"; 5 | export * from "./literal"; 6 | export * from "./path"; 7 | export * from "./set"; 8 | export * from "./cast"; 9 | export * from "./select"; 10 | export * from "./update"; 11 | export * from "./insert"; 12 | export * from "./group"; 13 | export * from "./collections"; 14 | export * from "./funcops"; 15 | export * from "./for"; 16 | export * from "./with"; 17 | export * from "./params"; 18 | export * from "./globals"; 19 | export * from "./detached"; 20 | export * from "./toEdgeQL"; 21 | export * from "./range"; 22 | export declare type $infer = setToTsType; 23 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/syntax.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | export * from "./literal.mjs"; 5 | export * from "./path.mjs"; 6 | export * from "./set.mjs"; 7 | export * from "./cast.mjs"; 8 | export * from "./select.mjs"; 9 | export * from "./update.mjs"; 10 | export * from "./insert.mjs"; 11 | export * from "./group.mjs"; 12 | export * from "./collections.mjs"; 13 | export * from "./funcops.mjs"; 14 | export * from "./for.mjs"; 15 | export * from "./with.mjs"; 16 | export * from "./params.mjs"; 17 | export * from "./globals.mjs"; 18 | export * from "./detached.mjs"; 19 | export * from "./toEdgeQL.mjs"; 20 | export * from "./range.mjs"; 21 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/toEdgeQL.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { $expr_Array, $expr_NamedTuple, $expr_Tuple, $expr_TuplePath } from "./typesystem"; 5 | import type { $expr_Literal } from "./literal"; 6 | import type { $expr_PathLeaf, $expr_PathNode, $expr_TypeIntersection } from "./path"; 7 | import type { $expr_Cast } from "./cast"; 8 | import type { $expr_Detached } from "./detached"; 9 | import type { $expr_For, $expr_ForVar } from "./for"; 10 | import type { $expr_Function, $expr_Operator } from "./funcops"; 11 | import type { $expr_Insert, $expr_InsertUnlessConflict } from "./insert"; 12 | import type { $expr_Param, $expr_WithParams } from "./params"; 13 | import type { $expr_Delete, $expr_Select } from "./select"; 14 | import type { $expr_Set } from "./set"; 15 | import type { $expr_Update } from "./update"; 16 | import type { $expr_Alias, $expr_With } from "./with"; 17 | import type { $expr_Group } from "./group"; 18 | import type { $expr_Global } from "./globals"; 19 | export declare type SomeExpression = $expr_PathNode | $expr_PathLeaf | $expr_Literal | $expr_Set | $expr_Array | $expr_Tuple | $expr_NamedTuple | $expr_TuplePath | $expr_Cast | $expr_Select | $expr_Delete | $expr_Update | $expr_Insert | $expr_InsertUnlessConflict | $expr_Function | $expr_Operator | $expr_For | $expr_ForVar | $expr_TypeIntersection | $expr_Alias | $expr_With | $expr_WithParams | $expr_Param | $expr_Detached | $expr_Group | $expr_Global; 20 | export declare function $toEdgeQL(this: any): string; 21 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/typesystem.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { TypeKind } from "edgedb/dist/reflection/index.js"; 5 | export function $toSet(root, card) { 6 | return { 7 | __element__: root, 8 | __cardinality__: card 9 | }; 10 | } 11 | export function isScalarType(type) { 12 | return type.__kind__ === TypeKind.scalar; 13 | } 14 | export function isEnumType(type) { 15 | return type.__kind__ === TypeKind.enum; 16 | } 17 | export function isObjectType(type) { 18 | return type.__kind__ === TypeKind.object; 19 | } 20 | export function isTupleType(type) { 21 | return type.__kind__ === TypeKind.tuple; 22 | } 23 | export function isNamedTupleType(type) { 24 | return type.__kind__ === TypeKind.namedtuple; 25 | } 26 | export function isArrayType(type) { 27 | return type.__kind__ === TypeKind.array; 28 | } 29 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/update.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, typeutil, Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { Expression, ObjectTypePointers, TypeSet, ObjectTypeSet, stripBacklinks, stripNonUpdateables, ObjectTypeExpression, ObjectType, $scopify } from "./typesystem"; 6 | import type { pointerToAssignmentExpression } from "./casting"; 7 | import { SelectModifiers, NormalisedSelectModifiers, ComputeSelectCardinality } from "./select"; 8 | import { pointerIsOptional } from "./insert"; 9 | export declare type $expr_Update = Expression<{ 10 | __kind__: ExpressionKind.Update; 11 | __element__: El; 12 | __cardinality__: Card; 13 | __expr__: TypeSet; 14 | __shape__: any; 15 | __modifiers__: NormalisedSelectModifiers; 16 | __scope__: ObjectTypeExpression; 17 | }>; 18 | export declare type UpdateShape = typeutil.stripNever>> extends infer Shape ? Shape extends ObjectTypePointers ? { 19 | [k in keyof Shape]?: (pointerToAssignmentExpression | (Shape[k]["cardinality"] extends Cardinality.Many | Cardinality.AtLeastOne ? { 20 | "+=": pointerToAssignmentExpression; 21 | } | { 22 | "-=": pointerToAssignmentExpression; 23 | } : never)) | (pointerIsOptional extends true ? undefined | null : never); 24 | } : never : never; 25 | export declare function update["filter_single"]; 28 | order_by?: SelectModifiers["order_by"]; 29 | limit?: SelectModifiers["limit"]; 30 | offset?: SelectModifiers["offset"]; 31 | set: UpdateShape; 32 | }>(expr: Expr, shape: (scope: $scopify) => Readonly): $expr_Update>; 33 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/update.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify, $getScopedExpr } from "./path.mjs"; 6 | import { $existingScopes, $handleModifiers } from "./select.mjs"; 7 | import { $normaliseInsertShape } from "./insert.mjs"; 8 | export function update(expr, shape) { 9 | const cleanScopedExprs = $existingScopes.size === 0; 10 | const scope = $getScopedExpr(expr, $existingScopes); 11 | const resolvedShape = shape(scope); 12 | if (cleanScopedExprs) { 13 | $existingScopes.clear(); 14 | } 15 | const mods = {}; 16 | let updateShape; 17 | for (const [key, val] of Object.entries(resolvedShape)) { 18 | if (key === "filter" || key === "filter_single") { 19 | mods[key] = val; 20 | } 21 | else if (key === "set") { 22 | updateShape = val; 23 | } 24 | else { 25 | throw new Error(`Invalid update shape key '${key}', only 'filter', ` + 26 | `and 'set' are allowed`); 27 | } 28 | } 29 | if (!updateShape) { 30 | throw new Error(`Update shape must contain 'set' shape`); 31 | } 32 | const { modifiers, cardinality } = $handleModifiers(mods, { root: expr, scope }); 33 | return $expressionify({ 34 | __kind__: ExpressionKind.Update, 35 | __element__: expr.__element__, 36 | __cardinality__: cardinality, 37 | __expr__: expr, 38 | __shape__: $normaliseInsertShape(expr, updateShape, true), 39 | __modifiers__: modifiers, 40 | __scope__: scope 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/with.d.ts: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind, Cardinality } from "edgedb/dist/reflection/index"; 5 | import type { BaseType, Expression, TypeSet } from "./typesystem"; 6 | import type { $expr_Select } from "./select"; 7 | import type { $expr_For } from "./for"; 8 | import type { $expr_Insert } from "./insert"; 9 | import type { $expr_Update } from "./update"; 10 | import type { $expr_Group } from "./group"; 11 | export declare type $expr_Alias = Expression<{ 12 | __element__: El; 13 | __cardinality__: Card; 14 | __kind__: ExpressionKind.Alias; 15 | __expr__: TypeSet; 16 | }>; 17 | export declare function alias(expr: Expr): $expr_Alias; 18 | export declare type WithableExpression = $expr_Select | $expr_For | $expr_Insert | $expr_Update | $expr_Group; 19 | export declare type $expr_With = Expression<{ 20 | __element__: Expr["__element__"]; 21 | __cardinality__: Expr["__cardinality__"]; 22 | __kind__: ExpressionKind.With; 23 | __expr__: Expr; 24 | __refs__: TypeSet[]; 25 | }>; 26 | declare function _with(refs: Expression[], expr: Expr): $expr_With; 27 | export { _with as with }; 28 | -------------------------------------------------------------------------------- /dbschema/edgeql-js/with.mjs: -------------------------------------------------------------------------------- 1 | // GENERATED by @edgedb/generate v0.0.7 2 | // Run 'npx @edgedb/generate edgeql-js' to re-generate 3 | 4 | import { ExpressionKind } from "edgedb/dist/reflection/index.js"; 5 | import { $expressionify } from "./path.mjs"; 6 | export function alias(expr) { 7 | return $expressionify({ 8 | __kind__: ExpressionKind.Alias, 9 | __element__: expr.__element__, 10 | __cardinality__: expr.__cardinality__, 11 | __expr__: expr 12 | }); 13 | } 14 | function _with(refs, expr) { 15 | return $expressionify({ 16 | __kind__: ExpressionKind.With, 17 | __element__: expr.__element__, 18 | __cardinality__: expr.__cardinality__, 19 | __refs__: refs, 20 | __expr__: expr 21 | }); 22 | } 23 | export { _with as with }; 24 | -------------------------------------------------------------------------------- /dbschema/futures.esdl: -------------------------------------------------------------------------------- 1 | # Disable the application of access policies within access policies 2 | # themselves. This behavior will become the default in EdgeDB 3.0. 3 | # See: https://www.edgedb.com/docs/reference/ddl/access_policies#nonrecursive 4 | using future nonrecursive_access_policies; 5 | -------------------------------------------------------------------------------- /dbschema/migrations/00001.edgeql: -------------------------------------------------------------------------------- 1 | CREATE MIGRATION m1c7trqrp4kr7c5aasfw5ove3xss5xfd6cyu5l3s3wyn242kpd6k6q 2 | ONTO initial 3 | { 4 | CREATE FUTURE nonrecursive_access_policies; 5 | CREATE ABSTRACT TYPE default::HasTimestamp { 6 | CREATE REQUIRED PROPERTY created_at -> std::datetime { 7 | SET default := (std::datetime_current()); 8 | }; 9 | }; 10 | CREATE TYPE default::Comment EXTENDING default::HasTimestamp { 11 | CREATE REQUIRED PROPERTY content -> std::str; 12 | }; 13 | CREATE SCALAR TYPE default::Role EXTENDING enum; 14 | CREATE TYPE default::User EXTENDING default::HasTimestamp { 15 | CREATE PROPERTY avatar_src -> std::str; 16 | CREATE REQUIRED PROPERTY email -> std::str { 17 | CREATE CONSTRAINT std::exclusive; 18 | }; 19 | CREATE PROPERTY first_name -> std::str; 20 | CREATE PROPERTY last_name -> std::str; 21 | CREATE PROPERTY full_name := (((.first_name ++ ' ') ++ .last_name)); 22 | CREATE PROPERTY password_hash -> std::str; 23 | CREATE PROPERTY role -> default::Role { 24 | SET default := 'user'; 25 | }; 26 | CREATE PROPERTY user_auth_token -> std::str { 27 | CREATE CONSTRAINT std::exclusive; 28 | }; 29 | CREATE REQUIRED PROPERTY username -> std::str { 30 | CREATE CONSTRAINT std::exclusive; 31 | }; 32 | }; 33 | ALTER TYPE default::Comment { 34 | CREATE REQUIRED LINK author -> default::User; 35 | }; 36 | CREATE TYPE default::Tag { 37 | CREATE REQUIRED PROPERTY name -> std::str { 38 | CREATE CONSTRAINT std::exclusive; 39 | }; 40 | }; 41 | CREATE TYPE default::Post EXTENDING default::HasTimestamp { 42 | CREATE REQUIRED LINK author -> default::User; 43 | CREATE MULTI LINK tags -> default::Tag; 44 | CREATE REQUIRED PROPERTY content -> std::str; 45 | CREATE PROPERTY image_src -> std::str; 46 | CREATE REQUIRED PROPERTY slug -> std::str { 47 | CREATE CONSTRAINT std::exclusive; 48 | }; 49 | CREATE PROPERTY snippet -> std::str; 50 | CREATE REQUIRED PROPERTY title -> std::str; 51 | }; 52 | ALTER TYPE default::Comment { 53 | CREATE REQUIRED LINK post -> default::Post; 54 | }; 55 | ALTER TYPE default::Post { 56 | CREATE MULTI LINK comments := (. 2 | 3 | 4 | 5 | 6 | 7 | SvelteKit Blog App 8 | 9 | %sveltekit.head% 10 | 11 | 12 |

13 | 14 | 15 | -------------------------------------------------------------------------------- /src/hooks.server.js: -------------------------------------------------------------------------------- 1 | //import type { Handle } from '@sveltejs/kit' 2 | import { User } from "$lib/server/database.js" 3 | 4 | let signinRedirect = () => { 5 | const response = new Response(null, { 6 | status: 302, 7 | headers: { 8 | Location: "/user/sign-in", 9 | }, 10 | }) 11 | 12 | return response 13 | } 14 | 15 | export const handle = async ({ event, resolve }) => { 16 | let isAdminPage = event.url.pathname.startsWith("/admin") 17 | 18 | // get cookies from browser 19 | const session = event.cookies.get("session") 20 | 21 | if (!session) { 22 | // if there is no session load page as normal unless visiting admin page 23 | if (isAdminPage) { 24 | return signinRedirect() 25 | } 26 | return await resolve(event) 27 | } 28 | 29 | const user = await User.select({ 30 | username: true, 31 | first_name: true, 32 | last_name: true, 33 | avatar_src: true, 34 | email: true, 35 | role: true, 36 | filter_single: { user_auth_token: session }, 37 | }) 38 | 39 | // if `user` exists set `events.local` 40 | if (user) { 41 | event.locals.user = { 42 | username: user.username, 43 | role: user.role, 44 | email: user.email, 45 | avatar_src: user.avatar_src, 46 | first_name: user.first_name, 47 | last_name: user.last_name, 48 | } 49 | } 50 | 51 | if (isAdminPage && user.role !== "admin") { 52 | return signinRedirect() 53 | } 54 | 55 | return await resolve(event) 56 | } 57 | -------------------------------------------------------------------------------- /src/lib/SvgIcons.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | {#if icon == "outline/x-mark"} 18 | 23 | {:else if icon == "outline/home"} 24 | 29 | {:else if icon == "outline/user-circle"} 30 | 35 | {:else if icon == "outline/users"} 36 | 41 | {:else if icon == "outline/key"} 42 | 47 | {:else if icon == "outline/folder"} 48 | 53 | {:else if icon == "outline/inbox"} 54 | 59 | {:else if icon == "outline/chart-bar"} 60 | 65 | {:else if icon == "outline/bars-3"} 66 | 71 | {/if} 72 | 73 | -------------------------------------------------------------------------------- /src/lib/admin/form.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 |
9 |
10 |
16 |
17 |
18 |

19 | {formItem.id ? "Edit" : "New"} 20 | {name} 21 |

22 |
23 | 24 | {#if formItem.id} 25 | 26 | {/if} 27 | 28 | 29 |
30 | 31 |
32 | 39 | 40 | 41 | 44 | 45 |
46 |
47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /src/lib/admin/page.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 |
9 |

{title}

10 |

{description}

11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 |
19 |
22 | 23 | 24 | 25 |
26 |
27 |
28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /src/lib/config.js: -------------------------------------------------------------------------------- 1 | import { PUBLIC_READONLY_MODE } from "$env/static/public" 2 | const isProduction = import.meta.env.PROD; 3 | 4 | 5 | export const IsReadonlyMode = () => { 6 | if(PUBLIC_READONLY_MODE === "enabled") { 7 | return true 8 | } 9 | if(PUBLIC_READONLY_MODE === "disabled") { 10 | return false 11 | } 12 | if(PUBLIC_READONLY_MODE === "production") { 13 | return isProduction 14 | } 15 | 16 | return false 17 | } 18 | 19 | 20 | export const RepoLink = "https://github.com/pro7tech/sveltekit-blog-app" 21 | 22 | -------------------------------------------------------------------------------- /src/lib/demo-mode-header.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#if IsReadonlyMode()} 9 |
12 |
13 | 17 | 29 | Github Repo   30 | 31 | Demo Mode   32 | {#if admin} 33 | No changes will be saved. 34 | {:else} 35 | Demo admin login: admin@example.com 38 | Password: password 40 | {/if} 41 |
42 |
43 | {/if} 44 | -------------------------------------------------------------------------------- /src/lib/field-error-message.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#if typeof message == "string" && message != ""} 9 |
10 |
11 | 24 | {message} 25 |
26 |
27 | {/if} 28 | -------------------------------------------------------------------------------- /src/lib/form-field.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 |
9 | 10 | 11 |
12 |
13 | -------------------------------------------------------------------------------- /src/lib/form-message.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | {#if form?.error} 6 |
9 | Error! 10 | {form.error} 11 |
12 | {/if} 13 | 14 | {#if form?.success} 15 |
18 | Success! 19 | {form.success} 20 |
21 | {/if} 22 | -------------------------------------------------------------------------------- /src/lib/images/svelte-logo.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /src/lib/server/database.js: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import * as edgedb from "edgedb" 3 | import e from "../../../dbschema/edgeql-js/index.mjs" 4 | import { IsReadonlyMode } from "$lib/config.js" 5 | export { e } 6 | 7 | export let client = edgedb.createClient() 8 | 9 | class Database { 10 | static async select(params) { 11 | const query = e.select(this.type, params) 12 | return await query.run(client) 13 | } 14 | static select_query(params) { 15 | return e.select(this.type, params) 16 | } 17 | static select_query_by_ids(ids) { 18 | return e.select(this.type, (item) => ({ 19 | id: true, 20 | filter: e.op(item.id, "in", e.set(...ids.map((id) => e.uuid(id)))), 21 | })) 22 | } 23 | static async insert(params) { 24 | if (IsReadonlyMode()) { 25 | return {} 26 | } 27 | const query = e.insert(this.type, params) 28 | return await query.run(client) 29 | } 30 | static async insert_in_readonly_mode(params) { 31 | const query = e.insert(this.type, params) 32 | return await query.run(client) 33 | } 34 | static async update(params) { 35 | if (IsReadonlyMode()) { 36 | return {} 37 | } 38 | const query = e.update(this.type, params) 39 | return await query.run(client) 40 | } 41 | static async delete(params) { 42 | if (IsReadonlyMode()) { 43 | return {} 44 | } 45 | const query = e.delete(this.type, params) 46 | return await query.run(client) 47 | } 48 | } 49 | 50 | export class Comment extends Database { 51 | static type = e.Comment 52 | } 53 | 54 | export class Tag extends Database { 55 | static type = e.Tag 56 | } 57 | 58 | export class Post extends Database { 59 | static type = e.Post 60 | } 61 | 62 | export class User extends Database { 63 | static type = e.User 64 | } 65 | -------------------------------------------------------------------------------- /src/lib/tailwind.js: -------------------------------------------------------------------------------- 1 | // collection of commonnly used tailwind classes 2 | export let t = { 3 | label: "block text-sm font-medium text-gray-700", 4 | input: 5 | "px-2 py-3 mt-1 block w-full rounded-md border border-gray-300 py-2 px-3 shadow-sm focus:border-sky-500 focus:outline-none focus:ring-sky-500 sm:text-sm", 6 | readonly: "bg-gray-50 cursor-not-allowed", 7 | cancel_button: 8 | "inline-flex justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-sky-500 focus:ring-offset-2", 9 | save_button: 10 | "ml-5 inline-flex justify-center rounded-md border border-transparent bg-sky-400 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-sky-500 focus:ring-offset-2", 11 | blue_button: 12 | "inline-flex justify-center rounded-md border border-transparent bg-sky-400 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-sky-500 focus:ring-offset-2", 13 | white_button: 14 | "inline-block rounded-md border border-transparent bg-white py-2 px-4 text-base font-medium text-sky-400 hover:bg-opacity-75", 15 | danger_button: 16 | "inline-flex justify-center rounded-md border border-transparent bg-red-400 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-red-400 focus:ring-offset-2", 17 | full_button: 18 | "flex w-full justify-center rounded-md border border-transparent bg-sky-400 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-sky-400 focus:ring-offset-2", 19 | first_header_column: 20 | "py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-6", 21 | header_column: "px-3 py-3.5 text-left text-sm font-semibold text-gray-900", 22 | first_tbody_column: 23 | "whitespace-nowrap py-4 pl-4 pr-3 text-sm medium text-gray-900 sm:pl-6", 24 | tbody_column: "whitespace-nowrap px-3 py-4 text-sm text-gray-500", 25 | tbody_column_wrap: "px-3 py-4 text-sm text-gray-500", 26 | tbody_action_column: 27 | "relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6", 28 | } 29 | 30 | // combine arguments into a single string of classes 31 | export let all = (...args) => { 32 | return args.join(" ") 33 | } 34 | -------------------------------------------------------------------------------- /src/routes/(app)/+layout.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 | 9 |
10 | 11 |