sveltelean Query
Version v0.2.0

Import

import
import { defineConfig, kebab } from '@svelte-lean/query-codegen';

Size

A development tool: nothing of it ships to a browser bundle.

Command

slq-codegen reads the document once, writes only the files whose content changed and reports the rest as unchanged.

Flags

Every flag falls back to the configuration file.

NameTypeDefaultDescription
# --spec pathconfig.specOpenAPI 3.0 or 3.1 JSON document; local $ref only.
# --types pathconfig.typesopenapi-typescript output for the same document.
# --config pathslq.codegen.ts, .mjs or .jsThe configuration module.
# --check boolean–Write nothing; exit 1 when a file would change (CI).
# --prune boolean–Delete generated modules the document no longer produces.

Configuration

The default export of slq.codegen.ts, typed by defineConfig().

Config

out is required.

NameTypeDefaultDescription
# out required(tag: string) => string–Path of a tag's module; must end in .gen.ts. Two tags may not share a file.
# untagged string–Module of operations without a tag; without it they are an error.
# envelope string | falsefalseProperty unwrapped from documented 2xx JSON responses; must match what the profile unwraps.
# names Record<string, string>{}Export names by operationId or METHOD path.
# entities Record<string, { one, many }>{}Entity tag names of a path segment where the English rules are wrong.
# exclude string[][]Operations written by hand instead.
# tags { defaults?: boolean }{ defaults: true }Default entity, tags and invalidates from paths.
# spec string–The OpenAPI document; --spec wins.
# types string–The openapi-typescript output; --types wins.
# typesImport stringa relative pathImport specifier of the types file in generated modules.
# importExtension string''Appended to relative specifiers ('.js' for node16 resolution).
# package string'@svelte-lean/query'Import specifier of the query package.

Output

Per tag, <tag>.gen.ts with the endpoints and the registry augmentation, and <tag>.types.gen.ts with the types and one interface per operation for policy modules.

What each construct becomes

From the OpenAPI document to definitions.

NameTypeDefaultDescription
# GET, or POST with x-slq-read defineQuery–A read with get: or post:.
# POST, PUT, PATCH, DELETE defineMutation–A write with the method key.
# path /api/domains/{domain} 'api/domains/{domain}'–The parameter typed by its schema.
# query parameters params / input–params of a read; part of the input of a write.
# JSON request body body: type<Input>()–The body type.
# multipart/form-data body encode: 'multipart'–Binary fields typed Blob.
# 2xx JSON response result: type<R>()–Unwrapped by envelope; a component schema becomes a named alias.
# Laravel paginator result: page<Row>()–A data array with total and last_page beside it or in meta.
# binary response result: file()–A FileResult.
# text/* response result: type<string>()–With transport: { responseType: 'text' }.
# 204 no content no result–R is void.
# x-permission access: 'slug'–An array means all of them; the Permissions registry is augmented.
# 422 responses nothing–FieldErrors are typed by the body.

Default tags

With tags.defaults, from the last static path segment (call-requests: CallRequest, CallRequests).

NameTypeDefaultDescription
# GET /x (a page or an array of objects with id) entity: 'X', tags: ['Xs']–A list.
# GET /x/{id} entity: 'X'–A detail.
# POST /x invalidates: ['Xs']–Where GET /x is such a list.
# PUT, PATCH, DELETE /x/{id} invalidates: (_, input) => [tag('X', input.id), 'Xs']–Where /x or /x/{id} is known.
# anything else none–The policy module decides.

Programmatic API

The functions behind the command, for build scripts and tests.

Exports

Runtime exports of the package.

NameTypeDefaultDescription
# defineConfig (config: Config) => Config–Identity: gives slq.codegen.ts its types.
# run (options: RunOptions) => RunResult–What the command does: read, generate, write or check.
# generate (input: GenerateInput) => GenerateResult–Generate in memory from a parsed document and the types text.
# build (document, config, options) => BuildResult–The intermediate model of every module.
# emitModule (module: ModuleIR) => string–The text of a <tag>.gen.ts module.
# emitTypes (module: ModuleIR) => string–The text of a <tag>.types.gen.ts module.
# indexSchema (text: string) => SchemaIndex–The declared names of an openapi-typescript file.
# exportsOf (text: string) => Map<string, Set<string> | null>–A policy module's exports and the members each sets.
# kebab (value: string) => string–kebab-case, for out paths.
# plural (value: string) => string–The plural of the last word.
# singular (value: string) => string–The singular of the last word.
# CodegenError class CodegenError extends Error–A generation error with an slq/codegen-* code.

RunOptions

The argument of run().

NameTypeDefaultDescription
# spec stringconfig.specThe OpenAPI JSON document.
# types stringconfig.typesThe openapi-typescript output.
# config requiredConfig–The configuration.
# cwd stringprocess.cwd()Resolves relative paths.
# check boolean–Write nothing; report what would change.
# prune boolean–Delete generated modules this run no longer produces.

Guide

How to use it, with examples: Codegen. All entry points: Svelte Lean Query.