diff --git a/apps/class-solid/README.md b/apps/class-solid/README.md index ae888fad..c834443b 100644 --- a/apps/class-solid/README.md +++ b/apps/class-solid/README.md @@ -54,7 +54,7 @@ This allows you to trigger tests from the [playwright ui](https://playwright.dev An experiment can get started from a preset. The presets are stored in the `src/lib/presets/` directory. -The format is JSON with content adhering to the [JSON schema](https://github.com/classmodel/class-web/blob/main/packages/class/src/config.json). +The format is JSON with content adhering to the [JSON schema](https://github.com/classmodel/class-web/blob/main/packages/class/src/config.ts). The `src/lib/presets.ts` is used as an index of presets. If you add a preset the `src/lib/presets.ts` file needs to be updated. diff --git a/packages/class/README.md b/packages/class/README.md index 2c33ce45..8e1ca0e8 100644 --- a/packages/class/README.md +++ b/packages/class/README.md @@ -36,6 +36,9 @@ pnpx @classmodel/class run --output output.csv --format csv config.json # To read from stdin use cat config.json | pnpx @classmodel/class - + +# To get the JSON schema of the config file use +pnpx @classmodel/class schema -o config.schema.json ``` If you do not have `pnpx` installed you can use `npx` instead. @@ -70,20 +73,10 @@ This package is part of a [monorepo](https://github.com/classmodel/class-web) wi ### JSON schema -The Class model uses a JSON schema to validate the input configuration. The schema is defined in the `@classmodel/class` package and can be found at [src/config.json](https://github.com/classmodel/class-web/blob/main/packages/class/src/config.json) (in [repo](./src/config.json)). The schema is used to validate the input configuration and to generate a form to input the configuration. +The Class model uses a JSON schema to validate the input configuration. The schema is defined in the `@classmodel/class` package and can be found at [src/config.ts](https://github.com/classmodel/class-web/blob/main/packages/class/src/config.ts) (in [repo](./src/config.ts)). The schema is used to validate the input configuration and to generate a form to input the configuration. The `src/config.ts` file contains the embedded JSON schema and its Typescript type definition. - - -At the moment you manually have to keep the `src/config.ts` file in sync with the `src/config.json` file. By copying the content over and updating the TypeScript Config type. - See the [form package](../form/README.md#json-schema) for additional keywords in the JSON schema. #### Conditional properties diff --git a/packages/class/package.json b/packages/class/package.json index 4f3c14cb..4168f07b 100644 --- a/packages/class/package.json +++ b/packages/class/package.json @@ -23,7 +23,6 @@ "types": "./dist/config.d.ts" } }, - "./config.json": "./dist/config.json", "./config_utils": { "import": { "default": "./dist/config_utils.js", @@ -54,23 +53,17 @@ "files": ["dist"], "license": "GPL-3.0-only", "scripts": { - "dev": "concurrently -n \"tsc,json2ts\" -c \"blue,green\" \"pnpm dev:tsc\" \"pnpm json2ts --watch\"", - "dev:tsc": "tsc --watch", - "build:tsc": "tsc", - "build:config": "cp src/config.json dist/config.json", - "build": "pnpm json2ts && pnpm build:tsc && pnpm build:config", + "dev": "tsc --watch", + "build": "tsc", "prepack": "pnpm build", "test": "tsx --test src/*.test.ts", "typecheck": "tsc --noEmit", - "json2ts": "node scripts/json2ts.mjs", "docs": "typedoc", "clean": "rm -rf dist" }, "bin": "./dist/cli.js", "devDependencies": { "@types/node": "^20.13.1", - "concurrently": "^9.0.1", - "json-schema-to-typescript": "^15.0.2", "tsx": "^4.16.5", "typedoc": "^0.26.10", "typescript": "^5.3.3" diff --git a/packages/class/scripts/json2ts.mjs b/packages/class/scripts/json2ts.mjs deleted file mode 100644 index 4ce74828..00000000 --- a/packages/class/scripts/json2ts.mjs +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Convert JSON schema file to TypeScript file with embedded JSON schema and type definition. - * - * Some Javascript runtimes cannot import JSON files as ES module, so embedding the JSON schema is a workaround. - */ -import { exec as cbExec } from "node:child_process"; -import { watch } from "node:fs"; -import { readFile, writeFile } from "node:fs/promises"; -import { basename, extname, join } from "node:path"; -import { promisify } from "node:util"; - -import { Command } from "@commander-js/extra-typings"; -import { compileFromFile } from "json-schema-to-typescript"; - -async function format(schemaTsPath) { - // Format the generated TypeScript file - // Expect this script to be run from packages/class - const exec = promisify(cbExec); - const biomeHome = join(process.cwd(), "../.."); - const { stdout, stderr } = await exec( - `pnpm biome format --write packages/class/${schemaTsPath}`, - { - cwd: biomeHome, - }, - ); - console.log(stdout); - console.error(stderr); -} - -async function readJsonSchema(jsonSchemaPath) { - const jsonSchema = await readFile(jsonSchemaPath, "utf-8"); - const trimmedJsonSchema = jsonSchema.trim(); - return trimmedJsonSchema; -} - -function prefixOfJsonSchema(jsonSchemaPath) { - const fn = basename(jsonSchemaPath, extname(jsonSchemaPath)); - // json-schema-to-typescript generates type names with base of filename with the first letter capitalized - const prefix = fn.charAt(0).toUpperCase() + fn.slice(1); - return prefix; -} - -/** - * - * @param {string} jsonSchemaPath - * @param {string} schemaTsPath - */ -async function json2ts(jsonSchemaPath, schemaTsPath) { - // Geneerate TypeScript type definition from JSON schema - const tsOfJsonSchema = await compileFromFile(jsonSchemaPath, { - format: false, - bannerComment: "", - }); - - // Modular forms does not like interface definitions - // See https://github.com/fabian-hiller/modular-forms/issues/2 - // and https://github.com/bcherny/json-schema-to-typescript/issues/307 - // So, replace interface with type - // for example "interface Foo {" becomes "type Foo = {" - const tsOfJsonSchemaTypesOnly = tsOfJsonSchema.replaceAll( - /interface\s+(\w+) {/g, - "type $1 = {", - ); - - const prefix = prefixOfJsonSchema(jsonSchemaPath); - - // Read JSON schema file - const trimmedJsonSchema = await readJsonSchema(jsonSchemaPath); - - // Combine types and JSON schema into a single TypeScript file - const body = `\ -/** - * This file was automatically generated by "../scripts/json2ts.mjs" script. - * DO NOT MODIFY IT BY HAND. Instead, modify the JSON schema file "${jsonSchemaPath}", - * and run "pnpm json2ts" to regenerate this file. - */ -import type { JSONSchemaType } from "ajv/dist/2019.js"; -${tsOfJsonSchemaTypesOnly} -export type JsonSchemaOf${prefix} = JSONSchemaType<${prefix}>; -/** - * JSON schema of ${jsonSchemaPath} embedded in a TypeScript file. - */ -export const jsonSchemaOf${prefix} = ${trimmedJsonSchema} as unknown as JsonSchemaOf${prefix}; -`; - await writeFile(schemaTsPath, body, { flag: "w" }); - - await format(schemaTsPath); -} - -function watchJsonSchema(jsonSchemaPath, schemaTsPath) { - console.log(`Watching ${jsonSchemaPath} for changes`); - watch(jsonSchemaPath, (event) => { - if (event !== "change") { - return; - } - console.log( - `File ${jsonSchemaPath} has been changed, regenerating ${schemaTsPath}`, - ); - json2ts(jsonSchemaPath, schemaTsPath).catch((err) => { - console.error(err); - }); - }); -} - -function main() { - const program = new Command() - .name("json2ts") - .description( - "Convert JSON schema file to TypeScript file with embedded JSON schema and type definition", - ) - .option( - "-i, --input ", - "JSON schema file", - "src/config.json", - ) - .option("-o, --output ", "Output file path", "src/config.ts") - .option("--watch", "Watch mode") - .parse(); - const options = program.opts(); - const jsonSchemaPath = options.input; - const schemaTsPath = options.output; - - if (options.watch) { - watchJsonSchema(jsonSchemaPath, schemaTsPath); - } else { - console.log(`Generating ${schemaTsPath} from ${jsonSchemaPath}`); - json2ts(jsonSchemaPath, schemaTsPath).catch((err) => { - console.error(err); - process.exit(1); - }); - } -} - -// TODO disabled as json-schema-to-typescript can not handle if/then/else -// main(); diff --git a/packages/class/src/cli.ts b/packages/class/src/cli.ts index 583081b5..f646eec1 100755 --- a/packages/class/src/cli.ts +++ b/packages/class/src/cli.ts @@ -6,6 +6,7 @@ import { readFile, writeFile } from "node:fs/promises"; import { EOL } from "node:os"; import { Command, Option } from "@commander-js/extra-typings"; +import { jsonSchemaOfConfig } from "./config.js"; import type { ClassOutput } from "./runner.js"; import { runClass } from "./runner.js"; import { parse } from "./validate.js"; @@ -142,6 +143,19 @@ function buildCommand() { } }); + program + .command("schema") + .description("Print the JSON schema for the configuration file") + .option("-o, --output ", "Output file. Default is stdout", "-") + .action((options) => { + const output = JSON.stringify(jsonSchemaOfConfig, null, 2); + if (options.output === "-") { + console.log(output); + } else { + writeTextFile(output, options.output); + } + }); + return program; } diff --git a/packages/class/src/config.json b/packages/class/src/config.json deleted file mode 100644 index d771abee..00000000 --- a/packages/class/src/config.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name", - "default": "" - }, - "description": { - "type": "string", - "title": "Description", - "default": "", - "ui:widget": "textarea" - }, - "dt": { - "type": "integer", - "unit": "s", - "minimum": 1, - "default": 60, - "title": "Time step", - "ui:group": "Time Control" - }, - "runtime": { - "type": "integer", - "unit": "s", - "minimum": 1, - "title": "Total run time", - "default": 43200, - "ui:group": "Time Control" - }, - "sw_ml": { - "type": "boolean", - "ui:group": "Mixed layer", - "title": "Mixed-layer switch", - "default": true - } - }, - "required": ["name", "dt", "runtime"], - "allOf": [ - { - "if": { - "properties": { - "sw_ml": { - "const": true - } - } - }, - "then": { - "properties": { - "h_0": { - "symbol": "h", - "type": "number", - "title": "ABL height", - "unit": "m", - "default": 200, - "ui:group": "Mixed layer" - }, - "theta_0": { - "symbol": "θ", - "type": "number", - "ui:group": "Mixed layer", - "title": "Potential temperature", - "minimum": 1, - "default": 288, - "description": "The potential temperature of the mixed layer at the initial time.", - "unit": "K" - }, - "dtheta_0": { - "symbol": "Δθ", - "type": "number", - "title": "Temperature jump at h", - "ui:group": "Mixed layer", - "default": 1, - "unit": "K" - }, - "q_0": { - "symbol": "q", - "type": "number", - "ui:group": "Mixed layer", - "unit": "kg kg-1", - "default": 0.008, - "title": "Mixed-layer specific humidity" - }, - "dq_0": { - "symbol": "Δq", - "type": "number", - "description": "Specific humidity jump at h", - "unit": "kg kg-1", - "default": -0.001, - "ui:group": "Mixed layer" - }, - "wtheta": { - "symbol": "(w'θ')ₛ", - "type": "array", - "items": { - "type": "number" - }, - "ui:group": "Mixed layer", - "unit": "K m s-1", - "title": "Surface kinematic heat flux", - "default": [0.1], - "minItems": 1 - }, - "advtheta": { - "symbol": "adv(θ)", - "type": "number", - "ui:group": "Mixed layer", - "unit": "K s-1", - "default": 0, - "title": "Advection of heat" - }, - "gammatheta": { - "symbol": "γθ", - "type": "number", - "ui:group": "Mixed layer", - "unit": "K m-1", - "default": 0.006, - "title": "Free atmosphere potential temperature lapse rate" - }, - "wq": { - "symbol": "(w'q')ₛ", - "type": "number", - "ui:group": "Mixed layer", - "unit": "kg kg-1 m s-1", - "default": 0.0001, - "title": "Surface kinematic moisture flux" - }, - "advq": { - "symbol": "adv(q)", - "type": "number", - "ui:group": "Mixed layer", - "unit": "kg kg-1 s-1", - "default": 0, - "title": "Advection of moisture" - }, - "gammaq": { - "symbol": "γq", - "type": "number", - "ui:group": "Mixed layer", - "unit": "kg kg-1 m-1", - "default": 0, - "title": "Free atmosphere specific humidity lapse rate" - }, - "divU": { - "symbol": "div(Uₕ)", - "type": "number", - "ui:group": "Mixed layer", - "default": 0, - "unit": "s-1", - "title": "Horizontal large-scale divergence of wind" - }, - "beta": { - "symbol": "β", - "type": "number", - "ui:group": "Mixed layer", - "default": 0.2, - "title": "Entrainment ratio for virtual heat" - } - }, - "required": [ - "h_0", - "theta_0", - "dtheta_0", - "q_0", - "dq_0", - "wtheta", - "advtheta", - "gammatheta", - "wq", - "advq", - "gammaq", - "divU", - "beta" - ] - } - } - ] -} diff --git a/packages/class/src/config.ts b/packages/class/src/config.ts index 1046b548..209d9418 100644 --- a/packages/class/src/config.ts +++ b/packages/class/src/config.ts @@ -1,34 +1,5 @@ import type { JSONSchemaType } from "ajv/dist/2020.js"; -// TODO generate this from ./config.schema.json -// at the momemt json-schema-to-typescript does not understand if/then/else -// and cannot generate such minimalistic types -export type Config = { - name: string; - description?: string; - dt: number; - runtime: number; -} & ( // Mixed layer - | { - sw_ml: true; - h_0: number; - theta_0: number; - dtheta_0: number; - q_0: number; - dq_0: number; - wtheta: number[]; - advtheta: number; - gammatheta: number; - wq: number; - advq: number; - gammaq: number; - divU: number; - beta: number; - } - // Else, sw_ml key should be absent or false - | { sw_ml?: false } -); - /* Notes for JSON schema put here because JSON does not support comments @@ -41,9 +12,7 @@ put here because JSON does not support comments TODO move notes to documentation/issues */ -export type JsonSchemaOfConfig = JSONSchemaType; - -// TODO unable to use import with assert in app, so made copy of ./config.json here +// Unable to use import with assert in app, so embedded JSON schema here instead const untypedSchema = { $schema: "https://json-schema.org/draft/2020-12/schema", type: "object", @@ -127,7 +96,7 @@ const untypedSchema = { symbol: "q", type: "number", "ui:group": "Mixed layer", - unit: "kg kg-1", + unit: "kg kg⁻¹", default: 0.008, title: "Mixed-layer specific humidity", }, @@ -135,7 +104,7 @@ const untypedSchema = { symbol: "Δq", type: "number", description: "Specific humidity jump at h", - unit: "kg kg-1", + unit: "kg kg⁻¹", default: -0.001, "ui:group": "Mixed layer", }, @@ -146,7 +115,7 @@ const untypedSchema = { type: "number", }, "ui:group": "Mixed layer", - unit: "K m s-1", + unit: "K m s⁻¹", title: "Surface kinematic heat flux", default: [0.1], minItems: 1, @@ -155,7 +124,7 @@ const untypedSchema = { symbol: "adv(θ)", // _adv not possible in unicode type: "number", "ui:group": "Mixed layer", - unit: "K s-1", + unit: "K s⁻¹", default: 0, title: "Advection of heat", }, @@ -163,7 +132,7 @@ const untypedSchema = { symbol: "γθ", type: "number", "ui:group": "Mixed layer", - unit: "K m-1", + unit: "K m⁻¹", default: 0.006, title: "Free atmosphere potential temperature lapse rate", }, @@ -171,7 +140,7 @@ const untypedSchema = { symbol: "(w'q')ₛ", type: "number", "ui:group": "Mixed layer", - unit: "kg kg-1 m s-1", + unit: "kg kg⁻¹ m s⁻¹", default: 0.0001, title: "Surface kinematic moisture flux", }, @@ -179,7 +148,7 @@ const untypedSchema = { symbol: "adv(q)", // _adv not possible in unicode type: "number", "ui:group": "Mixed layer", - unit: "kg kg-1 s-1", + unit: "kg kg⁻¹ s⁻¹", default: 0, title: "Advection of moisture", }, @@ -187,7 +156,7 @@ const untypedSchema = { symbol: "γq", type: "number", "ui:group": "Mixed layer", - unit: "kg kg-1 m-1", + unit: "kg kg⁻¹ m⁻¹", default: 0, title: "Free atmosphere specific humidity lapse rate", }, @@ -196,7 +165,7 @@ const untypedSchema = { type: "number", "ui:group": "Mixed layer", default: 0, - unit: "s-1", + unit: "s⁻¹", title: "Horizontal large-scale divergence of wind", }, beta: { @@ -227,5 +196,35 @@ const untypedSchema = { ], }; +// TODO generate this from ./config.schema.json +// at the momemt json-schema-to-typescript does not understand if/then/else +// and cannot generate such minimalistic types +export type Config = { + name: string; + description?: string; + dt: number; + runtime: number; +} & ( // Mixed layer + | { + sw_ml: true; + h_0: number; + theta_0: number; + dtheta_0: number; + q_0: number; + dq_0: number; + wtheta: number[]; + advtheta: number; + gammatheta: number; + wq: number; + advq: number; + gammaq: number; + divU: number; + beta: number; + } + // Else, sw_ml key should be absent or false + | { sw_ml?: false } +); + +export type JsonSchemaOfConfig = JSONSchemaType; export const jsonSchemaOfConfig = untypedSchema as unknown as JsonSchemaOfConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7538b89f..eda4966f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,12 +124,6 @@ importers: '@types/node': specifier: ^20.13.1 version: 20.14.10 - concurrently: - specifier: ^9.0.1 - version: 9.0.1 - json-schema-to-typescript: - specifier: ^15.0.2 - version: 15.0.2 tsx: specifier: ^4.16.5 version: 4.16.5 @@ -205,10 +199,6 @@ packages: '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - '@apidevtools/json-schema-ref-parser@11.7.0': - resolution: {integrity: sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==} - engines: {node: '>= 16'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -879,9 +869,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@kobalte/core@0.13.3': resolution: {integrity: sha512-7ansvAwiIz2EYuifI8jmGj+ZNG/3R4hdkXZkCEFVKsQzq3vZpuSiAXgrdZeQOR4Zby7gxLOzpakjfv7D/3PPGw==} peerDependencies: @@ -1524,12 +1511,6 @@ packages: '@types/http-proxy@1.17.14': resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/lodash@4.17.9': - resolution: {integrity: sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -2012,11 +1993,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concurrently@9.0.1: - resolution: {integrity: sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg==} - engines: {node: '>=18'} - hasBin: true - confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} @@ -2823,11 +2799,6 @@ packages: engines: {node: '>=4'} hasBin: true - json-schema-to-typescript@15.0.2: - resolution: {integrity: sha512-+cRBw+bBJ3k783mZroDIgz1pLNPB4hvj6nnbHTWwEVl0dkW8qdZ+M9jWhBb+Y0FAdHvNsXACga3lewGO8lktrw==} - engines: {node: '>=16.0.0'} - hasBin: true - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -3400,11 +3371,6 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - pretty-bytes@6.1.1: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -3567,9 +3533,6 @@ packages: rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -3647,9 +3610,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - shiki@1.22.1: resolution: {integrity: sha512-PbJ6XxrWLMwB2rm3qdjIHNm3zq4SfFnOx0B3rEoi4AN8AUngsdyZ1tRe5slMPtn6jQkbUURLNZPpLR7Do3k78g==} @@ -3899,10 +3859,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4360,12 +4316,6 @@ snapshots: '@antfu/utils@0.7.10': {} - '@apidevtools/json-schema-ref-parser@11.7.0': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -4855,8 +4805,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jsdevtools/ono@7.1.3': {} - '@kobalte/core@0.13.3(solid-js@1.8.18)': dependencies: '@floating-ui/dom': 1.6.7 @@ -5587,10 +5535,6 @@ snapshots: dependencies: '@types/node': 20.14.10 - '@types/json-schema@7.0.15': {} - - '@types/lodash@4.17.9': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -6152,16 +6096,6 @@ snapshots: concat-map@0.0.1: {} - concurrently@9.0.1: - dependencies: - chalk: 4.1.2 - lodash: 4.17.21 - rxjs: 7.8.1 - shell-quote: 1.8.1 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - confbox@0.1.7: {} confbox@0.1.8: {} @@ -6983,18 +6917,6 @@ snapshots: jsesc@2.5.2: {} - json-schema-to-typescript@15.0.2: - dependencies: - '@apidevtools/json-schema-ref-parser': 11.7.0 - '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.9 - glob: 10.4.5 - is-glob: 4.0.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - minimist: 1.2.8 - prettier: 3.3.3 - json-schema-traverse@1.0.0: {} json5@2.2.3: {} @@ -7594,8 +7516,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prettier@3.3.3: {} - pretty-bytes@6.1.1: {} process-nextick-args@2.0.1: {} @@ -7789,10 +7709,6 @@ snapshots: rw@1.3.3: {} - rxjs@7.8.1: - dependencies: - tslib: 2.6.3 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -7894,8 +7810,6 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} - shiki@1.22.1: dependencies: '@shikijs/core': 1.22.1 @@ -8179,8 +8093,6 @@ snapshots: tr46@0.0.3: {} - tree-kill@1.2.2: {} - trim-lines@3.0.1: {} ts-interface-checker@0.1.13: {}