mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-21 00:02:30 +00:00
Merge remote-tracking branch 'origin/main' into http-trigger-cors-config
# Conflicts: # backend/windmill-trigger-http/src/handler.rs # frontend/src/lib/components/copilot/chat/workspaceToolsZod.gen.ts
This commit is contained in:
@@ -191,7 +191,14 @@ function createSveltePlugin(appDir: string): any {
|
||||
|
||||
// Convert Svelte syntax to JavaScript
|
||||
try {
|
||||
const { js, warnings } = svelte.compile(source, { filename });
|
||||
// The raw-app editor's in-browser bundler compiles with
|
||||
// `css: "injected"`, so this must too, or the same app renders
|
||||
// styled there and unstyled once the CLI builds it: Svelte's default
|
||||
// ("external") hands the <style> back on a `css` field nothing emits.
|
||||
const { js, warnings } = svelte.compile(source, {
|
||||
filename,
|
||||
css: "injected",
|
||||
});
|
||||
const contents = js.code + `//# sourceMappingURL=` + js.map.toUrl();
|
||||
return { contents, warnings: warnings.map(convertMessage) };
|
||||
} catch (e: any) {
|
||||
|
||||
@@ -10,4 +10,4 @@ export const WM_FORK_PREFIX = "wm-fork";
|
||||
// (e.g. utils.ts) can read it without importing main.ts and creating a circular
|
||||
// dependency (main → workspace → utils → main) that triggers a TDZ.
|
||||
// Re-exported from main.ts for backwards compatibility.
|
||||
export const VERSION = "1.796.0";
|
||||
export const VERSION = "1.799.0";
|
||||
|
||||
Generated
+60
-24
@@ -848,31 +848,35 @@ async deleteS3File(s3object: S3Object, workspace: string | undefined = undefined
|
||||
/**
|
||||
* Sign S3 objects to be used by anonymous users in public apps
|
||||
* @param s3objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 objects
|
||||
*/
|
||||
async signS3Objects(s3objects: S3Object[]): Promise<S3Object[]>
|
||||
async signS3Objects(s3objects: S3Object[], { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object[]>
|
||||
|
||||
/**
|
||||
* Sign S3 object to be used by anonymous users in public apps
|
||||
* @param s3object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 object
|
||||
*/
|
||||
async signS3Object(s3object: S3Object): Promise<S3Object>
|
||||
async signS3Object(s3object: S3Object, { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an array of S3 objects.
|
||||
* If an S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns list of signed public URLs
|
||||
*/
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl }: { baseUrl?: string } = {}): Promise<string[]>
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string[]>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an S3 object. If the S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed public URL
|
||||
*/
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl }: { baseUrl?: string } = {}): Promise<string>
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string>
|
||||
|
||||
/**
|
||||
* Get URLs needed for resuming a flow after this step
|
||||
@@ -1631,31 +1635,35 @@ async deleteS3File(s3object: S3Object, workspace: string | undefined = undefined
|
||||
/**
|
||||
* Sign S3 objects to be used by anonymous users in public apps
|
||||
* @param s3objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 objects
|
||||
*/
|
||||
async signS3Objects(s3objects: S3Object[]): Promise<S3Object[]>
|
||||
async signS3Objects(s3objects: S3Object[], { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object[]>
|
||||
|
||||
/**
|
||||
* Sign S3 object to be used by anonymous users in public apps
|
||||
* @param s3object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 object
|
||||
*/
|
||||
async signS3Object(s3object: S3Object): Promise<S3Object>
|
||||
async signS3Object(s3object: S3Object, { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an array of S3 objects.
|
||||
* If an S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns list of signed public URLs
|
||||
*/
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl }: { baseUrl?: string } = {}): Promise<string[]>
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string[]>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an S3 object. If the S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed public URL
|
||||
*/
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl }: { baseUrl?: string } = {}): Promise<string>
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string>
|
||||
|
||||
/**
|
||||
* Get URLs needed for resuming a flow after this step
|
||||
@@ -2508,31 +2516,35 @@ async deleteS3File(s3object: S3Object, workspace: string | undefined = undefined
|
||||
/**
|
||||
* Sign S3 objects to be used by anonymous users in public apps
|
||||
* @param s3objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 objects
|
||||
*/
|
||||
async signS3Objects(s3objects: S3Object[]): Promise<S3Object[]>
|
||||
async signS3Objects(s3objects: S3Object[], { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object[]>
|
||||
|
||||
/**
|
||||
* Sign S3 object to be used by anonymous users in public apps
|
||||
* @param s3object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed s3 object
|
||||
*/
|
||||
async signS3Object(s3object: S3Object): Promise<S3Object>
|
||||
async signS3Object(s3object: S3Object, { expirySecs }: { expirySecs?: number } = {}): Promise<S3Object>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an array of S3 objects.
|
||||
* If an S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Objects s3 objects to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns list of signed public URLs
|
||||
*/
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl }: { baseUrl?: string } = {}): Promise<string[]>
|
||||
async getPresignedS3PublicUrls(s3Objects: S3Object[], { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string[]>
|
||||
|
||||
/**
|
||||
* Generate a presigned public URL for an S3 object. If the S3 object is not signed yet, it will be signed first.
|
||||
* @param s3Object s3 object to sign
|
||||
* @param expirySecs how long the signature stays valid, in seconds (default 43200 = 12h, clamped to [60, 604800])
|
||||
* @returns signed public URL
|
||||
*/
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl }: { baseUrl?: string } = {}): Promise<string>
|
||||
async getPresignedS3PublicUrl(s3Objects: S3Object, { baseUrl, expirySecs }: { baseUrl?: string; expirySecs?: number } = {}): Promise<string>
|
||||
|
||||
/**
|
||||
* Get URLs needed for resuming a flow after this step
|
||||
@@ -4225,19 +4237,23 @@ def delete_s3_object(s3object: S3Object | str, s3_resource_path: str | None = No
|
||||
#
|
||||
# Args:
|
||||
# s3_objects: List of S3 objects to sign
|
||||
# expiry_secs: How long the signature stays valid, in seconds
|
||||
# (defaults to 43200 = 12h, clamped to [60, 604800])
|
||||
#
|
||||
# Returns:
|
||||
# List of signed S3 objects
|
||||
def sign_s3_objects(s3_objects: list[S3Object | str]) -> list[S3Object]
|
||||
def sign_s3_objects(s3_objects: list[S3Object | str], expiry_secs: int | None = None) -> list[S3Object]
|
||||
|
||||
# Sign a single S3 object for use by anonymous users in public apps.
|
||||
#
|
||||
# Args:
|
||||
# s3_object: S3 object to sign
|
||||
# expiry_secs: How long the signature stays valid, in seconds
|
||||
# (defaults to 43200 = 12h, clamped to [60, 604800])
|
||||
#
|
||||
# Returns:
|
||||
# Signed S3 object
|
||||
def sign_s3_object(s3_object: S3Object | str) -> S3Object
|
||||
def sign_s3_object(s3_object: S3Object | str, expiry_secs: int | None = None) -> S3Object
|
||||
|
||||
# Generate presigned public URLs for an array of S3 objects.
|
||||
# If an S3 object is not signed yet, it will be signed first.
|
||||
@@ -4245,6 +4261,8 @@ def sign_s3_object(s3_object: S3Object | str) -> S3Object
|
||||
# Args:
|
||||
# s3_objects: List of S3 objects to sign
|
||||
# base_url: Optional base URL for the presigned URLs (defaults to WM_BASE_URL)
|
||||
# expiry_secs: How long the signatures stay valid, in seconds
|
||||
# (defaults to 43200 = 12h, clamped to [60, 604800])
|
||||
#
|
||||
# Returns:
|
||||
# List of signed public URLs
|
||||
@@ -4252,7 +4270,7 @@ def sign_s3_object(s3_object: S3Object | str) -> S3Object
|
||||
# Example:
|
||||
# >>> s3_objs = [S3Object(s3="/path/to/file1.txt"), S3Object(s3="/path/to/file2.txt")]
|
||||
# >>> urls = client.get_presigned_s3_public_urls(s3_objs)
|
||||
def get_presigned_s3_public_urls(s3_objects: list[S3Object | str], base_url: str | None = None) -> list[str]
|
||||
def get_presigned_s3_public_urls(s3_objects: list[S3Object | str], base_url: str | None = None, expiry_secs: int | None = None) -> list[str]
|
||||
|
||||
# Generate a presigned public URL for an S3 object.
|
||||
# If the S3 object is not signed yet, it will be signed first.
|
||||
@@ -4260,6 +4278,8 @@ def get_presigned_s3_public_urls(s3_objects: list[S3Object | str], base_url: str
|
||||
# Args:
|
||||
# s3_object: S3 object to sign
|
||||
# base_url: Optional base URL for the presigned URL (defaults to WM_BASE_URL)
|
||||
# expiry_secs: How long the signature stays valid, in seconds
|
||||
# (defaults to 43200 = 12h, clamped to [60, 604800])
|
||||
#
|
||||
# Returns:
|
||||
# Signed public URL
|
||||
@@ -4267,7 +4287,7 @@ def get_presigned_s3_public_urls(s3_objects: list[S3Object | str], base_url: str
|
||||
# Example:
|
||||
# >>> s3_obj = S3Object(s3="/path/to/file.txt")
|
||||
# >>> url = client.get_presigned_s3_public_url(s3_obj)
|
||||
def get_presigned_s3_public_url(s3_object: S3Object | str, base_url: str | None = None) -> str
|
||||
def get_presigned_s3_public_url(s3_object: S3Object | str, base_url: str | None = None, expiry_secs: int | None = None) -> str
|
||||
|
||||
# Get the current user information.
|
||||
#
|
||||
@@ -7915,7 +7935,9 @@ properties:
|
||||
at once (1-65535)
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -8375,7 +8397,9 @@ properties:
|
||||
the instance setting applies, or Access-Control-Allow-Origin: * if it is unset.'
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -8542,7 +8566,9 @@ properties:
|
||||
endpoint.
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -8666,7 +8692,9 @@ properties:
|
||||
- v5
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -8762,7 +8790,9 @@ properties:
|
||||
description: Array of NATS subjects to subscribe to
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -8852,7 +8882,9 @@ properties:
|
||||
description: Name of the PostgreSQL logical replication slot to use
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -9099,7 +9131,9 @@ properties:
|
||||
description: Array of SQS message attribute names to include with each message
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
@@ -9298,7 +9332,9 @@ properties:
|
||||
The extracted value replaces {{state}} in the heartbeat message.
|
||||
error_handler_path:
|
||||
type: string
|
||||
description: Path to a script or flow to run when the triggered job fails
|
||||
description: Path to a script to run when the triggered job fails. A bare path,
|
||||
without the script/ or flow/ prefix a schedule error handler takes; it cannot
|
||||
be a flow.
|
||||
error_handler_args:
|
||||
type: object
|
||||
description: The arguments to pass to the script or flow
|
||||
|
||||
+40
-4
@@ -1,8 +1,5 @@
|
||||
/**
|
||||
* `lib.svelte.ts` / `lib.svelte.js` modules are plain modules that may use
|
||||
* runes. They need `svelte.compileModule`; without it esbuild happily bundles
|
||||
* `$state(...)` as an ordinary call and the app dies at runtime with
|
||||
* "ReferenceError: $state is not defined".
|
||||
* The svelte esbuild plugin, driven through `createBundle`.
|
||||
*/
|
||||
|
||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||
@@ -59,6 +56,12 @@ afterAll(() => {
|
||||
fs.rmSync(tempDir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
/**
|
||||
* `lib.svelte.ts` / `lib.svelte.js` modules are plain modules that may use
|
||||
* runes. They need `svelte.compileModule`; without it esbuild happily bundles
|
||||
* `$state(...)` as an ordinary call and the app dies at runtime with
|
||||
* "ReferenceError: $state is not defined".
|
||||
*/
|
||||
describe("svelte plugin: .svelte.ts modules", () => {
|
||||
test("compiles runes in a TypeScript rune module and the bundle runs", async () => {
|
||||
writeApp({
|
||||
@@ -116,3 +119,36 @@ bump();
|
||||
expect((globalThis as any).__counterResult).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Svelte's default `css: "external"` hands a component's <style> back on a
|
||||
* field the plugin never emits, so the markup keeps its `svelte-<hash>` class
|
||||
* while the rule matching it disappears — no build error, just an app that
|
||||
* renders unstyled from the CLI and styled in the editor.
|
||||
*/
|
||||
describe("svelte plugin: component styles", () => {
|
||||
test("a <style> block reaches the bundle under the class its markup carries", async () => {
|
||||
writeApp({
|
||||
"Styled.svelte": `<main>
|
||||
<h1>Hello</h1>
|
||||
</main>
|
||||
|
||||
<style>
|
||||
h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
</style>
|
||||
`,
|
||||
"styles_entry.ts": `import Styled from './Styled.svelte';
|
||||
export default Styled;
|
||||
`,
|
||||
});
|
||||
|
||||
const js = await bundle("styles_entry.ts");
|
||||
|
||||
const scopeClass = js.match(/<h1 class="(svelte-[a-z0-9]+)"/)?.[1];
|
||||
expect(scopeClass).toBeDefined();
|
||||
expect(js).toContain(`h1.${scopeClass}`);
|
||||
expect(js).toContain("font-size");
|
||||
});
|
||||
});
|
||||
@@ -10,6 +10,12 @@
|
||||
* bear the startup cost inside their per-test timeout window.
|
||||
*/
|
||||
|
||||
// esbuild's node API pins the cwd it spawns its service with to process.cwd() at
|
||||
// module import, and test files chdir into temp dirs they later delete. Import it
|
||||
// here, from a cwd that outlives the run, or the first file to bundle pins the
|
||||
// service to a directory that stops existing and every later build fails ENOENT.
|
||||
import "esbuild";
|
||||
|
||||
if (process.env["UNIT_ONLY"]) {
|
||||
// Nothing to do — unit tests don't need backend setup
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user