72e5c09a30
Bumps [happy-dom](https://github.com/capricorn86/happy-dom) from 15.7.4 to 15.10.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/capricorn86/happy-dom/releases">happy-dom's releases</a>.</em></p> <blockquote> <h2>v15.10.2</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Fixes a security vulnerability that allowed for server side code to be executed by a <code><script></code> tag - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1585">#1585</a> <ul> <li>There was a case that was missed with the first patch</li> </ul> </li> </ul> <h2>v15.10.1</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Fixes a security vulnerability that allowed for server side code to be executed by a <code><script></code> tag - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1585">#1585</a></li> </ul> <h2>v15.10.0</h2> <h3>🎨 Features</h3> <ul> <li>Adds a new setting called <code>disableSameOriginPolicy</code> that makes it possible to bypass the same-origin policy in fetch requests - By <strong><a href="https://github.com/OlaviSau"><code>@OlaviSau</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1553">#1553</a></li> </ul> <h2>v15.9.0</h2> <h3>🎨 Features</h3> <ul> <li>Adds support for "aspect-ratio" to <code>CSSStyleDeclaration</code> - By <strong><a href="https://github.com/yinm"><code>@yinm</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1147">#1147</a></li> </ul> <h2>v15.8.5</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Fixes bug where <code>Node.getRootNode()</code> returned null when it was within a <code>ShadowRoot</code> that previously been disconnected from the <code>Document</code> - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1581">#1581</a></li> </ul> <h2>v15.8.4</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Fixes bug where child nodes of <code>HTMLSelectElement</code> and <code>HTMLFormElement</code> had the wrong reference to the parent - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1578">#1578</a></li> </ul> <h2>v15.8.3</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Toggle "open" attribute on <code>HTMLDetailsElement</code> when dispatching a click event on a summary element which is a child of the details element - By <strong><a href="https://github.com/mikedidomizio"><code>@mikedidomizio</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1534">#1534</a></li> </ul> <h2>v15.8.2</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Use <code>globalThis</code> instead of <code>global</code> to make Happy DOM work in other runtimes such as Cloudflare workers - By <strong><a href="https://github.com/mattallty"><code>@mattallty</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1546">#1546</a></li> </ul> <h2>v15.8.1</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Always return <code>Promise<Blob></code> from <code>ClipboardItem.getType()</code> - By <strong><a href="https://github.com/ezzatron"><code>@ezzatron</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1538">#1538</a></li> </ul> <h2>v15.8.0</h2> <h3>👷♂️ Patch fixes</h3> <ul> <li>Adds support for using non-ASCII characters in custom elements when parsing HTML - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1079">#1079</a></li> <li>Fixes an issue where <code>getHTML()</code> and <code>getInnerHTML()</code> would return the slotted content of a shadow root before the template, but the template should be the first child - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1079">#1079</a></li> <li>Fixes a bug where SVG elements would not be found by <code>getElementsByTagName()</code> - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1079">#1079</a></li> <li>Improves performance when creating elements (e.g. during parsing of HTML) - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1550">#1550</a> <ul> <li>Binding all methods to the target scope in Proxies caused a performance hit, so this is now done when calling a method the first time</li> </ul> </li> </ul> <h3>🎨 Features</h3> <ul> <li>Adds support for all remaining SVG elements: <code>SVGAnimateElement</code>, <code>SVGAnimateMotionElement</code>, <code>SVGAnimateTransformElement</code>, <code>SVGCircleElement</code>, <code>SVGClipPathElement</code>, <code>SVGDefsElement</code>, <code>SVGDescElement</code>, <code>SVGEllipseElement</code>, <code>SVGFEBlendElement</code>, <code>SVGFEColorMatrixElement</code>, <code>SVGFEComponentTransferElement</code>, <code>SVGFECompositeElement</code>, <code>SVGFEConvolveMatrixElement</code>, <code>SVGFEDiffuseLightingElement</code>, <code>SVGFEDisplacementMapElement</code>, <code>SVGFEDistantLightElement</code>, <code>SVGFEDropShadowElement</code>, <code>SVGFEFloodElement</code>, <code>SVGFEFuncAElement</code>, <code>SVGFEFuncBElement</code>, <code>SVGFEFuncGElement</code>, <code>SVGFEFuncRElement</code>, <code>SVGFEGaussianBlurElement</code>, <code>SVGFEImageElement</code>, <code>SVGFEMergeElement</code>, <code>SVGFEMergeNodeElement</code>, <code>SVGFEMorphologyElement</code>, <code>SVGFEOffsetElement</code>, <code>SVGFEPointLightElement</code>, <code>SVGFESpecularLightingElement</code>, <code>SVGFESpotLightElement</code>, <code>SVGFETileElement</code>, <code>SVGFETurbulenceElement</code>, <code>SVGFilterElement</code>, <code>SVGForeignObjectElement</code>, <code>SVGGElement</code>, <code>SVGImageElement</code>, <code>SVGLineElement</code>, <code>SVGLinearGradientElement</code>, <code>SVGMarkerElement</code>, <code>SVGMaskElement</code>, <code>SVGMetadataElement</code>, <code>SVGMPathElement</code>, <code>SVGPathElement</code>, <code>SVGPatternElement</code>, <code>SVGPolygonElement</code>, <code>SVGPolylineElement</code>, <code>SVGRadialGradientElement</code>, <code>SVGRectElement</code>, <code>SVGScriptElement</code>, <code>SVGSetElement</code>, <code>SVGStopElement</code>, <code>SVGStyleElement</code>, <code>SVGSwitchElement</code>, <code>SVGSymbolElement</code>, <code>SVGTextElement</code>, <code>SVGTextPathElement</code>, <code>SVGTitleElement</code>, <code>SVGTSpanElement</code>, <code>SVGUseElement</code> and <code>SVGViewElement</code> - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1079">#1079</a></li> <li>Adds support for <code>DOMMatrix</code>, <code>DOMMatrixReadOnly</code>, <code>DOMPoint</code> and <code>DOMPointReadOnly</code> - By <strong><a href="https://github.com/capricorn86"><code>@capricorn86</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/1079">#1079</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
---|---|---|
.chronus | ||
.devcontainer | ||
.github | ||
.vscode | ||
docker | ||
docs | ||
e2e | ||
eng | ||
grammars | ||
icons/raw | ||
packages | ||
website | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.npmrc | ||
.prettierignore | ||
.prettierrc.json | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md | ||
SECURITY.md | ||
api-extractor.base.json | ||
cspell.yaml | ||
eslint.config.js | ||
package.json | ||
pnpm-lock.yaml | ||
pnpm-workspace.yaml | ||
troubleshooting.md | ||
tsconfig.base.json | ||
tsconfig.eng.json | ||
tsconfig.json | ||
tsconfig.ws.json | ||
vitest.config.ts | ||
vitest.workspace.ts |
README.md
TypeSpec
Official Docs | Try TypeSpec Online | Getting Started | Language Overview
TypeSpec is a language for defining cloud service APIs and shapes. TypeSpec is a highly extensible language with primitives that can describe API shapes common among REST, OpenAPI, gRPC, and other protocols.
TypeSpec is excellent for generating many different API description formats, client and service code, documentation, and many other assets. All this while keeping your TypeSpec definition as a single source of truth.
Using TypeSpec, you can create reusable patterns for all aspects of an API and package those reusable patterns into libraries. These patterns establish "guardrails" for API designers and makes it easier to follow best practices than to deviate from them. TypeSpec also has a rich linter framework with the ability to flag anti-patterns as well as an emitter framework that lets you control of the output to ensure it follows the patterns you want.
Installation
npm install -g @typespec/compiler
Tools
The TypeSpec VS Code extension can be installed from the VS Code marketplace or directly on the command line:
tsp code install
The TypeSpec VS Extension can be installed from the VS Marketplace or directly on the command line:
tsp vs install
Usage
TypeSpec to OpenAPI 3.0 Example
This example uses the @typespec/http
, @typespec/rest
, and @typespec/openapi3
libraries to define a basic REST service and generate an OpenAPI 3.0 document from it.
Run the following command and select "Generic REST API":
tsp init
Hit enter a few times to confirm the defaults.
Copy the contents below into your main.tsp:
import "@typespec/http";
import "@typespec/rest";
import "@typespec/openapi3";
using TypeSpec.Http;
using TypeSpec.Rest;
/** This is a pet store service. */
@service({
title: "Pet Store Service",
})
@server("https://example.com", "The service endpoint")
namespace PetStore;
@route("/pets")
interface Pets {
list(): Pet[];
}
model Pet {
@minLength(100)
name: string;
@minValue(0)
@maxValue(100)
age: int32;
kind: "dog" | "cat" | "fish";
}
Install the dependencies of main.tsp:
tsp install
Compile it to OpenAPI 3.0:
tsp compile main.tsp --emit @typespec/openapi3
You can find the emitted OpenAPI output in ./tsp-output/openapi.json
.
Advanced Scenarios
Installing nightly version
On every commit to the main branch, packages with changes are automatically published to npm with the @next
tag.
The packages section shows which version corresponds to the next
tag for each package.
To use a nightly
version of the packages, go over each one of the packages in the package.json
file and update it to either the latest published @next
version or @latest
, whichever is the newest. You can also use the tag latest
or next
instead of an explicit version.
After updating the package.json file you can run npm update --force
. Force is required as there might be some incompatible version requirement.
Example
// Stable setup
"dependencies": {
"@typespec/compiler": "~0.30.0",
"@typespec/http": "~0.14.0",
"@typespec/rest": "~0.14.0",
"@typespec/openapi": "~0.9.0",
}
// Consume next version
// In this example: compiler and openapi have changes but rest library has none
"dependencies": {
"@typespec/compiler": "~0.31.0-dev.5",
"@typespec/http": "~0.14.0",
"@typespec/rest": "~0.14.0", // No changes to @typespec/rest library so need to stay the latest.
"@typespec/openapi": "~0.10.0-dev.2",
}
Packages
Name | Changelog | Latest | Next |
---|---|---|---|
Core functionality | |||
@typespec/compiler | Changelog | ||
TypeSpec Libraries | |||
@typespec/http | Changelog | ||
@typespec/rest | Changelog | ||
@typespec/openapi | Changelog | ||
@typespec/openapi3 | Changelog | ||
@typespec/versioning | Changelog | ||
TypeSpec Tools | |||
@typespec/prettier-plugin-typespec | Changelog | ||
typespec-vs | Changelog | ||
typespec-vscode | Changelog | ||
tmlanguage-generator | Changelog |
@next
version of the package are the latest versions available on the main
branch.