diff --git a/.github/workflows/build-and-test-v3.yml b/.github/workflows/build-and-test-v3.yml index ad773fb68..54a0a280c 100644 --- a/.github/workflows/build-and-test-v3.yml +++ b/.github/workflows/build-and-test-v3.yml @@ -3,8 +3,12 @@ name: Build + Test v3 on: pull_request: types: [opened, synchronize, reopened, ready_for_review] + branches: + - v3-alpha pull_request_review: types: [submitted] + branches: + - v3-alpha jobs: check_approval: @@ -22,14 +26,72 @@ jobs: echo "approved=false" >> $GITHUB_OUTPUT fi - test_go: - name: Run Go Tests + test_js: + name: Run JS Tests needs: check_approval + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Task + uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: | + npm ci + npx --yes esbuild@latest --version + + - name: Clean build artifacts + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: npm run clean + + - name: Type-check runtime + working-directory: v3 + run: task runtime:check + + - name: Test runtime + working-directory: v3 + run: task runtime:test + + - name: Check that the bundled runtime builds + working-directory: v3 + run: task runtime:build + + - name: Check that the npm package builds + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: npm run build + + - name: Store runtime build artifacts + uses: actions/upload-artifact@v4 + with: + name: runtime-build-artifacts + path: | + v3/internal/runtime/desktop/@wailsio/runtime/dist/ + v3/internal/runtime/desktop/@wailsio/runtime/types/ + v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.tsbuildinfo + + test_go: + name: Run Go Tests v3 + needs: [check_approval, test_js] runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [windows-latest, macos-latest, ubuntu-latest] + os: [warp-windows-latest-x64-2x, warp-macos-15-arm64-6x, warp-ubuntu-latest-x64-2x] go-version: [1.24] steps: @@ -55,25 +117,31 @@ jobs: version: 3.x repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Retrieve runtime build artifacts + uses: actions/download-artifact@v4 + with: + name: runtime-build-artifacts + path: v3/internal/runtime/desktop/@wailsio/runtime/ + - name: Build Examples - working-directory: ./v3 + working-directory: v3 run: task test:examples - name: Run tests (mac) if: matrix.os == 'macos-latest' env: CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13 - working-directory: ./v3 + working-directory: v3 run: go test -v ./... - name: Run tests (windows) if: matrix.os == 'windows-latest' - working-directory: ./v3 + working-directory: v3 run: go test -v ./... - name: Run tests (ubuntu) if: matrix.os == 'ubuntu-latest' - working-directory: ./v3 + working-directory: v3 run: > xvfb-run --auto-servernum sh -c ' @@ -82,33 +150,19 @@ jobs: ' - name: Typecheck binding generator output - working-directory: ./v3 + working-directory: v3 run: task generator:test:check - test_js: - name: Run JS Tests - needs: check_approval + cleanup: + name: Cleanup build artifacts + if: always() + needs: [test_js, test_go] runs-on: ubuntu-latest - strategy: - matrix: - node-version: [20.x] - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + - uses: geekyeggo/delete-artifact@v5 with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: npm install - working-directory: v2/internal/frontend/runtime - - - name: Run tests - run: npm test - working-directory: v2/internal/frontend/runtime + name: runtime-build-artifacts + failOnError: false test_templates: name: Test Templates @@ -156,7 +210,7 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Build Wails3 CLI - working-directory: ./v3 + working-directory: v3 run: | task install wails3 doctor @@ -168,3 +222,17 @@ jobs: wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }} cd ${{ matrix.template }} wails3 build + + results: + if: ${{ always() }} + runs-on: ubuntu-latest + name: v3 Build Results + needs: [test_go, test_js, test_templates] + steps: + - run: | + result="${{ needs.build.result }}" + if [[ $result == "success" || $result == "skipped" ]]; then + exit 0 + else + exit 1 + fi \ No newline at end of file diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c70050276..9e981bf1d 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,8 +2,12 @@ name: PR Checks on: pull_request: + branches: + - master pull_request_review: types: [submitted] + branches: + - master jobs: check_docs: diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 0db261abe..eb7275f30 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -1,62 +1,113 @@ on: push: branches: ['v3-alpha'] + workflow_dispatch: + +concurrency: + group: publish-npm-v3 + cancel-in-progress: true jobs: - publish: + detect: + name: Detect committed changes + if: github.event_name != 'workflow_dispatch' + outputs: + changed: ${{ steps.package-json-changes.outputs.any_modified == 'true' || steps.source-changes.outputs.any_modified == 'true' }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.sha }} + persist-credentials: 'true' + + - name: Detect committed package.json changes + id: package-json-changes + uses: tj-actions/changed-files@v45 + with: + files: | + v3/internal/runtime/desktop/@wailsio/runtime/package.json + + - name: Detect committed source changes + if: >- + steps.package-json-changes.outputs.any_modified != 'true' + id: source-changes + uses: tj-actions/changed-files@v45 + with: + files: | + v3/internal/runtime/Taskfile.yaml + v3/internal/runtime/desktop/@wailsio/compiled/main.js + v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json + v3/internal/runtime/desktop/@wailsio/runtime/src/** + v3/pkg/events/events.txt + v3/tasks/events/** + + rebuild_and_publish: + name: Rebuild and publish + needs: [detect] + if: >- + !failure() && !cancelled() + && (github.event_name == 'workflow_dispatch' || needs.detect.outputs.changed == 'true') + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 with: fetch-depth: 0 ref: 'v3-alpha' ssh-key: ${{ secrets.DEPLOY_KEY }} - - name: Configure git run: | git config --local user.email "github-actions@github.com" git config --local user.name "GitHub Actions" - - name: Setup go-task - uses: pnorton5432/setup-task@v1 + - name: Install Task + uses: arduino/setup-task@v2 with: - task-version: 3.29.1 + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-node@v3 + - name: Use Node.js 20 + uses: actions/setup-node@v4 with: node-version: "20" - - run: | - npm ci - npm run build:types - npm run build:docs + + - name: Install dependencies working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: | + npm ci + npx --yes esbuild@latest --version - - name: Verify Changed files - uses: tj-actions/verify-changed-files@v20 - id: verify-changed-files - with: - files: | - v3/internal/runtime/desktop/@wailsio/runtime/src/*.js - v3/internal/runtime/desktop/@wailsio/runtime/types/*.d.ts - v3/internal/runtime/desktop/@wailsio/runtime/docs/**/*.* + - name: Clean build artifacts + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: npm run clean - - name: test action - if: steps.verify-changed-files.outputs.files_changed == 'true' - id: get-version - uses: beaconbrigade/package-json-version@v0.3.2 - with: - path: v3/internal/runtime/desktop/@wailsio/runtime + - name: Build bundled runtime + working-directory: v3 + run: task runtime:build + + - name: Test+Build npm package + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: | + npm test + npm run build + + - name: Bump version + id: bump-version + working-directory: v3/internal/runtime/desktop/@wailsio/runtime + run: | + echo "version=$(npm --no-git-tag-version --force version prerelease)" >> "$GITHUB_OUTPUT" - name: Commit changes - if: steps.verify-changed-files.outputs.files_changed == 'true' run: | git add . - git commit -m "[skip ci] Publish @wailsio/runtime ${{ steps.get-version.outputs.version }}" + git commit -m "[skip ci] Publish @wailsio/runtime ${{ steps.bump-version.outputs.version }}" git push + fi - - uses: JS-DevTools/npm-publish@v3 - if: steps.verify-changed-files.outputs.files_changed == 'true' + - name: Publish npm package + uses: JS-DevTools/npm-publish@v3 with: package: v3/internal/runtime/desktop/@wailsio/runtime access: public diff --git a/docs/src/content/docs/changelog.mdx b/docs/src/content/docs/changelog.mdx index 3974f344e..fd18b76c6 100644 --- a/docs/src/content/docs/changelog.mdx +++ b/docs/src/content/docs/changelog.mdx @@ -53,6 +53,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `//wails:ignore` directive to prevent binding generation for chosen service methods by [@fbbdev](https://github.com/fbbdev) in [#4045](https://github.com/wailsapp/wails/pull/4045) - Add `//wails:internal` directive on services and models to allow for types that are exported in Go but not in JS/TS by [@fbbdev](https://github.com/fbbdev) in [#4045](https://github.com/wailsapp/wails/pull/4045) - Add binding generator support for constants of alias type to allow for weakly typed enums by [@fbbdev](https://github.com/fbbdev) in [#4045](https://github.com/wailsapp/wails/pull/4045) +- Add binding generator tests for Go 1.24 features by [@fbbdev](https://github.com/fbbdev) in [#4068](https://github.com/wailsapp/wails/pull/4068) - Add support for macOS 15 "Sequoia" to `OSInfo.Branding` for improved OS version detection in [#4065](https://github.com/wailsapp/wails/pull/4065) - Add `PostShutdown` hook for running custom code after the shutdown process completes by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) - Add `FatalError` struct to support detection of fatal errors in custom error handlers by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) @@ -60,6 +61,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add test harness for application startup/shutdown sequence and service startup/shutdown tests by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) - Add `RegisterService` method for registering services after the application has been created by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) - Add `MarshalError` field in application and service options for custom error handling in binding calls by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) +- Add cancellable promise wrapper that propagates cancellation requests through promise chains by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- Add the ability to tie binding call cancellation to an `AbortSignal` by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- Support `data-wml-*` attributes for WML alongside the usual `wml-*` attributes by [@leaanthony](https://github.com/leaanthony) - Add `Configure` method on all services for late configuration/dynamic reconfiguration by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) - `fileserver` service sends a 503 Service Unavailable response when unconfigured by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) - `kvstore` service provides an in-memory key-value store by default when unconfigured by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) @@ -100,6 +104,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed hidden menu items on macOS by [@leaanthony](https://github.com/leaanthony) - Fixed handling and formatting of errors in message processors by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) -  Fixed skipped service shutdown when quitting application by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) +-  Ensure menu updates occur on the main thread by [@leaanthony](https://github.com/leaanthony) +- The dragging and resizing mechanism is now more robust and matches expected platform behaviour more closely by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- Fixed [#4097](https://github.com/wailsapp/wails/issues/4097) Webpack/angular discards runtime init code by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) ### Changed @@ -120,6 +127,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `ServiceStartup` hooks are now invoked when `App.Run` is called, not in `application.New` by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) - `ServiceStartup` errors are now returned from `App.Run` instead of terminating the process by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) - Binding and dialog calls from JS now reject with error objects instead of strings by [@fbbdev](https://github.com/fbbdev) in [#4066](https://github.com/wailsapp/wails/pull/4066) +- Improved systray menu positioning on Windows by [@leaanthony](https://github.com/leaanthony) +- The JS runtime has been ported to TypeScript by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- The runtime initialises as soon as it is imported, no need to wait for the window to load by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- The runtime does not export an init method anymore. A side effects import can be used to initialise it by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) +- Bound methods now return a `CancellablePromise` that rejects with a `CancelError` if cancelled. The actual result of the call is discarded by [@fbbdev](https://github.com/fbbdev) in [#4100](https://github.com/wailsapp/wails/pull/4100) - Built-in service types are now consistently called `Service` by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) - Built-in service creation functions with options are now consistently called `NewWithConfig` by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) - `Select` method on `sqlite` service is now named `Query` for consistency with Go APIs by [@fbbdev](https://github.com/fbbdev) in [#4067](https://github.com/wailsapp/wails/pull/4067) diff --git a/docs/src/content/docs/guides/menus.mdx b/docs/src/content/docs/guides/menus.mdx index 58a9cd313..50023ab4d 100644 --- a/docs/src/content/docs/guides/menus.mdx +++ b/docs/src/content/docs/guides/menus.mdx @@ -366,6 +366,10 @@ You can control when the default context menu appears using the `--default-conte ``` +:::note +This feature will only work as expected after the runtime [has been initialised](../../learn/runtime#initialisation). +::: + #### Nested Context Menu Behavior When using the `--default-contextmenu` property on nested elements, the following rules apply: diff --git a/docs/src/content/docs/learn/bindings.mdx b/docs/src/content/docs/learn/bindings.mdx index 1ca0ee590..d66de725f 100644 --- a/docs/src/content/docs/learn/bindings.mdx +++ b/docs/src/content/docs/learn/bindings.mdx @@ -437,8 +437,9 @@ func (s *MyService) WindowAwareMethod(ctx context.Context) (string, error) { ``` From the frontend, these methods can be called normally. If you need to cancel a -long-running operation, the Promise will be rejected with the cancellation -error: +long-running operation, you can call the special `cancel` method on the promise +and it will reject immediately with a special cancellation error; +the Go context will be cancelled and the actual result of the call will be discarded: ```javascript // Call the method @@ -449,6 +450,84 @@ const promise = MyService.LongRunningTask("input"); promise.cancel(); ``` +In fact, the runtime returns a special promise wrapper +that provides cancellation support for arbitrarily long promise chains. +For example: + +```javascript +import { CancelError } from "@wailsio/runtime"; + +// Call the method and process its output +const promise = MyService.LongRunningTask("input").then((result) => { + console.log(result); +}).catch((err) => { + if (err instanceof CancelError) { + console.log("Cancelled.", err.cause); + } else { + console.error("Failed.", err); + } +}); + +// Later... +// cancel() accepts an optional cause parameter +// that will be attached to the cancellation error: +promise.cancel("I'm tired of waiting!").then(() => { + // Cancellation has been requested successfully + // and all handlers attached above have run. + console.log("Ready for the next adventure!"); +}); +``` + +The `cancel` method returns a promise that fulfills always (and never rejects) +after the cancellation request has been submitted successfully +and all previously attached handlers have run. + +:::note +Calling the `cancel` method on a settled promise is safe and has no effect; +if the task completes before the call to `cancel`, the code above is going to log: + +``` +completed +Ready for the next adventure! +``` + +However, if `cancel` is called before the task finishes, the output will be: + +``` +Cancelled. I'm tired of waiting! +Ready for the next adventure! +``` +::: + +The approach discussed above requires storing and chaining promises manually, +which can be cumbersome for code written in `async`/`await` style. +If you target plaforms that support the `AbortController`/`AbortSignal` idiom, +you can call the `cancelOn` method and tie call cancellation to an `AbortSignal` instead: + +```javascript +async function callBinding(signal) { + try { + await MyService.LongRunningTask("input").cancelOn(signal); + } catch (err) { + if (err instanceof CancelError) { + console.log("Cancelled! Cause: ", err.cause); + } else { + console.error("Failed! Error: ", err); + } + } +} + +let controller = new AbortController(); +callBinding(controller.signal); + +// Later... +controller.abort("I'm tired of waiting!"); +``` + +:::caution +On the macOS platform, `AbortSignal` is only supported from macOS 10.15 Catalina onwards. +::: + ### Handling errors As you may have noticed above, bound methods can return errors, which are handled specially. diff --git a/docs/src/content/docs/learn/context-menu.mdx b/docs/src/content/docs/learn/context-menu.mdx index f56e9a763..ca57f182b 100644 --- a/docs/src/content/docs/learn/context-menu.mdx +++ b/docs/src/content/docs/learn/context-menu.mdx @@ -65,6 +65,10 @@ To associate a context menu with an HTML element, use the `--custom-contextmenu` - `--custom-contextmenu`: Specifies the menu ID (must match the ID used in `NewContextMenu`) - `--custom-contextmenu-data`: Optional data that will be passed to the click handlers +:::note +This feature will only work as expected after the runtime [has been initialised](../runtime#initialisation). +::: + ## Default Context Menu The default context menu is the webview's built-in context menu that provides system-level operations. You can control its visibility using the `--default-contextmenu` CSS property: diff --git a/docs/src/content/docs/learn/runtime.mdx b/docs/src/content/docs/learn/runtime.mdx index 3c2fbfc33..7b66a06b3 100644 --- a/docs/src/content/docs/learn/runtime.mdx +++ b/docs/src/content/docs/learn/runtime.mdx @@ -22,12 +22,12 @@ The runtime is required for integration between Go and the frontend. There are 2 ways to integrate the runtime: - Using the `@wailsio/runtime` package -- Using a pre-built version of the runtime +- Using a pre-built bundle ## Using the npm package The `@wailsio/runtime` package is a JavaScript package that provides access to -the Wails runtime from the frontend. It is used in by all the standard templates +the Wails runtime from the frontend. It is used by all standard templates and is the recommended way to integrate the runtime into your application. By using the `@wailsio/runtime` package, you will only include the parts of the runtime that you use. @@ -37,25 +37,55 @@ The package is available on npm and can be installed using: npm install --save @wailsio/runtime ``` -## Using a pre-built local version of the runtime +## Using a pre-built bundle Some projects will not use a Javascript bundler and may prefer to use a -pre-built version of the runtime. This is the default for the examples in -`v3/examples`. The pre-built version of the runtime can be generated using the -following command: +pre-built bundled version of the runtime. This version can be generated locally +using the following command: ```shell wails3 generate runtime ``` -This will generate a `runtime.js` (and `runtime.debug.js`) file in the current -directory. This file can be used by your application by adding it to your frontend project: +The command will output a `runtime.js` (and `runtime.debug.js`) file in the current +directory. This file is an ES module that can be imported by your application scripts +just like the npm package, but the API is also exported to the global window object, +so for simpler applications you can use it as follows: ```html - + + - + ``` + +:::caution +It is important to include the `type="module"` attribute on the ` + + diff --git a/v3/examples/cancel-async/main.go b/v3/examples/cancel-async/main.go new file mode 100644 index 000000000..3d7855208 --- /dev/null +++ b/v3/examples/cancel-async/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v3/pkg/application" +) + +//go:embed assets/* +var assets embed.FS + +func main() { + app := application.New(application.Options{ + Services: []application.Service{ + application.NewService(&Service{}), + }, + Assets: application.AssetOptions{ + Handler: application.BundledAssetFileServer(assets), + }, + Mac: application.MacOptions{ + ApplicationShouldTerminateAfterLastWindowClosed: true, + }, + }) + + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + URL: "/", + DevToolsEnabled: true, + }) + + err := app.Run() + + if err != nil { + log.Fatal(err) + } + +} diff --git a/v3/examples/cancel-async/service.go b/v3/examples/cancel-async/service.go new file mode 100644 index 000000000..b2cc72e9b --- /dev/null +++ b/v3/examples/cancel-async/service.go @@ -0,0 +1,19 @@ +package main + +import ( + "context" + "time" +) + +type Service struct { +} + +// A long running operation of specified duration. +func (*Service) LongRunning(ctx context.Context, milliseconds int) error { + select { + case <-time.After(time.Duration(milliseconds) * time.Millisecond): + return nil + case <-ctx.Done(): + return ctx.Err() + } +} diff --git a/v3/examples/cancel-chaining/README.md b/v3/examples/cancel-chaining/README.md new file mode 100644 index 000000000..10c5855ea --- /dev/null +++ b/v3/examples/cancel-chaining/README.md @@ -0,0 +1,5 @@ +# Binding Call Cancelling Example + +This example demonstrates how to cancel binding calls in promise chaining style. + +To regenerate bindings, run `wails3 generate bindings -clean -b -d assets/bindings` in this directory. diff --git a/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/index.js b/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/index.js new file mode 100644 index 000000000..d2bf43c94 --- /dev/null +++ b/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/index.js @@ -0,0 +1,8 @@ +// @ts-check +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +import * as Service from "./service.js"; +export { + Service +}; diff --git a/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/service.js b/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/service.js new file mode 100644 index 000000000..6aae91e1d --- /dev/null +++ b/v3/examples/cancel-chaining/assets/bindings/github.com/wailsapp/wails/v3/examples/cancel-chaining/service.js @@ -0,0 +1,16 @@ +// @ts-check +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore: Unused imports +import {Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create} from "/wails/runtime.js"; + +/** + * A long running operation of specified duration. + * @param {number} milliseconds + * @returns {$CancellablePromise} + */ +export function LongRunning(milliseconds) { + return $Call.ByID(298191698, milliseconds); +} diff --git a/v3/examples/cancel-chaining/assets/index.html b/v3/examples/cancel-chaining/assets/index.html new file mode 100644 index 000000000..71221c28d --- /dev/null +++ b/v3/examples/cancel-chaining/assets/index.html @@ -0,0 +1,136 @@ + + + + + Wails Alpha + + + + +
Alpha
+
+

Documentation

+

Feedback

+
+
Please enter a duration in milliseconds below 👇
+
+ + + + +
+ + + diff --git a/v3/examples/cancel-chaining/main.go b/v3/examples/cancel-chaining/main.go new file mode 100644 index 000000000..3d7855208 --- /dev/null +++ b/v3/examples/cancel-chaining/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v3/pkg/application" +) + +//go:embed assets/* +var assets embed.FS + +func main() { + app := application.New(application.Options{ + Services: []application.Service{ + application.NewService(&Service{}), + }, + Assets: application.AssetOptions{ + Handler: application.BundledAssetFileServer(assets), + }, + Mac: application.MacOptions{ + ApplicationShouldTerminateAfterLastWindowClosed: true, + }, + }) + + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + URL: "/", + DevToolsEnabled: true, + }) + + err := app.Run() + + if err != nil { + log.Fatal(err) + } + +} diff --git a/v3/examples/cancel-chaining/service.go b/v3/examples/cancel-chaining/service.go new file mode 100644 index 000000000..b2cc72e9b --- /dev/null +++ b/v3/examples/cancel-chaining/service.go @@ -0,0 +1,19 @@ +package main + +import ( + "context" + "time" +) + +type Service struct { +} + +// A long running operation of specified duration. +func (*Service) LongRunning(ctx context.Context, milliseconds int) error { + select { + case <-time.After(time.Duration(milliseconds) * time.Millisecond): + return nil + case <-ctx.Done(): + return ctx.Err() + } +} diff --git a/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/examples/services/hashes/service.js b/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/examples/services/hashes/service.js index ed4a57d7d..f5c01b306 100644 --- a/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/examples/services/hashes/service.js +++ b/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/examples/services/hashes/service.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import {Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create} from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -12,9 +12,8 @@ import * as $models from "./models.js"; /** * @param {string} s - * @returns {Promise<$models.Hashes> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Hashes>} */ export function Generate(s) { - let $resultPromise = /** @type {any} */($Call.ByID(1123907498, s)); - return $resultPromise; + return $Call.ByID(1123907498, s); } diff --git a/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/pkg/services/kvstore/keyvaluestore.js b/v3/examples/services/assets/bindings/github.com/wailsapp/wails/v3/pkg/services/kvstore/keyvaluestore.js new file mode 100644 index 000000000..e69de29bb diff --git a/v3/examples/services/assets/index.html b/v3/examples/services/assets/index.html index 84e856a4f..c44a0679a 100644 --- a/v3/examples/services/assets/index.html +++ b/v3/examples/services/assets/index.html @@ -48,11 +48,7 @@ let results = document.getElementById("sqlresults"); results.innerHTML = ""; if (!isSelect) { - let message = "Query executed successfully"; - if (result.length > 0) { - message += " - " + result; - } - results.innerHTML = message; + results.innerHTML = "Query executed successfully"; return; } if (result.length === 0) { @@ -78,6 +74,8 @@ } results.appendChild(table); }).catch((err) => { + // Log error for debugging + console.error(err); // Put error in results document.getElementById("sqlresults").innerHTML = "

" + err + "

"; }); diff --git a/v3/examples/wml/assets/index.html b/v3/examples/wml/assets/index.html index 5895e3d43..466f4c5f0 100644 --- a/v3/examples/wml/assets/index.html +++ b/v3/examples/wml/assets/index.html @@ -136,22 +136,22 @@ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAMrCAYAAADX0eD4AAAFQmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTAyNCIKICAgZXhpZjpQaXhlbFlEaW1lbnNpb249IjgxMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB0aWZmOkltYWdlTGVuZ3RoPSI4MTEiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAyNCIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iNzIvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iNzIvMSIKICAgeG1wOk1ldGFkYXRhRGF0ZT0i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"/>
Alpha
-

Documentation

-

Feedback

+

Documentation

+

Feedback

This application contains no Javascript!

-

Emit event

+

Emit event

Delete all the things!

-

Close the Window?

-

Center

-

Minimise

-

Maximise

-

UnMaximise

+

Close the Window?

+

Center

+

Minimise

+

Maximise

+

UnMaximise

Fullscreen

UnFullscreen

Restore

Open Browser?

-

Hover over me

+

Hover over me

diff --git a/v3/internal/assetserver/bundledassets/runtime.debug.js b/v3/internal/assetserver/bundledassets/runtime.debug.js index f7beb3c2f..fc1340c40 100644 --- a/v3/internal/assetserver/bundledassets/runtime.debug.js +++ b/v3/internal/assetserver/bundledassets/runtime.debug.js @@ -1,15 +1,36 @@ var __defProp = Object.defineProperty; +var __defProps = Object.defineProperties; +var __getOwnPropDescs = Object.getOwnPropertyDescriptors; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + } + return a; +}; +var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; -// desktop/@wailsio/runtime/src/index.js +// desktop/@wailsio/runtime/src/index.ts var index_exports = {}; __export(index_exports, { Application: () => application_exports, Browser: () => browser_exports, Call: () => calls_exports, + CancelError: () => CancelError, + CancellablePromise: () => CancellablePromise, + CancelledRejectionError: () => CancelledRejectionError, Clipboard: () => clipboard_exports, Create: () => create_exports, Dialogs: () => dialogs_exports, @@ -18,37 +39,36 @@ __export(index_exports, { Screens: () => screens_exports, System: () => system_exports, WML: () => wml_exports, - Window: () => window_default, - init: () => init + Window: () => window_default }); -// desktop/@wailsio/runtime/src/wml.js +// desktop/@wailsio/runtime/src/wml.ts var wml_exports = {}; __export(wml_exports, { Enable: () => Enable, Reload: () => Reload }); -// desktop/@wailsio/runtime/src/browser.js +// desktop/@wailsio/runtime/src/browser.ts var browser_exports = {}; __export(browser_exports, { OpenURL: () => OpenURL }); -// desktop/@wailsio/runtime/src/nanoid.js +// desktop/@wailsio/runtime/src/nanoid.ts var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"; -var nanoid = (size = 21) => { +function nanoid(size = 21) { let id = ""; let i = size | 0; while (i--) { id += urlAlphabet[Math.random() * 64 | 0]; } return id; -}; +} -// desktop/@wailsio/runtime/src/runtime.js +// desktop/@wailsio/runtime/src/runtime.ts var runtimeURL = window.location.origin + "/wails/runtime"; -var objectNames = { +var objectNames = Object.freeze({ Call: 0, Clipboard: 1, Application: 2, @@ -60,50 +80,46 @@ var objectNames = { System: 8, Browser: 9, CancelCall: 10 -}; +}); var clientId = nanoid(); -function newRuntimeCallerWithID(object, windowName) { +function newRuntimeCaller(object, windowName = "") { return function(method, args = null) { return runtimeCallWithID(object, method, windowName, args); }; } async function runtimeCallWithID(objectID, method, windowName, args) { + var _a2, _b; let url = new URL(runtimeURL); - if (objectID != null) { - url.searchParams.append("object", objectID); - } - if (method != null) { - url.searchParams.append("method", method); - } - let fetchOptions = { - headers: {} - }; - if (windowName) { - fetchOptions.headers["x-wails-window-name"] = windowName; - } + url.searchParams.append("object", objectID.toString()); + url.searchParams.append("method", method.toString()); if (args) { url.searchParams.append("args", JSON.stringify(args)); } - fetchOptions.headers["x-wails-client-id"] = clientId; - let response = await fetch(url, fetchOptions); + let headers = { + ["x-wails-client-id"]: clientId + }; + if (windowName) { + headers["x-wails-window-name"] = windowName; + } + let response = await fetch(url, { headers }); if (!response.ok) { throw new Error(await response.text()); } - if (response.headers.get("Content-Type") && response.headers.get("Content-Type").indexOf("application/json") !== -1) { + if (((_b = (_a2 = response.headers.get("Content-Type")) == null ? void 0 : _a2.indexOf("application/json")) != null ? _b : -1) !== -1) { return response.json(); } else { return response.text(); } } -// desktop/@wailsio/runtime/src/browser.js -var call = newRuntimeCallerWithID(objectNames.Browser, ""); +// desktop/@wailsio/runtime/src/browser.ts +var call = newRuntimeCaller(objectNames.Browser); var BrowserOpenURL = 0; function OpenURL(url) { - return call(BrowserOpenURL, { url }); + return call(BrowserOpenURL, { url: url.toString() }); } -// desktop/@wailsio/runtime/src/dialogs.js +// desktop/@wailsio/runtime/src/dialogs.ts var dialogs_exports = {}; __export(dialogs_exports, { Error: () => Error2, @@ -116,14 +132,38 @@ __export(dialogs_exports, { window._wails = window._wails || {}; window._wails.dialogErrorCallback = dialogErrorCallback; window._wails.dialogResultCallback = dialogResultCallback; +var call2 = newRuntimeCaller(objectNames.Dialog); +var dialogResponses = /* @__PURE__ */ new Map(); var DialogInfo = 0; var DialogWarning = 1; var DialogError = 2; var DialogQuestion = 3; var DialogOpenFile = 4; var DialogSaveFile = 5; -var call2 = newRuntimeCallerWithID(objectNames.Dialog, ""); -var dialogResponses = /* @__PURE__ */ new Map(); +function dialogResultCallback(id, data, isJSON) { + let resolvers = getAndDeleteResponse(id); + if (!resolvers) { + return; + } + if (isJSON) { + try { + resolvers.resolve(JSON.parse(data)); + } catch (err) { + resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err })); + } + } else { + resolvers.resolve(data); + } +} +function dialogErrorCallback(id, message) { + var _a2; + (_a2 = getAndDeleteResponse(id)) == null ? void 0 : _a2.reject(new window.Error(message)); +} +function getAndDeleteResponse(id) { + const response = dialogResponses.get(id); + dialogResponses.delete(id); + return response; +} function generateID() { let result; do { @@ -131,43 +171,37 @@ function generateID() { } while (dialogResponses.has(result)); return result; } -function dialog(type2, options = {}) { +function dialog(type, options = {}) { const id = generateID(); - options["dialog-id"] = id; return new Promise((resolve, reject) => { dialogResponses.set(id, { resolve, reject }); - call2(type2, options).catch((error) => { - reject(error); + call2(type, Object.assign({ "dialog-id": id }, options)).catch((err) => { dialogResponses.delete(id); + reject(err); }); }); } -function dialogResultCallback(id, data, isJSON) { - let p = dialogResponses.get(id); - if (p) { - dialogResponses.delete(id); - if (isJSON) { - p.resolve(JSON.parse(data)); - } else { - p.resolve(data); - } - } +function Info(options) { + return dialog(DialogInfo, options); } -function dialogErrorCallback(id, message) { - let p = dialogResponses.get(id); - if (p) { - dialogResponses.delete(id); - p.reject(new Error2(message)); - } +function Warning(options) { + return dialog(DialogWarning, options); +} +function Error2(options) { + return dialog(DialogError, options); +} +function Question(options) { + return dialog(DialogQuestion, options); +} +function OpenFile(options) { + var _a2; + return (_a2 = dialog(DialogOpenFile, options)) != null ? _a2 : []; +} +function SaveFile(options) { + return dialog(DialogSaveFile, options); } -var Info = (options) => dialog(DialogInfo, options); -var Warning = (options) => dialog(DialogWarning, options); -var Error2 = (options) => dialog(DialogError, options); -var Question = (options) => dialog(DialogQuestion, options); -var OpenFile = (options) => dialog(DialogOpenFile, options); -var SaveFile = (options) => dialog(DialogSaveFile, options); -// desktop/@wailsio/runtime/src/events.js +// desktop/@wailsio/runtime/src/events.ts var events_exports = {}; __export(events_exports, { Emit: () => Emit, @@ -177,13 +211,44 @@ __export(events_exports, { OnMultiple: () => OnMultiple, Once: () => Once, Types: () => Types, - WailsEvent: () => WailsEvent, - setup: () => setup + WailsEvent: () => WailsEvent }); -// desktop/@wailsio/runtime/src/event_types.js -var EventTypes = { - Windows: { +// desktop/@wailsio/runtime/src/listener.ts +var eventListeners = /* @__PURE__ */ new Map(); +var Listener = class { + constructor(eventName, callback, maxCallbacks) { + this.eventName = eventName; + this.callback = callback; + this.maxCallbacks = maxCallbacks || -1; + } + dispatch(data) { + try { + this.callback(data); + } catch (err) { + console.error(err); + } + if (this.maxCallbacks === -1) return false; + this.maxCallbacks -= 1; + return this.maxCallbacks === 0; + } +}; +function listenerOff(listener) { + let listeners = eventListeners.get(listener.eventName); + if (!listeners) { + return; + } + listeners = listeners.filter((l) => l !== listener); + if (listeners.length === 0) { + eventListeners.delete(listener.eventName); + } else { + eventListeners.set(listener.eventName, listeners); + } +} + +// desktop/@wailsio/runtime/src/event_types.ts +var Types = Object.freeze({ + Windows: Object.freeze({ APMPowerSettingChange: "windows:APMPowerSettingChange", APMPowerStatusChange: "windows:APMPowerStatusChange", APMResumeAutomatic: "windows:APMResumeAutomatic", @@ -228,8 +293,8 @@ var EventTypes = { WindowUnMinimise: "windows:WindowUnMinimise", WindowMaximise: "windows:WindowMaximise", WindowUnMaximise: "windows:WindowUnMaximise" - }, - Mac: { + }), + Mac: Object.freeze({ ApplicationDidBecomeActive: "mac:ApplicationDidBecomeActive", ApplicationDidChangeBackingProperties: "mac:ApplicationDidChangeBackingProperties", ApplicationDidChangeEffectiveAppearance: "mac:ApplicationDidChangeEffectiveAppearance", @@ -362,8 +427,8 @@ var EventTypes = { WindowZoomIn: "mac:WindowZoomIn", WindowZoomOut: "mac:WindowZoomOut", WindowZoomReset: "mac:WindowZoomReset" - }, - Linux: { + }), + Linux: Object.freeze({ ApplicationStartup: "linux:ApplicationStartup", SystemThemeChanged: "linux:SystemThemeChanged", WindowDeleteEvent: "linux:WindowDeleteEvent", @@ -372,8 +437,8 @@ var EventTypes = { WindowFocusIn: "linux:WindowFocusIn", WindowFocusOut: "linux:WindowFocusOut", WindowLoadChanged: "linux:WindowLoadChanged" - }, - Common: { + }), + Common: Object.freeze({ ApplicationOpenedWithFile: "common:ApplicationOpenedWithFile", ApplicationStarted: "common:ApplicationStarted", ThemeChanged: "common:ThemeChanged", @@ -398,48 +463,34 @@ var EventTypes = { WindowZoomIn: "common:WindowZoomIn", WindowZoomOut: "common:WindowZoomOut", WindowZoomReset: "common:WindowZoomReset" - } -}; + }) +}); -// desktop/@wailsio/runtime/src/events.js -var Types = EventTypes; +// desktop/@wailsio/runtime/src/events.ts window._wails = window._wails || {}; window._wails.dispatchWailsEvent = dispatchWailsEvent; -var call3 = newRuntimeCallerWithID(objectNames.Events, ""); +var call3 = newRuntimeCaller(objectNames.Events); var EmitMethod = 0; -var eventListeners = /* @__PURE__ */ new Map(); -var Listener = class { - constructor(eventName, callback, maxCallbacks) { - this.eventName = eventName; - this.maxCallbacks = maxCallbacks || -1; - this.Callback = (data) => { - callback(data); - if (this.maxCallbacks === -1) return false; - this.maxCallbacks -= 1; - return this.maxCallbacks === 0; - }; - } -}; var WailsEvent = class { constructor(name, data = null) { this.name = name; this.data = data; } }; -function setup() { -} function dispatchWailsEvent(event) { let listeners = eventListeners.get(event.name); - if (listeners) { - let toRemove = listeners.filter((listener) => { - let remove = listener.Callback(event); - if (remove) return true; - }); - if (toRemove.length > 0) { - listeners = listeners.filter((l) => !toRemove.includes(l)); - if (listeners.length === 0) eventListeners.delete(event.name); - else eventListeners.set(event.name, listeners); - } + if (!listeners) { + return; + } + let wailsEvent = new WailsEvent(event.name, event.data); + if ("sender" in event) { + wailsEvent.sender = event.sender; + } + listeners = listeners.filter((listener) => !listener.dispatch(wailsEvent)); + if (listeners.length === 0) { + eventListeners.delete(event.name); + } else { + eventListeners.set(event.name, listeners); } } function OnMultiple(eventName, callback, maxCallbacks) { @@ -455,15 +506,8 @@ function On(eventName, callback) { function Once(eventName, callback) { return OnMultiple(eventName, callback, 1); } -function listenerOff(listener) { - const eventName = listener.eventName; - let listeners = eventListeners.get(eventName).filter((l) => l !== listener); - if (listeners.length === 0) eventListeners.delete(eventName); - else eventListeners.set(eventName, listeners); -} -function Off(eventName, ...additionalEventNames) { - let eventsToRemove = [eventName, ...additionalEventNames]; - eventsToRemove.forEach((eventName2) => eventListeners.delete(eventName2)); +function Off(...eventNames) { + eventNames.forEach((eventName) => eventListeners.delete(eventName)); } function OffAll() { eventListeners.clear(); @@ -472,7 +516,7 @@ function Emit(event) { return call3(EmitMethod, event); } -// desktop/@wailsio/runtime/src/utils.js +// desktop/@wailsio/runtime/src/utils.ts function debugLog(message) { console.log( "%c wails3 %c " + message + " ", @@ -480,21 +524,36 @@ function debugLog(message) { "background: #009900; color: #fff; border-radius: 0px 3px 3px 0px; padding: 1px; font-size: 0.7rem" ); } +function canTrackButtons() { + return new MouseEvent("mousedown").buttons === 0; +} function canAbortListeners() { if (!EventTarget || !AbortSignal || !AbortController) return false; let result = true; const target = new EventTarget(); - const controller2 = new AbortController(); + const controller = new AbortController(); target.addEventListener("test", () => { result = false; - }, { signal: controller2.signal }); - controller2.abort(); + }, { signal: controller.signal }); + controller.abort(); target.dispatchEvent(new CustomEvent("test")); return result; } +function eventTarget(event) { + var _a2; + if (event.target instanceof HTMLElement) { + return event.target; + } else if (!(event.target instanceof HTMLElement) && event.target instanceof Node) { + return (_a2 = event.target.parentElement) != null ? _a2 : document.body; + } else { + return document.body; + } +} var isReady = false; -document.addEventListener("DOMContentLoaded", () => isReady = true); +document.addEventListener("DOMContentLoaded", () => { + isReady = true; +}); function whenReady(callback) { if (isReady || document.readyState === "complete") { callback(); @@ -503,7 +562,7 @@ function whenReady(callback) { } } -// desktop/@wailsio/runtime/src/window.js +// desktop/@wailsio/runtime/src/window.ts var PositionMethod = 0; var CenterMethod = 1; var CloseMethod = 2; @@ -552,16 +611,17 @@ var ZoomMethod = 44; var ZoomInMethod = 45; var ZoomOutMethod = 46; var ZoomResetMethod = 47; -var caller = Symbol(); -var Window = class _Window { +var callerSym = Symbol("caller"); +callerSym; +var _Window = class _Window { /** * Initialises a window object with the specified name. * * @private - * @param {string} name - The name of the target window. + * @param name - The name of the target window. */ constructor(name = "") { - this[caller] = newRuntimeCallerWithID(objectNames.Window, name); + this[callerSym] = newRuntimeCaller(objectNames.Window, name); for (const method of Object.getOwnPropertyNames(_Window.prototype)) { if (method !== "constructor" && typeof this[method] === "function") { this[method] = this[method].bind(this); @@ -571,9 +631,8 @@ var Window = class _Window { /** * Gets the specified window. * - * @public - * @param {string} name - The name of the window to get. - * @return {Window} - The corresponding window object. + * @param name - The name of the window to get. + * @returns The corresponding window object. */ Get(name) { return new _Window(name); @@ -581,460 +640,355 @@ var Window = class _Window { /** * Returns the absolute position of the window. * - * @public - * @return {Promise} - The current absolute position of the window. + * @returns The current absolute position of the window. */ Position() { - return this[caller](PositionMethod); + return this[callerSym](PositionMethod); } /** * Centers the window on the screen. - * - * @public - * @return {Promise} */ Center() { - return this[caller](CenterMethod); + return this[callerSym](CenterMethod); } /** * Closes the window. - * - * @public - * @return {Promise} */ Close() { - return this[caller](CloseMethod); + return this[callerSym](CloseMethod); } /** * Disables min/max size constraints. - * - * @public - * @return {Promise} */ DisableSizeConstraints() { - return this[caller](DisableSizeConstraintsMethod); + return this[callerSym](DisableSizeConstraintsMethod); } /** * Enables min/max size constraints. - * - * @public - * @return {Promise} */ EnableSizeConstraints() { - return this[caller](EnableSizeConstraintsMethod); + return this[callerSym](EnableSizeConstraintsMethod); } /** * Focuses the window. - * - * @public - * @return {Promise} */ Focus() { - return this[caller](FocusMethod); + return this[callerSym](FocusMethod); } /** * Forces the window to reload the page assets. - * - * @public - * @return {Promise} */ ForceReload() { - return this[caller](ForceReloadMethod); + return this[callerSym](ForceReloadMethod); } /** - * Doc. - * - * @public - * @return {Promise} + * Switches the window to fullscreen mode. */ Fullscreen() { - return this[caller](FullscreenMethod); + return this[callerSym](FullscreenMethod); } /** * Returns the screen that the window is on. * - * @public - * @return {Promise} - The screen the window is currently on + * @returns The screen the window is currently on. */ GetScreen() { - return this[caller](GetScreenMethod); + return this[callerSym](GetScreenMethod); } /** * Returns the current zoom level of the window. * - * @public - * @return {Promise} - The current zoom level + * @returns The current zoom level. */ GetZoom() { - return this[caller](GetZoomMethod); + return this[callerSym](GetZoomMethod); } /** * Returns the height of the window. * - * @public - * @return {Promise} - The current height of the window + * @returns The current height of the window. */ Height() { - return this[caller](HeightMethod); + return this[callerSym](HeightMethod); } /** * Hides the window. - * - * @public - * @return {Promise} */ Hide() { - return this[caller](HideMethod); + return this[callerSym](HideMethod); } /** * Returns true if the window is focused. * - * @public - * @return {Promise} - Whether the window is currently focused + * @returns Whether the window is currently focused. */ IsFocused() { - return this[caller](IsFocusedMethod); + return this[callerSym](IsFocusedMethod); } /** * Returns true if the window is fullscreen. * - * @public - * @return {Promise} - Whether the window is currently fullscreen + * @returns Whether the window is currently fullscreen. */ IsFullscreen() { - return this[caller](IsFullscreenMethod); + return this[callerSym](IsFullscreenMethod); } /** * Returns true if the window is maximised. * - * @public - * @return {Promise} - Whether the window is currently maximised + * @returns Whether the window is currently maximised. */ IsMaximised() { - return this[caller](IsMaximisedMethod); + return this[callerSym](IsMaximisedMethod); } /** * Returns true if the window is minimised. * - * @public - * @return {Promise} - Whether the window is currently minimised + * @returns Whether the window is currently minimised. */ IsMinimised() { - return this[caller](IsMinimisedMethod); + return this[callerSym](IsMinimisedMethod); } /** * Maximises the window. - * - * @public - * @return {Promise} */ Maximise() { - return this[caller](MaximiseMethod); + return this[callerSym](MaximiseMethod); } /** * Minimises the window. - * - * @public - * @return {Promise} */ Minimise() { - return this[caller](MinimiseMethod); + return this[callerSym](MinimiseMethod); } /** * Returns the name of the window. * - * @public - * @return {Promise} - The name of the window + * @returns The name of the window. */ Name() { - return this[caller](NameMethod); + return this[callerSym](NameMethod); } /** * Opens the development tools pane. - * - * @public - * @return {Promise} */ OpenDevTools() { - return this[caller](OpenDevToolsMethod); + return this[callerSym](OpenDevToolsMethod); } /** * Returns the relative position of the window to the screen. * - * @public - * @return {Promise} - The current relative position of the window + * @returns The current relative position of the window. */ RelativePosition() { - return this[caller](RelativePositionMethod); + return this[callerSym](RelativePositionMethod); } /** * Reloads the page assets. - * - * @public - * @return {Promise} */ Reload() { - return this[caller](ReloadMethod); + return this[callerSym](ReloadMethod); } /** * Returns true if the window is resizable. * - * @public - * @return {Promise} - Whether the window is currently resizable + * @returns Whether the window is currently resizable. */ Resizable() { - return this[caller](ResizableMethod); + return this[callerSym](ResizableMethod); } /** * Restores the window to its previous state if it was previously minimised, maximised or fullscreen. - * - * @public - * @return {Promise} */ Restore() { - return this[caller](RestoreMethod); + return this[callerSym](RestoreMethod); } /** * Sets the absolute position of the window. * - * @public - * @param {number} x - The desired horizontal absolute position of the window - * @param {number} y - The desired vertical absolute position of the window - * @return {Promise} + * @param x - The desired horizontal absolute position of the window. + * @param y - The desired vertical absolute position of the window. */ SetPosition(x, y) { - return this[caller](SetPositionMethod, { x, y }); + return this[callerSym](SetPositionMethod, { x, y }); } /** * Sets the window to be always on top. * - * @public - * @param {boolean} alwaysOnTop - Whether the window should stay on top - * @return {Promise} + * @param alwaysOnTop - Whether the window should stay on top. */ SetAlwaysOnTop(alwaysOnTop) { - return this[caller](SetAlwaysOnTopMethod, { alwaysOnTop }); + return this[callerSym](SetAlwaysOnTopMethod, { alwaysOnTop }); } /** * Sets the background colour of the window. * - * @public - * @param {number} r - The desired red component of the window background - * @param {number} g - The desired green component of the window background - * @param {number} b - The desired blue component of the window background - * @param {number} a - The desired alpha component of the window background - * @return {Promise} + * @param r - The desired red component of the window background. + * @param g - The desired green component of the window background. + * @param b - The desired blue component of the window background. + * @param a - The desired alpha component of the window background. */ SetBackgroundColour(r, g, b, a) { - return this[caller](SetBackgroundColourMethod, { r, g, b, a }); + return this[callerSym](SetBackgroundColourMethod, { r, g, b, a }); } /** * Removes the window frame and title bar. * - * @public - * @param {boolean} frameless - Whether the window should be frameless - * @return {Promise} + * @param frameless - Whether the window should be frameless. */ SetFrameless(frameless) { - return this[caller](SetFramelessMethod, { frameless }); + return this[callerSym](SetFramelessMethod, { frameless }); } /** * Disables the system fullscreen button. * - * @public - * @param {boolean} enabled - Whether the fullscreen button should be enabled - * @return {Promise} + * @param enabled - Whether the fullscreen button should be enabled. */ SetFullscreenButtonEnabled(enabled) { - return this[caller](SetFullscreenButtonEnabledMethod, { enabled }); + return this[callerSym](SetFullscreenButtonEnabledMethod, { enabled }); } /** * Sets the maximum size of the window. * - * @public - * @param {number} width - The desired maximum width of the window - * @param {number} height - The desired maximum height of the window - * @return {Promise} + * @param width - The desired maximum width of the window. + * @param height - The desired maximum height of the window. */ SetMaxSize(width, height) { - return this[caller](SetMaxSizeMethod, { width, height }); + return this[callerSym](SetMaxSizeMethod, { width, height }); } /** * Sets the minimum size of the window. * - * @public - * @param {number} width - The desired minimum width of the window - * @param {number} height - The desired minimum height of the window - * @return {Promise} + * @param width - The desired minimum width of the window. + * @param height - The desired minimum height of the window. */ SetMinSize(width, height) { - return this[caller](SetMinSizeMethod, { width, height }); + return this[callerSym](SetMinSizeMethod, { width, height }); } /** * Sets the relative position of the window to the screen. * - * @public - * @param {number} x - The desired horizontal relative position of the window - * @param {number} y - The desired vertical relative position of the window - * @return {Promise} + * @param x - The desired horizontal relative position of the window. + * @param y - The desired vertical relative position of the window. */ SetRelativePosition(x, y) { - return this[caller](SetRelativePositionMethod, { x, y }); + return this[callerSym](SetRelativePositionMethod, { x, y }); } /** * Sets whether the window is resizable. * - * @public - * @param {boolean} resizable - Whether the window should be resizable - * @return {Promise} + * @param resizable - Whether the window should be resizable. */ SetResizable(resizable2) { - return this[caller](SetResizableMethod, { resizable: resizable2 }); + return this[callerSym](SetResizableMethod, { resizable: resizable2 }); } /** * Sets the size of the window. * - * @public - * @param {number} width - The desired width of the window - * @param {number} height - The desired height of the window - * @return {Promise} + * @param width - The desired width of the window. + * @param height - The desired height of the window. */ SetSize(width, height) { - return this[caller](SetSizeMethod, { width, height }); + return this[callerSym](SetSizeMethod, { width, height }); } /** * Sets the title of the window. * - * @public - * @param {string} title - The desired title of the window - * @return {Promise} + * @param title - The desired title of the window. */ SetTitle(title) { - return this[caller](SetTitleMethod, { title }); + return this[callerSym](SetTitleMethod, { title }); } /** * Sets the zoom level of the window. * - * @public - * @param {number} zoom - The desired zoom level - * @return {Promise} + * @param zoom - The desired zoom level. */ SetZoom(zoom) { - return this[caller](SetZoomMethod, { zoom }); + return this[callerSym](SetZoomMethod, { zoom }); } /** * Shows the window. - * - * @public - * @return {Promise} */ Show() { - return this[caller](ShowMethod); + return this[callerSym](ShowMethod); } /** * Returns the size of the window. * - * @public - * @return {Promise} - The current size of the window + * @returns The current size of the window. */ Size() { - return this[caller](SizeMethod); + return this[callerSym](SizeMethod); } /** * Toggles the window between fullscreen and normal. - * - * @public - * @return {Promise} */ ToggleFullscreen() { - return this[caller](ToggleFullscreenMethod); + return this[callerSym](ToggleFullscreenMethod); } /** * Toggles the window between maximised and normal. - * - * @public - * @return {Promise} */ ToggleMaximise() { - return this[caller](ToggleMaximiseMethod); + return this[callerSym](ToggleMaximiseMethod); } /** * Un-fullscreens the window. - * - * @public - * @return {Promise} */ UnFullscreen() { - return this[caller](UnFullscreenMethod); + return this[callerSym](UnFullscreenMethod); } /** * Un-maximises the window. - * - * @public - * @return {Promise} */ UnMaximise() { - return this[caller](UnMaximiseMethod); + return this[callerSym](UnMaximiseMethod); } /** * Un-minimises the window. - * - * @public - * @return {Promise} */ UnMinimise() { - return this[caller](UnMinimiseMethod); + return this[callerSym](UnMinimiseMethod); } /** * Returns the width of the window. * - * @public - * @return {Promise} - The current width of the window + * @returns The current width of the window. */ Width() { - return this[caller](WidthMethod); + return this[callerSym](WidthMethod); } /** * Zooms the window. - * - * @public - * @return {Promise} */ Zoom() { - return this[caller](ZoomMethod); + return this[callerSym](ZoomMethod); } /** * Increases the zoom level of the webview content. - * - * @public - * @return {Promise} */ ZoomIn() { - return this[caller](ZoomInMethod); + return this[callerSym](ZoomInMethod); } /** * Decreases the zoom level of the webview content. - * - * @public - * @return {Promise} */ ZoomOut() { - return this[caller](ZoomOutMethod); + return this[callerSym](ZoomOutMethod); } /** * Resets the zoom level of the webview content. - * - * @public - * @return {Promise} */ ZoomReset() { - return this[caller](ZoomResetMethod); + return this[callerSym](ZoomResetMethod); } }; +var Window = _Window; var thisWindow = new Window(""); var window_default = thisWindow; -// desktop/@wailsio/runtime/src/wml.js +// desktop/@wailsio/runtime/src/wml.ts function sendEvent(eventName, data = null) { Emit(new WailsEvent(eventName, data)); } @@ -1042,13 +996,13 @@ function callWindowMethod(windowName, methodName) { const targetWindow = window_default.Get(windowName); const method = targetWindow[methodName]; if (typeof method !== "function") { - console.error(`Window method '${methodName}' not found`); + console.error("Window method '".concat(methodName, "' not found")); return; } try { method.call(targetWindow); } catch (e) { - console.error(`Error calling window method '${methodName}': `, e); + console.error("Error calling window method '".concat(methodName, "': "), e); } } function onWMLTriggered(ev) { @@ -1056,10 +1010,10 @@ function onWMLTriggered(ev) { function runEffect(choice = "Yes") { if (choice !== "Yes") return; - const eventType = element.getAttribute("data-wml-event"); - const targetWindow = element.getAttribute("data-wml-target-window") || ""; - const windowMethod = element.getAttribute("data-wml-window"); - const url = element.getAttribute("data-wml-openURL"); + const eventType = element.getAttribute("wml-event") || element.getAttribute("data-wml-event"); + const targetWindow = element.getAttribute("wml-target-window") || element.getAttribute("data-wml-target-window") || ""; + const windowMethod = element.getAttribute("wml-window") || element.getAttribute("data-wml-window"); + const url = element.getAttribute("wml-openurl") || element.getAttribute("data-wml-openurl"); if (eventType !== null) sendEvent(eventType); if (windowMethod !== null) @@ -1067,7 +1021,7 @@ function onWMLTriggered(ev) { if (url !== null) void OpenURL(url); } - const confirm = element.getAttribute("data-wml-confirm"); + const confirm = element.getAttribute("wml-confirm") || element.getAttribute("data-wml-confirm"); if (confirm) { Question({ Title: "Confirm", @@ -1082,75 +1036,75 @@ function onWMLTriggered(ev) { runEffect(); } } -var controller = Symbol(); +var controllerSym = Symbol("controller"); +var triggerMapSym = Symbol("triggerMap"); +var elementCountSym = Symbol("elementCount"); +controllerSym; var AbortControllerRegistry = class { constructor() { - this[controller] = new AbortController(); + this[controllerSym] = new AbortController(); } /** * Returns an options object for addEventListener that ties the listener * to the AbortSignal from the current AbortController. * - * @param {HTMLElement} element An HTML element - * @param {string[]} triggers The list of active WML trigger events for the specified elements - * @returns {AddEventListenerOptions} + * @param element - An HTML element + * @param triggers - The list of active WML trigger events for the specified elements */ set(element, triggers) { - return { signal: this[controller].signal }; + return { signal: this[controllerSym].signal }; } /** - * Removes all registered event listeners. - * - * @returns {void} + * Removes all registered event listeners and resets the registry. */ reset() { - this[controller].abort(); - this[controller] = new AbortController(); + this[controllerSym].abort(); + this[controllerSym] = new AbortController(); } }; -var triggerMap = Symbol(); -var elementCount = Symbol(); +triggerMapSym, elementCountSym; var WeakMapRegistry = class { constructor() { - this[triggerMap] = /* @__PURE__ */ new WeakMap(); - this[elementCount] = 0; + this[triggerMapSym] = /* @__PURE__ */ new WeakMap(); + this[elementCountSym] = 0; } /** - * Sets the active triggers for the specified element. + * Sets active triggers for the specified element. * - * @param {HTMLElement} element An HTML element - * @param {string[]} triggers The list of active WML trigger events for the specified element - * @returns {AddEventListenerOptions} + * @param element - An HTML element + * @param triggers - The list of active WML trigger events for the specified element */ set(element, triggers) { - this[elementCount] += !this[triggerMap].has(element); - this[triggerMap].set(element, triggers); + if (!this[triggerMapSym].has(element)) { + this[elementCountSym]++; + } + this[triggerMapSym].set(element, triggers); return {}; } /** * Removes all registered event listeners. - * - * @returns {void} */ reset() { - if (this[elementCount] <= 0) + if (this[elementCountSym] <= 0) return; for (const element of document.body.querySelectorAll("*")) { - if (this[elementCount] <= 0) + if (this[elementCountSym] <= 0) break; - const triggers = this[triggerMap].get(element); - this[elementCount] -= typeof triggers !== "undefined"; + const triggers = this[triggerMapSym].get(element); + if (triggers != null) { + this[elementCountSym]--; + } for (const trigger of triggers || []) element.removeEventListener(trigger, onWMLTriggered); } - this[triggerMap] = /* @__PURE__ */ new WeakMap(); - this[elementCount] = 0; + this[triggerMapSym] = /* @__PURE__ */ new WeakMap(); + this[elementCountSym] = 0; } }; var triggerRegistry = canAbortListeners() ? new AbortControllerRegistry() : new WeakMapRegistry(); function addWMLListeners(element) { const triggerRegExp = /\S+/g; - const triggerAttr = element.getAttribute("data-wml-trigger") || "click"; + const triggerAttr = element.getAttribute("wml-trigger") || element.getAttribute("data-wml-trigger") || "click"; const triggers = []; let match; while ((match = triggerRegExp.exec(triggerAttr)) !== null) @@ -1164,7 +1118,7 @@ function Enable() { } function Reload() { triggerRegistry.reset(); - document.body.querySelectorAll("[data-wml-event], [data-wml-window], [data-wml-openURL]").forEach(addWMLListeners); + document.body.querySelectorAll("[wml-event], [wml-window], [wml-openurl], [data-wml-event], [data-wml-window], [data-wml-openurl]").forEach(addWMLListeners); } // desktop/compiled/main.js @@ -1174,7 +1128,7 @@ if (true) { debugLog("Wails Runtime Loaded"); } -// desktop/@wailsio/runtime/src/system.js +// desktop/@wailsio/runtime/src/system.ts var system_exports = {}; __export(system_exports, { Capabilities: () => Capabilities, @@ -1189,40 +1143,43 @@ __export(system_exports, { IsWindows: () => IsWindows, invoke: () => invoke }); -var call4 = newRuntimeCallerWithID(objectNames.System, ""); -var systemIsDarkMode = 0; -var environment = 1; -var _invoke = (() => { +var call4 = newRuntimeCaller(objectNames.System); +var SystemIsDarkMode = 0; +var SystemEnvironment = 1; +var _invoke = function() { + var _a2, _b, _c, _d, _e; try { - if (window?.chrome?.webview) { - return (msg) => window.chrome.webview.postMessage(msg); - } - if (window?.webkit?.messageHandlers?.external) { - return (msg) => window.webkit.messageHandlers.external.postMessage(msg); + if ((_b = (_a2 = window.chrome) == null ? void 0 : _a2.webview) == null ? void 0 : _b.postMessage) { + return window.chrome.webview.postMessage.bind(window.chrome.webview); + } else if ((_e = (_d = (_c = window.webkit) == null ? void 0 : _c.messageHandlers) == null ? void 0 : _d["external"]) == null ? void 0 : _e.postMessage) { + return window.webkit.messageHandlers["external"].postMessage.bind(window.webkit.messageHandlers["external"]); } } catch (e) { - console.warn( - "\n%c\u26A0\uFE0F Browser Environment Detected %c\n\n%cOnly UI previews are available in the browser. For full functionality, please run the application in desktop mode.\nMore information at: https://v3.wails.io/learn/build/#using-a-browser-for-development\n", - "background: #ffffff; color: #000000; font-weight: bold; padding: 4px 8px; border-radius: 4px; border: 2px solid #000000;", - "background: transparent;", - "color: #ffffff; font-style: italic; font-weight: bold;" - ); } + console.warn( + "\n%c\u26A0\uFE0F Browser Environment Detected %c\n\n%cOnly UI previews are available in the browser. For full functionality, please run the application in desktop mode.\nMore information at: https://v3.wails.io/learn/build/#using-a-browser-for-development\n", + "background: #ffffff; color: #000000; font-weight: bold; padding: 4px 8px; border-radius: 4px; border: 2px solid #000000;", + "background: transparent;", + "color: #ffffff; font-style: italic; font-weight: bold;" + ); return null; -})(); +}(); function invoke(msg) { - if (!_invoke) return; - return _invoke(msg); + _invoke == null ? void 0 : _invoke(msg); } function IsDarkMode() { - return call4(systemIsDarkMode); + return call4(SystemIsDarkMode); } -function Capabilities() { - let response = fetch("/wails/capabilities"); - return response.json(); +async function Capabilities() { + let response = await fetch("/wails/capabilities"); + if (response.ok) { + return response.json(); + } else { + throw new Error("could not fetch capabilities: " + response.statusText); + } } function Environment() { - return call4(environment); + return call4(SystemEnvironment); } function IsWindows() { return window._wails.environment.OS === "windows"; @@ -1243,154 +1200,228 @@ function IsARM64() { return window._wails.environment.Arch === "arm64"; } function IsDebug() { - return window._wails.environment.Debug === true; + return Boolean(window._wails.environment.Debug); } -// desktop/@wailsio/runtime/src/contextmenu.js +// desktop/@wailsio/runtime/src/contextmenu.ts window.addEventListener("contextmenu", contextMenuHandler); -var call5 = newRuntimeCallerWithID(objectNames.ContextMenu, ""); +var call5 = newRuntimeCaller(objectNames.ContextMenu); var ContextMenuOpen = 0; function openContextMenu(id, x, y, data) { void call5(ContextMenuOpen, { id, x, y, data }); } function contextMenuHandler(event) { - let element = event.target; - let customContextMenu = window.getComputedStyle(element).getPropertyValue("--custom-contextmenu"); - customContextMenu = customContextMenu ? customContextMenu.trim() : ""; + const target = eventTarget(event); + const customContextMenu = window.getComputedStyle(target).getPropertyValue("--custom-contextmenu").trim(); if (customContextMenu) { event.preventDefault(); - let customContextMenuData = window.getComputedStyle(element).getPropertyValue("--custom-contextmenu-data"); - openContextMenu(customContextMenu, event.clientX, event.clientY, customContextMenuData); - return; + const data = window.getComputedStyle(target).getPropertyValue("--custom-contextmenu-data"); + openContextMenu(customContextMenu, event.clientX, event.clientY, data); + } else { + processDefaultContextMenu(event, target); } - processDefaultContextMenu(event); } -function processDefaultContextMenu(event) { +function processDefaultContextMenu(event, target) { if (IsDebug()) { return; } - const element = event.target; - const computedStyle = window.getComputedStyle(element); - const defaultContextMenuAction = computedStyle.getPropertyValue("--default-contextmenu").trim(); - switch (defaultContextMenuAction) { + switch (window.getComputedStyle(target).getPropertyValue("--default-contextmenu").trim()) { case "show": return; case "hide": event.preventDefault(); return; - default: - if (element.isContentEditable) { - return; - } - const selection = window.getSelection(); - const hasSelection = selection.toString().length > 0; - if (hasSelection) { - for (let i = 0; i < selection.rangeCount; i++) { - const range = selection.getRangeAt(i); - const rects = range.getClientRects(); - for (let j = 0; j < rects.length; j++) { - const rect = rects[j]; - if (document.elementFromPoint(rect.left, rect.top) === element) { - return; - } - } - } - } - if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") { - if (hasSelection || !element.readOnly && !element.disabled) { + } + if (target.isContentEditable) { + return; + } + const selection = window.getSelection(); + const hasSelection = selection && selection.toString().length > 0; + if (hasSelection) { + for (let i = 0; i < selection.rangeCount; i++) { + const range = selection.getRangeAt(i); + const rects = range.getClientRects(); + for (let j = 0; j < rects.length; j++) { + const rect = rects[j]; + if (document.elementFromPoint(rect.left, rect.top) === target) { return; } } - event.preventDefault(); + } } + if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { + if (hasSelection || !target.readOnly && !target.disabled) { + return; + } + } + event.preventDefault(); } -// desktop/@wailsio/runtime/src/flags.js +// desktop/@wailsio/runtime/src/flags.ts var flags_exports = {}; __export(flags_exports, { GetFlag: () => GetFlag }); -function GetFlag(keyString) { +function GetFlag(key) { try { - return window._wails.flags[keyString]; + return window._wails.flags[key]; } catch (e) { - throw new Error("Unable to retrieve flag '" + keyString + "': " + e); + throw new Error("Unable to retrieve flag '" + key + "': " + e, { cause: e }); } } -// desktop/@wailsio/runtime/src/drag.js -var shouldDrag = false; +// desktop/@wailsio/runtime/src/drag.ts +var canDrag = false; +var dragging = false; var resizable = false; -var resizeEdge = null; +var canResize = false; +var resizing = false; +var resizeEdge = ""; var defaultCursor = "auto"; +var buttons = 0; +var buttonsTracked = canTrackButtons(); window._wails = window._wails || {}; -window._wails.setResizable = function(value) { +window._wails.setResizable = (value) => { resizable = value; -}; -window._wails.endDrag = function() { - document.body.style.cursor = "default"; - shouldDrag = false; -}; -window.addEventListener("mousedown", onMouseDown); -window.addEventListener("mousemove", onMouseMove); -window.addEventListener("mouseup", onMouseUp); -function dragTest(e) { - let val = window.getComputedStyle(e.target).getPropertyValue("--wails-draggable"); - let mousePressed = e.buttons !== void 0 ? e.buttons : e.which; - if (!val || val === "" || val.trim() !== "drag" || mousePressed === 0) { - return false; + if (!resizable) { + canResize = resizing = false; + setResize(); } - return e.detail === 1; +}; +window.addEventListener("mousedown", update, { capture: true }); +window.addEventListener("mousemove", update, { capture: true }); +window.addEventListener("mouseup", update, { capture: true }); +for (const ev of ["click", "contextmenu", "dblclick"]) { + window.addEventListener(ev, suppressEvent, { capture: true }); } -function onMouseDown(e) { +function suppressEvent(event) { + if (dragging || resizing) { + event.stopImmediatePropagation(); + event.stopPropagation(); + event.preventDefault(); + } +} +var MouseDown = 0; +var MouseUp = 1; +var MouseMove = 2; +function update(event) { + let eventType, eventButtons = event.buttons; + switch (event.type) { + case "mousedown": + eventType = MouseDown; + if (!buttonsTracked) { + eventButtons = buttons | 1 << event.button; + } + break; + case "mouseup": + eventType = MouseUp; + if (!buttonsTracked) { + eventButtons = buttons & ~(1 << event.button); + } + break; + default: + eventType = MouseMove; + if (!buttonsTracked) { + eventButtons = buttons; + } + break; + } + let released = buttons & ~eventButtons; + let pressed = eventButtons & ~buttons; + buttons = eventButtons; + if (eventType === MouseDown && !(pressed & event.button)) { + released |= 1 << event.button; + pressed |= 1 << event.button; + } + if (eventType !== MouseMove && resizing || dragging && (eventType === MouseDown || event.button !== 0)) { + event.stopImmediatePropagation(); + event.stopPropagation(); + event.preventDefault(); + } + if (released & 1) { + primaryUp(event); + } + if (pressed & 1) { + primaryDown(event); + } + if (eventType === MouseMove) { + onMouseMove(event); + } + ; +} +function primaryDown(event) { + canDrag = false; + canResize = false; + if (!IsWindows()) { + if (event.type === "mousedown" && event.button === 0 && event.detail !== 1) { + return; + } + } if (resizeEdge) { - invoke("wails:resize:" + resizeEdge); - e.preventDefault(); + canResize = true; return; } - if (dragTest(e)) { - if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) { - return; + const target = eventTarget(event); + const style = window.getComputedStyle(target); + canDrag = style.getPropertyValue("--wails-draggable").trim() === "drag" && (event.offsetX - parseFloat(style.paddingLeft) < target.clientWidth && event.offsetY - parseFloat(style.paddingTop) < target.clientHeight); +} +function primaryUp(event) { + canDrag = false; + dragging = false; + canResize = false; + resizing = false; +} +var cursorForEdge = Object.freeze({ + "se-resize": "nwse-resize", + "sw-resize": "nesw-resize", + "nw-resize": "nwse-resize", + "ne-resize": "nesw-resize", + "w-resize": "ew-resize", + "n-resize": "ns-resize", + "s-resize": "ns-resize", + "e-resize": "ew-resize" +}); +function setResize(edge) { + if (edge) { + if (!resizeEdge) { + defaultCursor = document.body.style.cursor; } - shouldDrag = true; - } else { - shouldDrag = false; + document.body.style.cursor = cursorForEdge[edge]; + } else if (!edge && resizeEdge) { + document.body.style.cursor = defaultCursor; } + resizeEdge = edge || ""; } -function onMouseUp() { - shouldDrag = false; -} -function setResize(cursor) { - document.documentElement.style.cursor = cursor || defaultCursor; - resizeEdge = cursor; -} -function onMouseMove(e) { - if (shouldDrag) { - shouldDrag = false; - let mousePressed = e.buttons !== void 0 ? e.buttons : e.which; - if (mousePressed > 0) { - invoke("wails:drag"); - return; - } +function onMouseMove(event) { + if (canResize && resizeEdge) { + resizing = true; + invoke("wails:resize:" + resizeEdge); + } else if (canDrag) { + dragging = true; + invoke("wails:drag"); + } + if (dragging || resizing) { + canDrag = canResize = false; + return; } if (!resizable || !IsWindows()) { + if (resizeEdge) { + setResize(); + } return; } - if (defaultCursor == null) { - defaultCursor = document.documentElement.style.cursor; - } - let resizeHandleHeight = GetFlag("system.resizeHandleHeight") || 5; - let resizeHandleWidth = GetFlag("system.resizeHandleWidth") || 5; - let cornerExtra = GetFlag("resizeCornerExtra") || 10; - let rightBorder = window.outerWidth - e.clientX < resizeHandleWidth; - let leftBorder = e.clientX < resizeHandleWidth; - let topBorder = e.clientY < resizeHandleHeight; - let bottomBorder = window.outerHeight - e.clientY < resizeHandleHeight; - let rightCorner = window.outerWidth - e.clientX < resizeHandleWidth + cornerExtra; - let leftCorner = e.clientX < resizeHandleWidth + cornerExtra; - let topCorner = e.clientY < resizeHandleHeight + cornerExtra; - let bottomCorner = window.outerHeight - e.clientY < resizeHandleHeight + cornerExtra; - if (!leftBorder && !rightBorder && !topBorder && !bottomBorder && resizeEdge !== void 0) { + const resizeHandleHeight = GetFlag("system.resizeHandleHeight") || 5; + const resizeHandleWidth = GetFlag("system.resizeHandleWidth") || 5; + const cornerExtra = GetFlag("resizeCornerExtra") || 10; + const rightBorder = window.outerWidth - event.clientX < resizeHandleWidth; + const leftBorder = event.clientX < resizeHandleWidth; + const topBorder = event.clientY < resizeHandleHeight; + const bottomBorder = window.outerHeight - event.clientY < resizeHandleHeight; + const rightCorner = window.outerWidth - event.clientX < resizeHandleWidth + cornerExtra; + const leftCorner = event.clientX < resizeHandleWidth + cornerExtra; + const topCorner = event.clientY < resizeHandleHeight + cornerExtra; + const bottomCorner = window.outerHeight - event.clientY < resizeHandleHeight + cornerExtra; + if (!leftCorner && !topCorner && !bottomCorner && !rightCorner) { setResize(); } else if (rightCorner && bottomCorner) setResize("se-resize"); else if (leftCorner && bottomCorner) setResize("sw-resize"); @@ -1400,16 +1431,17 @@ function onMouseMove(e) { else if (topBorder) setResize("n-resize"); else if (bottomBorder) setResize("s-resize"); else if (rightBorder) setResize("e-resize"); + else setResize(); } -// desktop/@wailsio/runtime/src/application.js +// desktop/@wailsio/runtime/src/application.ts var application_exports = {}; __export(application_exports, { Hide: () => Hide, Quit: () => Quit, Show: () => Show }); -var call6 = newRuntimeCallerWithID(objectNames.Application, ""); +var call6 = newRuntimeCaller(objectNames.Application); var HideMethod2 = 0; var ShowMethod2 = 1; var QuitMethod = 2; @@ -1423,7 +1455,7 @@ function Quit() { return call6(QuitMethod); } -// desktop/@wailsio/runtime/src/calls.js +// desktop/@wailsio/runtime/src/calls.ts var calls_exports = {}; __export(calls_exports, { ByID: () => ByID, @@ -1431,13 +1463,880 @@ __export(calls_exports, { Call: () => Call, RuntimeError: () => RuntimeError }); + +// desktop/@wailsio/runtime/src/callable.ts +var fnToStr = Function.prototype.toString; +var reflectApply = typeof Reflect === "object" && Reflect !== null && Reflect.apply; +var badArrayLike; +var isCallableMarker; +if (typeof reflectApply === "function" && typeof Object.defineProperty === "function") { + try { + badArrayLike = Object.defineProperty({}, "length", { + get: function() { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + reflectApply(function() { + throw 42; + }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } +} else { + reflectApply = null; +} +var constructorRegex = /^\s*class\b/; +var isES6ClassFn = function isES6ClassFunction(value) { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; + } +}; +var tryFunctionObject = function tryFunctionToStr(value) { + try { + if (isES6ClassFn(value)) { + return false; + } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } +}; +var toStr = Object.prototype.toString; +var objectClass = "[object Object]"; +var fnClass = "[object Function]"; +var genClass = "[object GeneratorFunction]"; +var ddaClass = "[object HTMLAllCollection]"; +var ddaClass2 = "[object HTML document.all class]"; +var ddaClass3 = "[object HTMLCollection]"; +var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag; +var isIE68 = !(0 in [,]); +var isDDA = function isDocumentDotAll() { + return false; +}; +if (typeof document === "object") { + all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll2(value) { + if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) { + try { + var str = toStr.call(value); + return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null; + } catch (e) { + } + } + return false; + }; + } +} +var all; +function isCallableRefApply(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + try { + reflectApply(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { + return false; + } + } + return !isES6ClassFn(value) && tryFunctionObject(value); +} +function isCallableNoRefApply(value) { + if (isDDA(value)) { + return true; + } + if (!value) { + return false; + } + if (typeof value !== "function" && typeof value !== "object") { + return false; + } + if (hasToStringTag) { + return tryFunctionObject(value); + } + if (isES6ClassFn(value)) { + return false; + } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) { + return false; + } + return tryFunctionObject(value); +} +var callable_default = reflectApply ? isCallableRefApply : isCallableNoRefApply; + +// desktop/@wailsio/runtime/src/cancellable.ts +var CancelError = class extends Error { + /** + * Constructs a new `CancelError` instance. + * @param message - The error message. + * @param options - Options to be forwarded to the Error constructor. + */ + constructor(message, options) { + super(message, options); + this.name = "CancelError"; + } +}; +var CancelledRejectionError = class extends Error { + /** + * Constructs a new `CancelledRejectionError` instance. + * @param promise - The promise that caused the error originally. + * @param reason - The rejection reason. + * @param info - An optional informative message specifying the circumstances in which the error was thrown. + * Defaults to the string `"Unhandled rejection in cancelled promise."`. + */ + constructor(promise, reason, info) { + super((info != null ? info : "Unhandled rejection in cancelled promise.") + " Reason: " + errorMessage(reason), { cause: reason }); + this.promise = promise; + this.name = "CancelledRejectionError"; + } +}; +var barrierSym = Symbol("barrier"); +var cancelImplSym = Symbol("cancelImpl"); +var _a; +var species = (_a = Symbol.species) != null ? _a : Symbol("speciesPolyfill"); +var CancellablePromise = class _CancellablePromise extends Promise { + /** + * Creates a new `CancellablePromise`. + * + * @param executor - A callback used to initialize the promise. This callback is passed two arguments: + * a `resolve` callback used to resolve the promise with a value + * or the result of another promise (possibly cancellable), + * and a `reject` callback used to reject the promise with a provided reason or error. + * If the value provided to the `resolve` callback is a thenable _and_ cancellable object + * (it has a `then` _and_ a `cancel` method), + * cancellation requests will be forwarded to that object and the oncancelled will not be invoked anymore. + * If any one of the two callbacks is called _after_ the promise has been cancelled, + * the provided values will be cancelled and resolved as usual, + * but their results will be discarded. + * However, if the resolution process ultimately ends up in a rejection + * that is not due to cancellation, the rejection reason + * will be wrapped in a {@link CancelledRejectionError} + * and bubbled up as an unhandled rejection. + * @param oncancelled - It is the caller's responsibility to ensure that any operation + * started by the executor is properly halted upon cancellation. + * This optional callback can be used to that purpose. + * It will be called _synchronously_ with a cancellation cause + * when cancellation is requested, _after_ the promise has already rejected + * with a {@link CancelError}, but _before_ + * any {@link then}/{@link catch}/{@link finally} callback runs. + * If the callback returns a thenable, the promise returned from {@link cancel} + * will only fulfill after the former has settled. + * Unhandled exceptions or rejections from the callback will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as unhandled rejections. + * If the `resolve` callback is called before cancellation with a cancellable promise, + * cancellation requests on this promise will be diverted to that promise, + * and the original `oncancelled` callback will be discarded. + */ + constructor(executor, oncancelled) { + let resolve; + let reject; + super((res, rej) => { + resolve = res; + reject = rej; + }); + if (this.constructor[species] !== Promise) { + throw new TypeError("CancellablePromise does not support transparent subclassing. Please refrain from overriding the [Symbol.species] static property."); + } + let promise = { + promise: this, + resolve, + reject, + get oncancelled() { + return oncancelled != null ? oncancelled : null; + }, + set oncancelled(cb) { + oncancelled = cb != null ? cb : void 0; + } + }; + const state = { + get root() { + return state; + }, + resolving: false, + settled: false + }; + void Object.defineProperties(this, { + [barrierSym]: { + configurable: false, + enumerable: false, + writable: true, + value: null + }, + [cancelImplSym]: { + configurable: false, + enumerable: false, + writable: false, + value: cancellerFor(promise, state) + } + }); + const rejector = rejectorFor(promise, state); + try { + executor(resolverFor(promise, state), rejector); + } catch (err) { + if (state.resolving) { + console.log("Unhandled exception in CancellablePromise executor.", err); + } else { + rejector(err); + } + } + } + /** + * Cancels immediately the execution of the operation associated with this promise. + * The promise rejects with a {@link CancelError} instance as reason, + * with the {@link CancelError#cause} property set to the given argument, if any. + * + * Has no effect if called after the promise has already settled; + * repeated calls in particular are safe, but only the first one + * will set the cancellation cause. + * + * The `CancelError` exception _need not_ be handled explicitly _on the promises that are being cancelled:_ + * cancelling a promise with no attached rejection handler does not trigger an unhandled rejection event. + * Therefore, the following idioms are all equally correct: + * ```ts + * new CancellablePromise((resolve, reject) => { ... }).cancel(); + * new CancellablePromise((resolve, reject) => { ... }).then(...).cancel(); + * new CancellablePromise((resolve, reject) => { ... }).then(...).catch(...).cancel(); + * ``` + * Whenever some cancelled promise in a chain rejects with a `CancelError` + * with the same cancellation cause as itself, the error will be discarded silently. + * However, the `CancelError` _will still be delivered_ to all attached rejection handlers + * added by {@link then} and related methods: + * ```ts + * let cancellable = new CancellablePromise((resolve, reject) => { ... }); + * cancellable.then(() => { ... }).catch(console.log); + * cancellable.cancel(); // A CancelError is printed to the console. + * ``` + * If the `CancelError` is not handled downstream by the time it reaches + * a _non-cancelled_ promise, it _will_ trigger an unhandled rejection event, + * just like normal rejections would: + * ```ts + * let cancellable = new CancellablePromise((resolve, reject) => { ... }); + * let chained = cancellable.then(() => { ... }).then(() => { ... }); // No catch... + * cancellable.cancel(); // Unhandled rejection event on chained! + * ``` + * Therefore, it is important to either cancel whole promise chains from their tail, + * as shown in the correct idioms above, or take care of handling errors everywhere. + * + * @returns A cancellable promise that _fulfills_ after the cancel callback (if any) + * and all handlers attached up to the call to cancel have run. + * If the cancel callback returns a thenable, the promise returned by `cancel` + * will also wait for that thenable to settle. + * This enables callers to wait for the cancelled operation to terminate + * without being forced to handle potential errors at the call site. + * ```ts + * cancellable.cancel().then(() => { + * // Cleanup finished, it's safe to do something else. + * }, (err) => { + * // Unreachable: the promise returned from cancel will never reject. + * }); + * ``` + * Note that the returned promise will _not_ handle implicitly any rejection + * that might have occurred already in the cancelled chain. + * It will just track whether registered handlers have been executed or not. + * Therefore, unhandled rejections will never be silently handled by calling cancel. + */ + cancel(cause) { + return new _CancellablePromise((resolve) => { + Promise.all([ + this[cancelImplSym](new CancelError("Promise cancelled.", { cause })), + currentBarrier(this) + ]).then(() => resolve(), () => resolve()); + }); + } + /** + * Binds promise cancellation to the abort event of the given {@link AbortSignal}. + * If the signal has already aborted, the promise will be cancelled immediately. + * When either condition is verified, the cancellation cause will be set + * to the signal's abort reason (see {@link AbortSignal#reason}). + * + * Has no effect if called (or if the signal aborts) _after_ the promise has already settled. + * Only the first signal to abort will set the cancellation cause. + * + * For more details about the cancellation process, + * see {@link cancel} and the `CancellablePromise` constructor. + * + * This method enables `await`ing cancellable promises without having + * to store them for future cancellation, e.g.: + * ```ts + * await longRunningOperation().cancelOn(signal); + * ``` + * instead of: + * ```ts + * let promiseToBeCancelled = longRunningOperation(); + * await promiseToBeCancelled; + * ``` + * + * @returns This promise, for method chaining. + */ + cancelOn(signal) { + if (signal.aborted) { + void this.cancel(signal.reason); + } else { + signal.addEventListener("abort", () => void this.cancel(signal.reason), { capture: true }); + } + return this; + } + /** + * Attaches callbacks for the resolution and/or rejection of the `CancellablePromise`. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * When the parent promise rejects or is cancelled, the `onrejected` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A `CancellablePromise` for the completion of whichever callback is executed. + * The returned promise is hooked up to propagate cancellation requests up the chain, but not down: + * + * - if the parent promise is cancelled, the `onrejected` handler will be invoked with a `CancelError` + * and the returned promise _will resolve regularly_ with its result; + * - conversely, if the returned promise is cancelled, _the parent promise is cancelled too;_ + * the `onrejected` handler will still be invoked with the parent's `CancelError`, + * but its result will be discarded + * and the returned promise will reject with a `CancelError` as well. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If either callback returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + */ + then(onfulfilled, onrejected, oncancelled) { + if (!(this instanceof _CancellablePromise)) { + throw new TypeError("CancellablePromise.prototype.then called on an invalid object."); + } + if (!callable_default(onfulfilled)) { + onfulfilled = identity; + } + if (!callable_default(onrejected)) { + onrejected = thrower; + } + if (onfulfilled === identity && onrejected == thrower) { + return new _CancellablePromise((resolve) => resolve(this)); + } + const barrier = {}; + this[barrierSym] = barrier; + return new _CancellablePromise((resolve, reject) => { + void super.then( + (value) => { + var _a2; + if (this[barrierSym] === barrier) { + this[barrierSym] = null; + } + (_a2 = barrier.resolve) == null ? void 0 : _a2.call(barrier); + try { + resolve(onfulfilled(value)); + } catch (err) { + reject(err); + } + }, + (reason) => { + var _a2; + if (this[barrierSym] === barrier) { + this[barrierSym] = null; + } + (_a2 = barrier.resolve) == null ? void 0 : _a2.call(barrier); + try { + resolve(onrejected(reason)); + } catch (err) { + reject(err); + } + } + ); + }, async (cause) => { + try { + return oncancelled == null ? void 0 : oncancelled(cause); + } finally { + await this.cancel(cause); + } + }); + } + /** + * Attaches a callback for only the rejection of the Promise. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * When the parent promise rejects or is cancelled, the `onrejected` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * It is equivalent to + * ```ts + * cancellablePromise.then(undefined, onrejected, oncancelled); + * ``` + * and the same caveats apply. + * + * @returns A Promise for the completion of the callback. + * Cancellation requests on the returned promise + * will propagate up the chain to the parent promise, + * but not in the other direction. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If `onrejected` returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + * See {@link then} for more details. + */ + catch(onrejected, oncancelled) { + return this.then(void 0, onrejected, oncancelled); + } + /** + * Attaches a callback that is invoked when the CancellablePromise is settled (fulfilled or rejected). The + * resolved value cannot be accessed or modified from the callback. + * The returned promise will settle in the same state as the original one + * after the provided callback has completed execution, + * unless the callback throws or returns a rejecting promise, + * in which case the returned promise will reject as well. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * Once the parent promise settles, the `onfinally` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * This method is implemented in terms of {@link then} and the same caveats apply. + * It is polyfilled, hence available in every OS/webview version. + * + * @returns A Promise for the completion of the callback. + * Cancellation requests on the returned promise + * will propagate up the chain to the parent promise, + * but not in the other direction. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If `onfinally` returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + * See {@link then} for more details. + */ + finally(onfinally, oncancelled) { + if (!(this instanceof _CancellablePromise)) { + throw new TypeError("CancellablePromise.prototype.finally called on an invalid object."); + } + if (!callable_default(onfinally)) { + return this.then(onfinally, onfinally, oncancelled); + } + return this.then( + (value) => _CancellablePromise.resolve(onfinally()).then(() => value), + (reason) => _CancellablePromise.resolve(onfinally()).then(() => { + throw reason; + }), + oncancelled + ); + } + /** + * We use the `[Symbol.species]` static property, if available, + * to disable the built-in automatic subclassing features from {@link Promise}. + * It is critical for performance reasons that extenders do not override this. + * Once the proposal at https://github.com/tc39/proposal-rm-builtin-subclassing + * is either accepted or retired, this implementation will have to be revised accordingly. + * + * @ignore + * @internal + */ + static get [(barrierSym, cancelImplSym, species)]() { + return Promise; + } + static all(values) { + let collected = Array.from(values); + const promise = collected.length === 0 ? _CancellablePromise.resolve(collected) : new _CancellablePromise((resolve, reject) => { + void Promise.all(collected).then(resolve, reject); + }, (cause) => cancelAll(promise, collected, cause)); + return promise; + } + static allSettled(values) { + let collected = Array.from(values); + const promise = collected.length === 0 ? _CancellablePromise.resolve(collected) : new _CancellablePromise((resolve, reject) => { + void Promise.allSettled(collected).then(resolve, reject); + }, (cause) => cancelAll(promise, collected, cause)); + return promise; + } + static any(values) { + let collected = Array.from(values); + const promise = collected.length === 0 ? _CancellablePromise.resolve(collected) : new _CancellablePromise((resolve, reject) => { + void Promise.any(collected).then(resolve, reject); + }, (cause) => cancelAll(promise, collected, cause)); + return promise; + } + static race(values) { + let collected = Array.from(values); + const promise = new _CancellablePromise((resolve, reject) => { + void Promise.race(collected).then(resolve, reject); + }, (cause) => cancelAll(promise, collected, cause)); + return promise; + } + /** + * Creates a new cancelled CancellablePromise for the provided cause. + * + * @group Static Methods + */ + static cancel(cause) { + const p = new _CancellablePromise(() => { + }); + p.cancel(cause); + return p; + } + /** + * Creates a new CancellablePromise that cancels + * after the specified timeout, with the provided cause. + * + * If the {@link AbortSignal.timeout} factory method is available, + * it is used to base the timeout on _active_ time rather than _elapsed_ time. + * Otherwise, `timeout` falls back to {@link setTimeout}. + * + * @group Static Methods + */ + static timeout(milliseconds, cause) { + const promise = new _CancellablePromise(() => { + }); + if (AbortSignal && typeof AbortSignal === "function" && AbortSignal.timeout && typeof AbortSignal.timeout === "function") { + AbortSignal.timeout(milliseconds).addEventListener("abort", () => void promise.cancel(cause)); + } else { + setTimeout(() => void promise.cancel(cause), milliseconds); + } + return promise; + } + static sleep(milliseconds, value) { + return new _CancellablePromise((resolve) => { + setTimeout(() => resolve(value), milliseconds); + }); + } + /** + * Creates a new rejected CancellablePromise for the provided reason. + * + * @group Static Methods + */ + static reject(reason) { + return new _CancellablePromise((_, reject) => reject(reason)); + } + static resolve(value) { + if (value instanceof _CancellablePromise) { + return value; + } + return new _CancellablePromise((resolve) => resolve(value)); + } + /** + * Creates a new CancellablePromise and returns it in an object, along with its resolve and reject functions + * and a getter/setter for the cancellation callback. + * + * This method is polyfilled, hence available in every OS/webview version. + * + * @group Static Methods + */ + static withResolvers() { + let result = { oncancelled: null }; + result.promise = new _CancellablePromise((resolve, reject) => { + result.resolve = resolve; + result.reject = reject; + }, (cause) => { + var _a2; + (_a2 = result.oncancelled) == null ? void 0 : _a2.call(result, cause); + }); + return result; + } +}; +function cancellerFor(promise, state) { + let cancellationPromise = void 0; + return (reason) => { + if (!state.settled) { + state.settled = true; + state.reason = reason; + promise.reject(reason); + void Promise.prototype.then.call(promise.promise, void 0, (err) => { + if (err !== reason) { + throw err; + } + }); + } + if (!state.reason || !promise.oncancelled) { + return; + } + cancellationPromise = new Promise((resolve) => { + try { + resolve(promise.oncancelled(state.reason.cause)); + } catch (err) { + Promise.reject(new CancelledRejectionError(promise.promise, err, "Unhandled exception in oncancelled callback.")); + } + }).catch((reason2) => { + Promise.reject(new CancelledRejectionError(promise.promise, reason2, "Unhandled rejection in oncancelled callback.")); + }); + promise.oncancelled = null; + return cancellationPromise; + }; +} +function resolverFor(promise, state) { + return (value) => { + if (state.resolving) { + return; + } + state.resolving = true; + if (value === promise.promise) { + if (state.settled) { + return; + } + state.settled = true; + promise.reject(new TypeError("A promise cannot be resolved with itself.")); + return; + } + if (value != null && (typeof value === "object" || typeof value === "function")) { + let then; + try { + then = value.then; + } catch (err) { + state.settled = true; + promise.reject(err); + return; + } + if (callable_default(then)) { + try { + let cancel = value.cancel; + if (callable_default(cancel)) { + const oncancelled = (cause) => { + Reflect.apply(cancel, value, [cause]); + }; + if (state.reason) { + void cancellerFor(__spreadProps(__spreadValues({}, promise), { oncancelled }), state)(state.reason); + } else { + promise.oncancelled = oncancelled; + } + } + } catch (e) { + } + const newState = { + root: state.root, + resolving: false, + get settled() { + return this.root.settled; + }, + set settled(value2) { + this.root.settled = value2; + }, + get reason() { + return this.root.reason; + } + }; + const rejector = rejectorFor(promise, newState); + try { + Reflect.apply(then, value, [resolverFor(promise, newState), rejector]); + } catch (err) { + rejector(err); + } + return; + } + } + if (state.settled) { + return; + } + state.settled = true; + promise.resolve(value); + }; +} +function rejectorFor(promise, state) { + return (reason) => { + if (state.resolving) { + return; + } + state.resolving = true; + if (state.settled) { + try { + if (reason instanceof CancelError && state.reason instanceof CancelError && Object.is(reason.cause, state.reason.cause)) { + return; + } + } catch (e) { + } + void Promise.reject(new CancelledRejectionError(promise.promise, reason)); + } else { + state.settled = true; + promise.reject(reason); + } + }; +} +function cancelAll(parent, values, cause) { + const results = []; + for (const value of values) { + let cancel; + try { + if (!callable_default(value.then)) { + continue; + } + cancel = value.cancel; + if (!callable_default(cancel)) { + continue; + } + } catch (e) { + continue; + } + let result; + try { + result = Reflect.apply(cancel, value, [cause]); + } catch (err) { + Promise.reject(new CancelledRejectionError(parent, err, "Unhandled exception in cancel method.")); + continue; + } + if (!result) { + continue; + } + results.push( + (result instanceof Promise ? result : Promise.resolve(result)).catch((reason) => { + Promise.reject(new CancelledRejectionError(parent, reason, "Unhandled rejection in cancel method.")); + }) + ); + } + return Promise.all(results); +} +function identity(x) { + return x; +} +function thrower(reason) { + throw reason; +} +function errorMessage(err) { + try { + if (err instanceof Error || typeof err !== "object" || err.toString !== Object.prototype.toString) { + return "" + err; + } + } catch (e) { + } + try { + return JSON.stringify(err); + } catch (e) { + } + try { + return Object.prototype.toString.call(err); + } catch (e) { + } + return ""; +} +function currentBarrier(promise) { + var _a2; + let pwr = (_a2 = promise[barrierSym]) != null ? _a2 : {}; + if (!("promise" in pwr)) { + Object.assign(pwr, promiseWithResolvers()); + } + if (promise[barrierSym] == null) { + pwr.resolve(); + promise[barrierSym] = pwr; + } + return pwr.promise; +} +var promiseWithResolvers = Promise.withResolvers; +if (promiseWithResolvers && typeof promiseWithResolvers === "function") { + promiseWithResolvers = promiseWithResolvers.bind(Promise); +} else { + promiseWithResolvers = function() { + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + }; +} + +// desktop/@wailsio/runtime/src/calls.ts window._wails = window._wails || {}; window._wails.callResultHandler = resultHandler; window._wails.callErrorHandler = errorHandler; -var CallBinding = 0; -var call7 = newRuntimeCallerWithID(objectNames.Call, ""); -var cancelCall = newRuntimeCallerWithID(objectNames.CancelCall, ""); +var call7 = newRuntimeCaller(objectNames.Call); +var cancelCall = newRuntimeCaller(objectNames.CancelCall); var callResponses = /* @__PURE__ */ new Map(); +var CallBinding = 0; +var CancelMethod = 0; +var RuntimeError = class extends Error { + /** + * Constructs a new RuntimeError instance. + * @param message - The error message. + * @param options - Options to be forwarded to the Error constructor. + */ + constructor(message, options) { + super(message, options); + this.name = "RuntimeError"; + } +}; +function resultHandler(id, data, isJSON) { + const resolvers = getAndDeleteResponse2(id); + if (!resolvers) { + return; + } + if (!data) { + resolvers.resolve(void 0); + } else if (!isJSON) { + resolvers.resolve(data); + } else { + try { + resolvers.resolve(JSON.parse(data)); + } catch (err) { + resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err })); + } + } +} +function errorHandler(id, data, isJSON) { + const resolvers = getAndDeleteResponse2(id); + if (!resolvers) { + return; + } + if (!isJSON) { + resolvers.reject(new Error(data)); + } else { + let error; + try { + error = JSON.parse(data); + } catch (err) { + resolvers.reject(new TypeError("could not parse error: " + err.message, { cause: err })); + return; + } + let options = {}; + if (error.cause) { + options.cause = error.cause; + } + let exception; + switch (error.kind) { + case "ReferenceError": + exception = new ReferenceError(error.message, options); + break; + case "TypeError": + exception = new TypeError(error.message, options); + break; + case "RuntimeError": + exception = new RuntimeError(error.message, options); + break; + default: + exception = new Error(error.message, options); + break; + } + resolvers.reject(exception); + } +} +function getAndDeleteResponse2(id) { + const response = callResponses.get(id); + callResponses.delete(id); + return response; +} function generateID2() { let result; do { @@ -1445,123 +2344,47 @@ function generateID2() { } while (callResponses.has(result)); return result; } -function resultHandler(id, data, isJSON) { - const promiseHandler = getAndDeleteResponse(id); - if (promiseHandler) { - if (!data) { - promiseHandler.resolve(); - } else if (!isJSON) { - promiseHandler.resolve(data); - } else { - try { - promiseHandler.resolve(JSON.parse(data)); - } catch (err) { - promiseHandler.reject(new TypeError("could not parse result: " + err.message, { cause: err })); - } - } - } -} -function errorHandler(id, data, isJSON) { - const promiseHandler = getAndDeleteResponse(id); - if (promiseHandler) { - if (!isJSON) { - promiseHandler.reject(new Error(data)); - } else { - let error; - try { - error = JSON.parse(data); - } catch (err) { - promiseHandler.reject(new TypeError("could not parse error: " + err.message, { cause: err })); - return; - } - let options = {}; - if (error.cause) { - options.cause = error.cause; - } - let exception; - switch (error.kind) { - case "ReferenceError": - exception = new ReferenceError(error.message, options); - break; - case "TypeError": - exception = new TypeError(error.message, options); - break; - case "RuntimeError": - exception = new RuntimeError(error.message, options); - break; - default: - exception = new Error(error.message, options); - break; - } - promiseHandler.reject(exception); - } - } -} -function getAndDeleteResponse(id) { - const response = callResponses.get(id); - callResponses.delete(id); - return response; -} -var RuntimeError = class extends Error { - /** - * Constructs a new RuntimeError instance. - * - * @param {string} message - The error message. - * @param {any[]} args - Optional arguments for the Error constructor. - */ - constructor(message, ...args) { - super(message, ...args); - this.name = "RuntimeError"; - } -}; function Call(options) { const id = generateID2(); - const doCancel = () => { - return cancelCall(type, { "call-id": id }); - }; - let queuedCancel = false, callRunning = false; - let p = new Promise((resolve, reject) => { - options["call-id"] = id; - callResponses.set(id, { resolve, reject }); - call7(CallBinding, options).then((_) => { - callRunning = true; - if (queuedCancel) { - return doCancel(); - } - }).catch((error) => { - reject(error); - callResponses.delete(id); - }); + const result = CancellablePromise.withResolvers(); + callResponses.set(id, { resolve: result.resolve, reject: result.reject }); + const request = call7(CallBinding, Object.assign({ "call-id": id }, options)); + let running = false; + request.then(() => { + running = true; + }, (err) => { + callResponses.delete(id); + result.reject(err); }); - p.cancel = () => { - if (callRunning) { - return doCancel(); + const cancel = () => { + callResponses.delete(id); + return cancelCall(CancelMethod, { "call-id": id }).catch((err) => { + console.error("Error while requesting binding call cancellation:", err); + }); + }; + result.oncancelled = () => { + if (running) { + return cancel(); } else { - queuedCancel = true; + return request.then(cancel); } }; - return p; + return result.promise; } function ByName(methodName, ...args) { - return Call({ - methodName, - args - }); + return Call({ methodName, args }); } function ByID(methodID, ...args) { - return Call({ - methodID, - args - }); + return Call({ methodID, args }); } -// desktop/@wailsio/runtime/src/clipboard.js +// desktop/@wailsio/runtime/src/clipboard.ts var clipboard_exports = {}; __export(clipboard_exports, { SetText: () => SetText, Text: () => Text }); -var call8 = newRuntimeCallerWithID(objectNames.Clipboard, ""); +var call8 = newRuntimeCaller(objectNames.Clipboard); var ClipboardSetText = 0; var ClipboardText = 1; function SetText(text) { @@ -1571,29 +2394,23 @@ function Text() { return call8(ClipboardText); } -// desktop/@wailsio/runtime/src/create.js +// desktop/@wailsio/runtime/src/create.ts var create_exports = {}; __export(create_exports, { Any: () => Any, - Array: () => Array, + Array: () => Array2, ByteSlice: () => ByteSlice, Map: () => Map2, Nullable: () => Nullable, Struct: () => Struct }); function Any(source) { - return ( - /** @type {T} */ - source - ); + return source; } function ByteSlice(source) { - return ( - /** @type {any} */ - source == null ? "" : source - ); + return source == null ? "" : source; } -function Array(element) { +function Array2(element) { if (element === Any) { return (source) => source === null ? [] : source; } @@ -1648,14 +2465,14 @@ function Struct(createField) { }; } -// desktop/@wailsio/runtime/src/screens.js +// desktop/@wailsio/runtime/src/screens.ts var screens_exports = {}; __export(screens_exports, { GetAll: () => GetAll, GetCurrent: () => GetCurrent, GetPrimary: () => GetPrimary }); -var call9 = newRuntimeCallerWithID(objectNames.Screens, ""); +var call9 = newRuntimeCaller(objectNames.Screens); var getAll = 0; var getPrimary = 1; var getCurrent = 2; @@ -1669,23 +2486,17 @@ function GetCurrent() { return call9(getCurrent); } -// desktop/@wailsio/runtime/src/index.js +// desktop/@wailsio/runtime/src/index.ts window._wails = window._wails || {}; -var initialised = false; -function init() { - window._wails.invoke = invoke; - invoke("wails:runtime:ready"); - initialised = true; -} -window.addEventListener("load", () => { - if (!initialised) { - init(); - } -}); +window._wails.invoke = invoke; +invoke("wails:runtime:ready"); export { application_exports as Application, browser_exports as Browser, calls_exports as Call, + CancelError, + CancellablePromise, + CancelledRejectionError, clipboard_exports as Clipboard, create_exports as Create, dialogs_exports as Dialogs, @@ -1694,7 +2505,6 @@ export { screens_exports as Screens, system_exports as System, wml_exports as WML, - window_default as Window, - init + window_default as Window }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2luZGV4LmpzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy93bWwuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2Jyb3dzZXIuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL25hbm9pZC5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvcnVudGltZS5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZGlhbG9ncy5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZXZlbnRzLmpzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9ldmVudF90eXBlcy5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvdXRpbHMuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3dpbmRvdy5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvY29tcGlsZWQvbWFpbi5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvc3lzdGVtLmpzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9jb250ZXh0bWVudS5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZmxhZ3MuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2RyYWcuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2FwcGxpY2F0aW9uLmpzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9jYWxscy5qcyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvY2xpcGJvYXJkLmpzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9jcmVhdGUuanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3NjcmVlbnMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vLyBTZXR1cFxud2luZG93Ll93YWlscyA9IHdpbmRvdy5fd2FpbHMgfHwge307XG5cbmltcG9ydCBcIi4vY29udGV4dG1lbnVcIjtcbmltcG9ydCBcIi4vZHJhZ1wiO1xuXG4vLyBSZS1leHBvcnQgcHVibGljIEFQSVxuaW1wb3J0ICogYXMgQXBwbGljYXRpb24gZnJvbSBcIi4vYXBwbGljYXRpb25cIjtcbmltcG9ydCAqIGFzIEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiO1xuaW1wb3J0ICogYXMgQ2FsbCBmcm9tIFwiLi9jYWxsc1wiO1xuaW1wb3J0ICogYXMgQ2xpcGJvYXJkIGZyb20gXCIuL2NsaXBib2FyZFwiO1xuaW1wb3J0ICogYXMgQ3JlYXRlIGZyb20gXCIuL2NyZWF0ZVwiO1xuaW1wb3J0ICogYXMgRGlhbG9ncyBmcm9tIFwiLi9kaWFsb2dzXCI7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSBcIi4vZXZlbnRzXCI7XG5pbXBvcnQgKiBhcyBGbGFncyBmcm9tIFwiLi9mbGFnc1wiO1xuaW1wb3J0ICogYXMgU2NyZWVucyBmcm9tIFwiLi9zY3JlZW5zXCI7XG5pbXBvcnQgKiBhcyBTeXN0ZW0gZnJvbSBcIi4vc3lzdGVtXCI7XG5pbXBvcnQgV2luZG93IGZyb20gXCIuL3dpbmRvd1wiO1xuaW1wb3J0ICogYXMgV01MIGZyb20gXCIuL3dtbFwiO1xuXG5leHBvcnQge1xuICAgIEFwcGxpY2F0aW9uLFxuICAgIEJyb3dzZXIsXG4gICAgQ2FsbCxcbiAgICBDbGlwYm9hcmQsXG4gICAgQ3JlYXRlLFxuICAgIERpYWxvZ3MsXG4gICAgRXZlbnRzLFxuICAgIEZsYWdzLFxuICAgIFNjcmVlbnMsXG4gICAgU3lzdGVtLFxuICAgIFdpbmRvdyxcbiAgICBXTUxcbn07XG5cbmxldCBpbml0aWFsaXNlZCA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgd2luZG93Ll93YWlscy5pbnZva2UgPSBTeXN0ZW0uaW52b2tlO1xuICAgIFN5c3RlbS5pbnZva2UoXCJ3YWlsczpydW50aW1lOnJlYWR5XCIpO1xuICAgIGluaXRpYWxpc2VkID0gdHJ1ZTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcbiAgICBpZiAoIWluaXRpYWxpc2VkKSB7XG4gICAgICAgIGluaXQoKTtcbiAgICB9XG59KTtcblxuLy8gTm90aWZ5IGJhY2tlbmRcblxuIiwgIi8qXG4gXyAgICAgX18gICAgIF8gX19cbnwgfCAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQge09wZW5VUkx9IGZyb20gXCIuL2Jyb3dzZXJcIjtcbmltcG9ydCB7UXVlc3Rpb259IGZyb20gXCIuL2RpYWxvZ3NcIjtcbmltcG9ydCB7RW1pdCwgV2FpbHNFdmVudH0gZnJvbSBcIi4vZXZlbnRzXCI7XG5pbXBvcnQge2NhbkFib3J0TGlzdGVuZXJzLCB3aGVuUmVhZHl9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgV2luZG93IGZyb20gXCIuL3dpbmRvd1wiO1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIG9wdGlvbmFsIGRhdGEuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBzZW5kLlxuICogQHBhcmFtIHthbnl9IFtkYXRhPW51bGxdIC0gT3B0aW9uYWwgZGF0YSB0byBzZW5kIGFsb25nIHdpdGggdGhlIGV2ZW50LlxuICpcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNlbmRFdmVudChldmVudE5hbWUsIGRhdGE9bnVsbCkge1xuICAgIEVtaXQobmV3IFdhaWxzRXZlbnQoZXZlbnROYW1lLCBkYXRhKSk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBtZXRob2Qgb24gYSBzcGVjaWZpZWQgd2luZG93LlxuICogQHBhcmFtIHtzdHJpbmd9IHdpbmRvd05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd2luZG93IHRvIGNhbGwgdGhlIG1ldGhvZCBvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBjYWxsLlxuICovXG5mdW5jdGlvbiBjYWxsV2luZG93TWV0aG9kKHdpbmRvd05hbWUsIG1ldGhvZE5hbWUpIHtcbiAgICBjb25zdCB0YXJnZXRXaW5kb3cgPSBXaW5kb3cuR2V0KHdpbmRvd05hbWUpO1xuICAgIGNvbnN0IG1ldGhvZCA9IHRhcmdldFdpbmRvd1ttZXRob2ROYW1lXTtcblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgV2luZG93IG1ldGhvZCAnJHttZXRob2ROYW1lfScgbm90IGZvdW5kYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBtZXRob2QuY2FsbCh0YXJnZXRXaW5kb3cpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgY2FsbGluZyB3aW5kb3cgbWV0aG9kICcke21ldGhvZE5hbWV9JzogYCwgZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlc3BvbmRzIHRvIGEgdHJpZ2dlcmluZyBldmVudCBieSBydW5uaW5nIGFwcHJvcHJpYXRlIFdNTCBhY3Rpb25zIGZvciB0aGUgY3VycmVudCB0YXJnZXRcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25XTUxUcmlnZ2VyZWQoZXYpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXYuY3VycmVudFRhcmdldDtcblxuICAgIGZ1bmN0aW9uIHJ1bkVmZmVjdChjaG9pY2UgPSBcIlllc1wiKSB7XG4gICAgICAgIGlmIChjaG9pY2UgIT09IFwiWWVzXCIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd21sLWV2ZW50Jyk7XG4gICAgICAgIGNvbnN0IHRhcmdldFdpbmRvdyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXdtbC10YXJnZXQtd2luZG93JykgfHwgXCJcIjtcbiAgICAgICAgY29uc3Qgd2luZG93TWV0aG9kID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd21sLXdpbmRvdycpO1xuICAgICAgICBjb25zdCB1cmwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS13bWwtb3BlblVSTCcpO1xuXG4gICAgICAgIGlmIChldmVudFR5cGUgIT09IG51bGwpXG4gICAgICAgICAgICBzZW5kRXZlbnQoZXZlbnRUeXBlKTtcbiAgICAgICAgaWYgKHdpbmRvd01ldGhvZCAhPT0gbnVsbClcbiAgICAgICAgICAgIGNhbGxXaW5kb3dNZXRob2QodGFyZ2V0V2luZG93LCB3aW5kb3dNZXRob2QpO1xuICAgICAgICBpZiAodXJsICE9PSBudWxsKVxuICAgICAgICAgICAgdm9pZCBPcGVuVVJMKHVybCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlybSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXdtbC1jb25maXJtJyk7XG5cbiAgICBpZiAoY29uZmlybSkge1xuICAgICAgICBRdWVzdGlvbih7XG4gICAgICAgICAgICBUaXRsZTogXCJDb25maXJtXCIsXG4gICAgICAgICAgICBNZXNzYWdlOiBjb25maXJtLFxuICAgICAgICAgICAgRGV0YWNoZWQ6IGZhbHNlLFxuICAgICAgICAgICAgQnV0dG9uczogW1xuICAgICAgICAgICAgICAgIHsgTGFiZWw6IFwiWWVzXCIgfSxcbiAgICAgICAgICAgICAgICB7IExhYmVsOiBcIk5vXCIsIElzRGVmYXVsdDogdHJ1ZSB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pLnRoZW4ocnVuRWZmZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBydW5FZmZlY3QoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbGxlciA9IFN5bWJvbCgpO1xuXG4vKipcbiAqIEFib3J0Q29udHJvbGxlclJlZ2lzdHJ5IGRvZXMgbm90IGFjdHVhbGx5IHJlbWVtYmVyIGFjdGl2ZSBldmVudCBsaXN0ZW5lcnM6IGluc3RlYWRcbiAqIGl0IHRpZXMgdGhlbSB0byBhbiBBYm9ydFNpZ25hbCBhbmQgdXNlcyBhbiBBYm9ydENvbnRyb2xsZXIgdG8gcmVtb3ZlIHRoZW0gYWxsIGF0IG9uY2UuXG4gKi9cbmNsYXNzIEFib3J0Q29udHJvbGxlclJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0b3JlcyB0aGUgQWJvcnRDb250cm9sbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIGFsbCBjdXJyZW50bHkgYWN0aXZlIGxpc3RlbmVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUge0BsaW5rIGNvbnRyb2xsZXJ9XG4gICAgICAgICAqIEBtZW1iZXIge0Fib3J0Q29udHJvbGxlcn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXNbY29udHJvbGxlcl0gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvcHRpb25zIG9iamVjdCBmb3IgYWRkRXZlbnRMaXN0ZW5lciB0aGF0IHRpZXMgdGhlIGxpc3RlbmVyXG4gICAgICogdG8gdGhlIEFib3J0U2lnbmFsIGZyb20gdGhlIGN1cnJlbnQgQWJvcnRDb250cm9sbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0cmlnZ2VycyBUaGUgbGlzdCBvZiBhY3RpdmUgV01MIHRyaWdnZXIgZXZlbnRzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzXG4gICAgICogQHJldHVybnMge0FkZEV2ZW50TGlzdGVuZXJPcHRpb25zfVxuICAgICAqL1xuICAgIHNldChlbGVtZW50LCB0cmlnZ2Vycykge1xuICAgICAgICByZXR1cm4geyBzaWduYWw6IHRoaXNbY29udHJvbGxlcl0uc2lnbmFsIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpc1tjb250cm9sbGVyXS5hYm9ydCgpO1xuICAgICAgICB0aGlzW2NvbnRyb2xsZXJdID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0cmlnZ2VyTWFwID0gU3ltYm9sKCk7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZWxlbWVudENvdW50ID0gU3ltYm9sKCk7XG5cbi8qKlxuICogV2Vha01hcFJlZ2lzdHJ5IG1hcHMgYWN0aXZlIHRyaWdnZXIgZXZlbnRzIHRvIGVhY2ggRE9NIGVsZW1lbnQgdGhyb3VnaCBhIFdlYWtNYXAuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyByZW1haW5zIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUsIHdoaWxlIHN0aWxsIGFsbG93aW5nIGdhcmJhZ2VcbiAqIGNvbGxlY3Rpb24gb2YgdGhlIGludm9sdmVkIGVsZW1lbnRzLlxuICovXG5jbGFzcyBXZWFrTWFwUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcmVzIHRoZSBjdXJyZW50IGVsZW1lbnQtdG8tdHJpZ2dlciBtYXBwaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSB7QGxpbmsgdHJpZ2dlck1hcH1cbiAgICAgICAgICogQG1lbWJlciB7V2Vha01hcDxIVE1MRWxlbWVudCwgc3RyaW5nW10+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpc1t0cmlnZ2VyTWFwXSA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggYWN0aXZlIFdNTCB0cmlnZ2Vycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQG5hbWUge0BsaW5rIGVsZW1lbnRDb3VudH1cbiAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpc1tlbGVtZW50Q291bnRdID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhY3RpdmUgdHJpZ2dlcnMgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gdHJpZ2dlcnMgVGhlIGxpc3Qgb2YgYWN0aXZlIFdNTCB0cmlnZ2VyIGV2ZW50cyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50XG4gICAgICogQHJldHVybnMge0FkZEV2ZW50TGlzdGVuZXJPcHRpb25zfVxuICAgICAqL1xuICAgIHNldChlbGVtZW50LCB0cmlnZ2Vycykge1xuICAgICAgICB0aGlzW2VsZW1lbnRDb3VudF0gKz0gIXRoaXNbdHJpZ2dlck1hcF0uaGFzKGVsZW1lbnQpO1xuICAgICAgICB0aGlzW3RyaWdnZXJNYXBdLnNldChlbGVtZW50LCB0cmlnZ2Vycyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpc1tlbGVtZW50Q291bnRdIDw9IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgnKicpKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tlbGVtZW50Q291bnRdIDw9IDApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpc1t0cmlnZ2VyTWFwXS5nZXQoZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzW2VsZW1lbnRDb3VudF0gLT0gKHR5cGVvZiB0cmlnZ2VycyAhPT0gXCJ1bmRlZmluZWRcIik7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0cmlnZ2VycyB8fCBbXSlcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHJpZ2dlciwgb25XTUxUcmlnZ2VyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0cmlnZ2VyTWFwXSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXNbZWxlbWVudENvdW50XSA9IDA7XG4gICAgfVxufVxuXG5jb25zdCB0cmlnZ2VyUmVnaXN0cnkgPSBjYW5BYm9ydExpc3RlbmVycygpID8gbmV3IEFib3J0Q29udHJvbGxlclJlZ2lzdHJ5KCkgOiBuZXcgV2Vha01hcFJlZ2lzdHJ5KCk7XG5cbi8qKlxuICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFkZFdNTExpc3RlbmVycyhlbGVtZW50KSB7XG4gICAgY29uc3QgdHJpZ2dlclJlZ0V4cCA9IC9cXFMrL2c7XG4gICAgY29uc3QgdHJpZ2dlckF0dHIgPSAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd21sLXRyaWdnZXInKSB8fCBcImNsaWNrXCIpO1xuICAgIGNvbnN0IHRyaWdnZXJzID0gW107XG5cbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IHRyaWdnZXJSZWdFeHAuZXhlYyh0cmlnZ2VyQXR0cikpICE9PSBudWxsKVxuICAgICAgICB0cmlnZ2Vycy5wdXNoKG1hdGNoWzBdKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0cmlnZ2VyUmVnaXN0cnkuc2V0KGVsZW1lbnQsIHRyaWdnZXJzKTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0cmlnZ2VyLCBvbldNTFRyaWdnZXJlZCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogU2NoZWR1bGVzIGFuIGF1dG9tYXRpYyByZWxvYWQgb2YgV01MIHRvIGJlIHBlcmZvcm1lZCBhcyBzb29uIGFzIHRoZSBkb2N1bWVudCBpcyBmdWxseSBsb2FkZWQuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVuYWJsZSgpIHtcbiAgICB3aGVuUmVhZHkoUmVsb2FkKTtcbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBXTUwgcGFnZSBieSBhZGRpbmcgbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVycyBhbmQgYnJvd3NlciBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlbG9hZCgpIHtcbiAgICB0cmlnZ2VyUmVnaXN0cnkucmVzZXQoKTtcbiAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXdtbC1ldmVudF0sIFtkYXRhLXdtbC13aW5kb3ddLCBbZGF0YS13bWwtb3BlblVSTF0nKS5mb3JFYWNoKGFkZFdNTExpc3RlbmVycyk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cbmltcG9ydCB7bmV3UnVudGltZUNhbGxlcldpdGhJRCwgb2JqZWN0TmFtZXN9IGZyb20gXCIuL3J1bnRpbWVcIjtcblxuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXJXaXRoSUQob2JqZWN0TmFtZXMuQnJvd3NlciwgJycpO1xuY29uc3QgQnJvd3Nlck9wZW5VUkwgPSAwO1xuXG4vKipcbiAqIE9wZW4gYSBicm93c2VyIHdpbmRvdyB0byB0aGUgZ2l2ZW4gVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCB0byBvcGVuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gT3BlblVSTCh1cmwpIHtcbiAgICByZXR1cm4gY2FsbChCcm93c2VyT3BlblVSTCwge3VybH0pO1xufVxuIiwgIi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2FpL25hbm9pZFxuXG4vLyBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbi8vXG4vLyBDb3B5cmlnaHQgMjAxNyBBbmRyZXkgU2l0bmlrIDxhbmRyZXlAc2l0bmlrLnJ1PlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2Zcbi8vIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW5cbi8vIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbi8vIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mXG4vLyB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4vLyAgICAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuLy8gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Ncbi8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuLy8gQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSXG4vLyBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuLy8gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gVGhpcyBhbHBoYWJldCB1c2VzIGBBLVphLXowLTlfLWAgc3ltYm9scy5cbi8vIFRoZSBvcmRlciBvZiBjaGFyYWN0ZXJzIGlzIG9wdGltaXplZCBmb3IgYmV0dGVyIGd6aXAgYW5kIGJyb3RsaSBjb21wcmVzc2lvbi5cbi8vIFJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgZmlsZSAod29ya3MgYm90aCBmb3IgZ3ppcCBhbmQgYnJvdGxpKTpcbi8vIGAndXNlYCwgYGFuZG9tYCwgYW5kIGByaWN0J2Bcbi8vIFJlZmVyZW5jZXMgdG8gdGhlIGJyb3RsaSBkZWZhdWx0IGRpY3Rpb25hcnk6XG4vLyBgLTI2VGAsIGAxOTgzYCwgYDQwcHhgLCBgNzVweGAsIGBidXNoYCwgYGphY2tgLCBgbWluZGAsIGB2ZXJ5YCwgYW5kIGB3b2xmYFxubGV0IHVybEFscGhhYmV0ID1cbiAgICAndXNlYW5kb20tMjZUMTk4MzQwUFg3NXB4SkFDS1ZFUllNSU5EQlVTSFdPTEZfR1FaYmZnaGprbHF2d3l6cmljdCdcblxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XG4gICAgbGV0IGlkID0gJydcbiAgICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxuICAgIGxldCBpID0gc2l6ZSB8IDBcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogNjQpIHwgMF1cbiAgICB9XG4gICAgcmV0dXJuIGlkXG59IiwgIi8qXG4gXyAgICAgX18gICAgIF8gX19cbnwgfCAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICcuL25hbm9pZC5qcyc7XG5cbmNvbnN0IHJ1bnRpbWVVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgXCIvd2FpbHMvcnVudGltZVwiO1xuXG4vLyBPYmplY3QgTmFtZXNcbmV4cG9ydCBjb25zdCBvYmplY3ROYW1lcyA9IHtcbiAgICBDYWxsOiAwLFxuICAgIENsaXBib2FyZDogMSxcbiAgICBBcHBsaWNhdGlvbjogMixcbiAgICBFdmVudHM6IDMsXG4gICAgQ29udGV4dE1lbnU6IDQsXG4gICAgRGlhbG9nOiA1LFxuICAgIFdpbmRvdzogNixcbiAgICBTY3JlZW5zOiA3LFxuICAgIFN5c3RlbTogOCxcbiAgICBCcm93c2VyOiA5LFxuICAgIENhbmNlbENhbGw6IDEwLFxufVxuZXhwb3J0IGxldCBjbGllbnRJZCA9IG5hbm9pZCgpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBydW50aW1lIGNhbGxlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgYSBzcGVjaWZpZWQgbWV0aG9kIG9uIGEgZ2l2ZW4gb2JqZWN0IHdpdGhpbiBhIHNwZWNpZmllZCB3aW5kb3cgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIGlzIHRvIGJlIGludm9rZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gd2luZG93TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3aW5kb3cgY29udGV4dCBpbiB3aGljaCB0aGUgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcnVudGltZSBjYWxsZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgbWV0aG9kIG5hbWUgYW5kIG9wdGlvbmFsbHkgYXJndW1lbnRzIGFuZCBpbnZva2VzIHRoZSBtZXRob2Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgd2luZG93IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXdSdW50aW1lQ2FsbGVyKG9iamVjdCwgd2luZG93TmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAobWV0aG9kLCBhcmdzPW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJ1bnRpbWVDYWxsKG9iamVjdCArIFwiLlwiICsgbWV0aG9kLCB3aW5kb3dOYW1lLCBhcmdzKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcnVudGltZSBjYWxsZXIgd2l0aCBzcGVjaWZpZWQgSUQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gd2luZG93TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3aW5kb3cuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gLSBUaGUgbmV3IHJ1bnRpbWUgY2FsbGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3QsIHdpbmRvd05hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJncz1udWxsKSB7XG4gICAgICAgIHJldHVybiBydW50aW1lQ2FsbFdpdGhJRChvYmplY3QsIG1ldGhvZCwgd2luZG93TmFtZSwgYXJncyk7XG4gICAgfTtcbn1cblxuXG5mdW5jdGlvbiBydW50aW1lQ2FsbChtZXRob2QsIHdpbmRvd05hbWUsIGFyZ3MpIHtcbiAgICByZXR1cm4gcnVudGltZUNhbGxXaXRoSUQobnVsbCwgbWV0aG9kLCB3aW5kb3dOYW1lLCBhcmdzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVudGltZUNhbGxXaXRoSUQob2JqZWN0SUQsIG1ldGhvZCwgd2luZG93TmFtZSwgYXJncykge1xuICAgIGxldCB1cmwgPSBuZXcgVVJMKHJ1bnRpbWVVUkwpO1xuICAgIGlmIChvYmplY3RJRCAhPSBudWxsKSB7XG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwib2JqZWN0XCIsIG9iamVjdElEKTtcbiAgICB9XG4gICAgaWYgKG1ldGhvZCAhPSBudWxsKSB7XG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwibWV0aG9kXCIsIG1ldGhvZCk7XG4gICAgfVxuICAgIGxldCBmZXRjaE9wdGlvbnMgPSB7XG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgIH07XG4gICAgaWYgKHdpbmRvd05hbWUpIHtcbiAgICAgICAgZmV0Y2hPcHRpb25zLmhlYWRlcnNbXCJ4LXdhaWxzLXdpbmRvdy1uYW1lXCJdID0gd2luZG93TmFtZTtcbiAgICB9XG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJhcmdzXCIsIEpTT04uc3RyaW5naWZ5KGFyZ3MpKTtcbiAgICB9XG4gICAgZmV0Y2hPcHRpb25zLmhlYWRlcnNbXCJ4LXdhaWxzLWNsaWVudC1pZFwiXSA9IGNsaWVudElkO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpICYmIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgfVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gT3BlbkZpbGVEaWFsb2dPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtDYW5DaG9vc2VEaXJlY3Rvcmllc10gLSBJbmRpY2F0ZXMgaWYgZGlyZWN0b3JpZXMgY2FuIGJlIGNob3Nlbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0NhbkNob29zZUZpbGVzXSAtIEluZGljYXRlcyBpZiBmaWxlcyBjYW4gYmUgY2hvc2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbQ2FuQ3JlYXRlRGlyZWN0b3JpZXNdIC0gSW5kaWNhdGVzIGlmIGRpcmVjdG9yaWVzIGNhbiBiZSBjcmVhdGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbU2hvd0hpZGRlbkZpbGVzXSAtIEluZGljYXRlcyBpZiBoaWRkZW4gZmlsZXMgc2hvdWxkIGJlIHNob3duLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbUmVzb2x2ZXNBbGlhc2VzXSAtIEluZGljYXRlcyBpZiBhbGlhc2VzIHNob3VsZCBiZSByZXNvbHZlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0FsbG93c011bHRpcGxlU2VsZWN0aW9uXSAtIEluZGljYXRlcyBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0hpZGVFeHRlbnNpb25dIC0gSW5kaWNhdGVzIGlmIHRoZSBleHRlbnNpb24gc2hvdWxkIGJlIGhpZGRlbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0NhblNlbGVjdEhpZGRlbkV4dGVuc2lvbl0gLSBJbmRpY2F0ZXMgaWYgaGlkZGVuIGV4dGVuc2lvbnMgY2FuIGJlIHNlbGVjdGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbVHJlYXRzRmlsZVBhY2thZ2VzQXNEaXJlY3Rvcmllc10gLSBJbmRpY2F0ZXMgaWYgZmlsZSBwYWNrYWdlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBkaXJlY3Rvcmllcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0FsbG93c090aGVyRmlsZXR5cGVzXSAtIEluZGljYXRlcyBpZiBvdGhlciBmaWxlIHR5cGVzIGFyZSBhbGxvd2VkLlxuICogQHByb3BlcnR5IHtGaWxlRmlsdGVyW119IFtGaWx0ZXJzXSAtIEFycmF5IG9mIGZpbGUgZmlsdGVycy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbVGl0bGVdIC0gVGl0bGUgb2YgdGhlIGRpYWxvZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbTWVzc2FnZV0gLSBNZXNzYWdlIHRvIHNob3cgaW4gdGhlIGRpYWxvZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbQnV0dG9uVGV4dF0gLSBUZXh0IHRvIGRpc3BsYXkgb24gdGhlIGJ1dHRvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRGlyZWN0b3J5XSAtIERpcmVjdG9yeSB0byBvcGVuIGluIHRoZSBkaWFsb2cuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtEZXRhY2hlZF0gLSBJbmRpY2F0ZXMgaWYgdGhlIGRpYWxvZyBzaG91bGQgYXBwZWFyIGRldGFjaGVkIGZyb20gdGhlIG1haW4gd2luZG93LlxuICovXG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTYXZlRmlsZURpYWxvZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRmlsZW5hbWVdIC0gRGVmYXVsdCBmaWxlbmFtZSB0byB1c2UgaW4gdGhlIGRpYWxvZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0NhbkNob29zZURpcmVjdG9yaWVzXSAtIEluZGljYXRlcyBpZiBkaXJlY3RvcmllcyBjYW4gYmUgY2hvc2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbQ2FuQ2hvb3NlRmlsZXNdIC0gSW5kaWNhdGVzIGlmIGZpbGVzIGNhbiBiZSBjaG9zZW4uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtDYW5DcmVhdGVEaXJlY3Rvcmllc10gLSBJbmRpY2F0ZXMgaWYgZGlyZWN0b3JpZXMgY2FuIGJlIGNyZWF0ZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtTaG93SGlkZGVuRmlsZXNdIC0gSW5kaWNhdGVzIGlmIGhpZGRlbiBmaWxlcyBzaG91bGQgYmUgc2hvd24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtSZXNvbHZlc0FsaWFzZXNdIC0gSW5kaWNhdGVzIGlmIGFsaWFzZXMgc2hvdWxkIGJlIHJlc29sdmVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbQWxsb3dzTXVsdGlwbGVTZWxlY3Rpb25dIC0gSW5kaWNhdGVzIGlmIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBhbGxvd2VkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbSGlkZUV4dGVuc2lvbl0gLSBJbmRpY2F0ZXMgaWYgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgaGlkZGVuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbQ2FuU2VsZWN0SGlkZGVuRXh0ZW5zaW9uXSAtIEluZGljYXRlcyBpZiBoaWRkZW4gZXh0ZW5zaW9ucyBjYW4gYmUgc2VsZWN0ZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtUcmVhdHNGaWxlUGFja2FnZXNBc0RpcmVjdG9yaWVzXSAtIEluZGljYXRlcyBpZiBmaWxlIHBhY2thZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRpcmVjdG9yaWVzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbQWxsb3dzT3RoZXJGaWxldHlwZXNdIC0gSW5kaWNhdGVzIGlmIG90aGVyIGZpbGUgdHlwZXMgYXJlIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge0ZpbGVGaWx0ZXJbXX0gW0ZpbHRlcnNdIC0gQXJyYXkgb2YgZmlsZSBmaWx0ZXJzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtUaXRsZV0gLSBUaXRsZSBvZiB0aGUgZGlhbG9nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtNZXNzYWdlXSAtIE1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtCdXR0b25UZXh0XSAtIFRleHQgdG8gZGlzcGxheSBvbiB0aGUgYnV0dG9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtEaXJlY3RvcnldIC0gRGlyZWN0b3J5IHRvIG9wZW4gaW4gdGhlIGRpYWxvZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW0RldGFjaGVkXSAtIEluZGljYXRlcyBpZiB0aGUgZGlhbG9nIHNob3VsZCBhcHBlYXIgZGV0YWNoZWQgZnJvbSB0aGUgbWFpbiB3aW5kb3cuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNZXNzYWdlRGlhbG9nT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtUaXRsZV0gLSBUaGUgdGl0bGUgb2YgdGhlIGRpYWxvZyB3aW5kb3cuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW01lc3NhZ2VdIC0gVGhlIG1haW4gbWVzc2FnZSB0byBzaG93IGluIHRoZSBkaWFsb2cuXG4gKiBAcHJvcGVydHkge0J1dHRvbltdfSBbQnV0dG9uc10gLSBBcnJheSBvZiBidXR0b24gb3B0aW9ucyB0byBzaG93IGluIHRoZSBkaWFsb2cuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtEZXRhY2hlZF0gLSBUcnVlIGlmIHRoZSBkaWFsb2cgc2hvdWxkIGFwcGVhciBkZXRhY2hlZCBmcm9tIHRoZSBtYWluIHdpbmRvdyAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBCdXR0b25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbTGFiZWxdIC0gVGV4dCB0aGF0IGFwcGVhcnMgd2l0aGluIHRoZSBidXR0b24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtJc0NhbmNlbF0gLSBUcnVlIGlmIHRoZSBidXR0b24gc2hvdWxkIGNhbmNlbCBhbiBvcGVyYXRpb24gd2hlbiBjbGlja2VkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbSXNEZWZhdWx0XSAtIFRydWUgaWYgdGhlIGJ1dHRvbiBzaG91bGQgYmUgdGhlIGRlZmF1bHQgYWN0aW9uIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBlbnRlci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZpbGVGaWx0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRGlzcGxheU5hbWVdIC0gRGlzcGxheSBuYW1lIGZvciB0aGUgZmlsdGVyLCBpdCBjb3VsZCBiZSBcIlRleHQgRmlsZXNcIiwgXCJJbWFnZXNcIiBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BhdHRlcm5dIC0gUGF0dGVybiB0byBtYXRjaCBmb3IgdGhlIGZpbHRlciwgZS5nLiBcIioudHh0OyoubWRcIiBmb3IgdGV4dCBtYXJrZG93biBmaWxlcy5cbiAqL1xuXG4vLyBzZXR1cFxud2luZG93Ll93YWlscyA9IHdpbmRvdy5fd2FpbHMgfHwge307XG53aW5kb3cuX3dhaWxzLmRpYWxvZ0Vycm9yQ2FsbGJhY2sgPSBkaWFsb2dFcnJvckNhbGxiYWNrO1xud2luZG93Ll93YWlscy5kaWFsb2dSZXN1bHRDYWxsYmFjayA9IGRpYWxvZ1Jlc3VsdENhbGxiYWNrO1xuXG5pbXBvcnQge25ld1J1bnRpbWVDYWxsZXJXaXRoSUQsIG9iamVjdE5hbWVzfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5cbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkLmpzJztcblxuLy8gRGVmaW5lIGNvbnN0YW50cyBmcm9tIHRoZSBgbWV0aG9kc2Agb2JqZWN0IGluIFRpdGxlIENhc2VcbmNvbnN0IERpYWxvZ0luZm8gPSAwO1xuY29uc3QgRGlhbG9nV2FybmluZyA9IDE7XG5jb25zdCBEaWFsb2dFcnJvciA9IDI7XG5jb25zdCBEaWFsb2dRdWVzdGlvbiA9IDM7XG5jb25zdCBEaWFsb2dPcGVuRmlsZSA9IDQ7XG5jb25zdCBEaWFsb2dTYXZlRmlsZSA9IDU7XG5cbmNvbnN0IGNhbGwgPSBuZXdSdW50aW1lQ2FsbGVyV2l0aElEKG9iamVjdE5hbWVzLkRpYWxvZywgJycpO1xuY29uc3QgZGlhbG9nUmVzcG9uc2VzID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBpZCB0aGF0IGlzIG5vdCBwcmVzZW50IGluIGRpYWxvZ1Jlc3BvbnNlcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVuaXF1ZSBpZFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgZG8ge1xuICAgICAgICByZXN1bHQgPSBuYW5vaWQoKTtcbiAgICB9IHdoaWxlIChkaWFsb2dSZXNwb25zZXMuaGFzKHJlc3VsdCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogU2hvd3MgYSBkaWFsb2cgb2Ygc3BlY2lmaWVkIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIC0gdHlwZSBvZiBkaWFsb2dcbiAqIEBwYXJhbSB7TWVzc2FnZURpYWxvZ09wdGlvbnN8T3BlbkZpbGVEaWFsb2dPcHRpb25zfFNhdmVGaWxlRGlhbG9nT3B0aW9uc30gb3B0aW9ucyAtIG9wdGlvbnMgZm9yIHRoZSBkaWFsb2dcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCByZXN1bHQgb2YgZGlhbG9nXG4gKi9cbmZ1bmN0aW9uIGRpYWxvZyh0eXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBpZCA9IGdlbmVyYXRlSUQoKTtcbiAgICBvcHRpb25zW1wiZGlhbG9nLWlkXCJdID0gaWQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZGlhbG9nUmVzcG9uc2VzLnNldChpZCwge3Jlc29sdmUsIHJlamVjdH0pO1xuICAgICAgICBjYWxsKHR5cGUsIG9wdGlvbnMpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGRpYWxvZ1Jlc3BvbnNlcy5kZWxldGUoaWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBjYWxsYmFjayBmcm9tIGEgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIFRoZSBJRCBvZiB0aGUgZGlhbG9nIHJlc3BvbnNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkaWFsb2cuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSlNPTiAtIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBkYXRhIGlzIGluIEpTT04gZm9ybWF0LlxuICpcbiAqIEByZXR1cm4ge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZGlhbG9nUmVzdWx0Q2FsbGJhY2soaWQsIGRhdGEsIGlzSlNPTikge1xuICAgIGxldCBwID0gZGlhbG9nUmVzcG9uc2VzLmdldChpZCk7XG4gICAgaWYgKHApIHtcbiAgICAgICAgZGlhbG9nUmVzcG9uc2VzLmRlbGV0ZShpZCk7XG4gICAgICAgIGlmIChpc0pTT04pIHtcbiAgICAgICAgICAgIHAucmVzb2x2ZShKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgZXJyb3JzIGluIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgaWQgb2YgdGhlIGRpYWxvZyByZXNwb25zZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGlhbG9nRXJyb3JDYWxsYmFjayhpZCwgbWVzc2FnZSkge1xuICAgIGxldCBwID0gZGlhbG9nUmVzcG9uc2VzLmdldChpZCk7XG4gICAgaWYgKHApIHtcbiAgICAgICAgZGlhbG9nUmVzcG9uc2VzLmRlbGV0ZShpZCk7XG4gICAgICAgIHAucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxufVxuXG5cbi8vIFJlcGxhY2UgYG1ldGhvZHNgIHdpdGggY29uc3RhbnRzIGluIFRpdGxlIENhc2VcblxuLyoqXG4gKiBAcGFyYW0ge01lc3NhZ2VEaWFsb2dPcHRpb25zfSBvcHRpb25zIC0gRGlhbG9nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IC0gVGhlIGxhYmVsIG9mIHRoZSBidXR0b24gcHJlc3NlZFxuICovXG5leHBvcnQgY29uc3QgSW5mbyA9IChvcHRpb25zKSA9PiBkaWFsb2coRGlhbG9nSW5mbywgb3B0aW9ucyk7XG5cbi8qKlxuICogQHBhcmFtIHtNZXNzYWdlRGlhbG9nT3B0aW9uc30gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFRoZSBsYWJlbCBvZiB0aGUgYnV0dG9uIHByZXNzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IFdhcm5pbmcgPSAob3B0aW9ucykgPT4gZGlhbG9nKERpYWxvZ1dhcm5pbmcsIG9wdGlvbnMpO1xuXG4vKipcbiAqIEBwYXJhbSB7TWVzc2FnZURpYWxvZ09wdGlvbnN9IG9wdGlvbnMgLSBEaWFsb2cgb3B0aW9uc1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBUaGUgbGFiZWwgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkXG4gKi9cbmV4cG9ydCBjb25zdCBFcnJvciA9IChvcHRpb25zKSA9PiBkaWFsb2coRGlhbG9nRXJyb3IsIG9wdGlvbnMpO1xuXG4vKipcbiAqIEBwYXJhbSB7TWVzc2FnZURpYWxvZ09wdGlvbnN9IG9wdGlvbnMgLSBEaWFsb2cgb3B0aW9uc1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBUaGUgbGFiZWwgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVzdGlvbiA9IChvcHRpb25zKSA9PiBkaWFsb2coRGlhbG9nUXVlc3Rpb24sIG9wdGlvbnMpO1xuXG4vKipcbiAqIEBwYXJhbSB7T3BlbkZpbGVEaWFsb2dPcHRpb25zfSBvcHRpb25zIC0gRGlhbG9nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdfHN0cmluZz59IFJldHVybnMgc2VsZWN0ZWQgZmlsZSBvciBsaXN0IG9mIGZpbGVzLiBSZXR1cm5zIGJsYW5rIHN0cmluZyBpZiBubyBmaWxlIGlzIHNlbGVjdGVkLlxuICovXG5leHBvcnQgY29uc3QgT3BlbkZpbGUgPSAob3B0aW9ucykgPT4gZGlhbG9nKERpYWxvZ09wZW5GaWxlLCBvcHRpb25zKTtcblxuLyoqXG4gKiBAcGFyYW0ge1NhdmVGaWxlRGlhbG9nT3B0aW9uc30gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBSZXR1cm5zIHRoZSBzZWxlY3RlZCBmaWxlLiBSZXR1cm5zIGJsYW5rIHN0cmluZyBpZiBubyBmaWxlIGlzIHNlbGVjdGVkLlxuICovXG5leHBvcnQgY29uc3QgU2F2ZUZpbGUgPSAob3B0aW9ucykgPT4gZGlhbG9nKERpYWxvZ1NhdmVGaWxlLCBvcHRpb25zKTtcbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3R5cGVzXCIpLldhaWxzRXZlbnR9IFdhaWxzRXZlbnRcbiAqL1xuaW1wb3J0IHtuZXdSdW50aW1lQ2FsbGVyV2l0aElELCBvYmplY3ROYW1lc30gZnJvbSBcIi4vcnVudGltZVwiO1xuXG5pbXBvcnQge0V2ZW50VHlwZXN9IGZyb20gXCIuL2V2ZW50X3R5cGVzXCI7XG5leHBvcnQgY29uc3QgVHlwZXMgPSBFdmVudFR5cGVzO1xuXG4vLyBTZXR1cFxud2luZG93Ll93YWlscyA9IHdpbmRvdy5fd2FpbHMgfHwge307XG53aW5kb3cuX3dhaWxzLmRpc3BhdGNoV2FpbHNFdmVudCA9IGRpc3BhdGNoV2FpbHNFdmVudDtcblxuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXJXaXRoSUQob2JqZWN0TmFtZXMuRXZlbnRzLCAnJyk7XG5jb25zdCBFbWl0TWV0aG9kID0gMDtcbmNvbnN0IGV2ZW50TGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuXG5jbGFzcyBMaXN0ZW5lciB7XG4gICAgY29uc3RydWN0b3IoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKSB7XG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcbiAgICAgICAgdGhpcy5DYWxsYmFjayA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heENhbGxiYWNrcyA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubWF4Q2FsbGJhY2tzIC09IDE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2FpbHNFdmVudCB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgZGF0YSA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cCgpIHtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hXYWlsc0V2ZW50KGV2ZW50KSB7XG4gICAgbGV0IGxpc3RlbmVycyA9IGV2ZW50TGlzdGVuZXJzLmdldChldmVudC5uYW1lKTtcbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgIGxldCB0b1JlbW92ZSA9IGxpc3RlbmVycy5maWx0ZXIobGlzdGVuZXIgPT4ge1xuICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGxpc3RlbmVyLkNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChyZW1vdmUpIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIobCA9PiAhdG9SZW1vdmUuaW5jbHVkZXMobCkpO1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIGV2ZW50TGlzdGVuZXJzLmRlbGV0ZShldmVudC5uYW1lKTtcbiAgICAgICAgICAgIGVsc2UgZXZlbnRMaXN0ZW5lcnMuc2V0KGV2ZW50Lm5hbWUsIGxpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgc3BlY2lmaWMgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byByZWdpc3RlciB0aGUgY2FsbGJhY2sgZm9yLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3MgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIGNhbiBiZSBjYWxsZWQgZm9yIHRoZSBldmVudC4gT25jZSB0aGUgbWF4aW11bSBudW1iZXIgaXMgcmVhY2hlZCwgdGhlIGNhbGxiYWNrIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5cbiAqXG4gQHJldHVybiB7ZnVuY3Rpb259IC0gQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmcm9tIHRoZSBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uTXVsdGlwbGUoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKSB7XG4gICAgbGV0IGxpc3RlbmVycyA9IGV2ZW50TGlzdGVuZXJzLmdldChldmVudE5hbWUpIHx8IFtdO1xuICAgIGNvbnN0IHRoaXNMaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xuICAgIGxpc3RlbmVycy5wdXNoKHRoaXNMaXN0ZW5lcik7XG4gICAgZXZlbnRMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbGlzdGVuZXJzKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJPZmYodGhpc0xpc3RlbmVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBzcGVjaWZpZWQgZXZlbnQgb2NjdXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC4gSXQgdGFrZXMgbm8gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAtIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgdW5yZWdpc3RlciB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gT24oZXZlbnROYW1lLCBjYWxsYmFjaykgeyByZXR1cm4gT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7IH1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmx5IG9uY2UgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAtIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgdW5yZWdpc3RlciB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsgcmV0dXJuIE9uTXVsdGlwbGUoZXZlbnROYW1lLCBjYWxsYmFjaywgMSk7IH1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgbGlzdGVuZXIgZnJvbSB0aGUgZXZlbnQgbGlzdGVuZXJzIGNvbGxlY3Rpb24uXG4gKiBJZiBhbGwgbGlzdGVuZXJzIGZvciB0aGUgZXZlbnQgYXJlIHJlbW92ZWQsIHRoZSBldmVudCBrZXkgaXMgZGVsZXRlZCBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBsaXN0ZW5lciAtIFRoZSBsaXN0ZW5lciB0byBiZSByZW1vdmVkLlxuICovXG5mdW5jdGlvbiBsaXN0ZW5lck9mZihsaXN0ZW5lcikge1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGxpc3RlbmVyLmV2ZW50TmFtZTtcbiAgICBsZXQgbGlzdGVuZXJzID0gZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSkuZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwKSBldmVudExpc3RlbmVycy5kZWxldGUoZXZlbnROYW1lKTtcbiAgICBlbHNlIGV2ZW50TGlzdGVuZXJzLnNldChldmVudE5hbWUsIGxpc3RlbmVycyk7XG59XG5cblxuLyoqXG4gKiBSZW1vdmVzIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIHNwZWNpZmllZCBldmVudCBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlbW92ZSBsaXN0ZW5lcnMgZm9yLlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IGFkZGl0aW9uYWxFdmVudE5hbWVzIC0gQWRkaXRpb25hbCBldmVudCBuYW1lcyB0byByZW1vdmUgbGlzdGVuZXJzIGZvci5cbiAqIEByZXR1cm4ge3VuZGVmaW5lZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9mZihldmVudE5hbWUsIC4uLmFkZGl0aW9uYWxFdmVudE5hbWVzKSB7XG4gICAgbGV0IGV2ZW50c1RvUmVtb3ZlID0gW2V2ZW50TmFtZSwgLi4uYWRkaXRpb25hbEV2ZW50TmFtZXNdO1xuICAgIGV2ZW50c1RvUmVtb3ZlLmZvckVhY2goZXZlbnROYW1lID0+IGV2ZW50TGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhbGwgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvbiBPZmZBbGxcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gT2ZmQWxsKCkgeyBldmVudExpc3RlbmVycy5jbGVhcigpOyB9XG5cbi8qKlxuICogRW1pdHMgYW4gZXZlbnQgdXNpbmcgdGhlIGdpdmVuIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtXYWlsc0V2ZW50fSBldmVudCAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBlbWl0LlxuICogQHJldHVybnMge2FueX0gLSBUaGUgcmVzdWx0IG9mIHRoZSBlbWl0dGVkIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRW1pdChldmVudCkgeyByZXR1cm4gY2FsbChFbWl0TWV0aG9kLCBldmVudCk7IH1cbiIsICJcbmV4cG9ydCBjb25zdCBFdmVudFR5cGVzID0ge1xuXHRXaW5kb3dzOiB7XG5cdFx0QVBNUG93ZXJTZXR0aW5nQ2hhbmdlOiBcIndpbmRvd3M6QVBNUG93ZXJTZXR0aW5nQ2hhbmdlXCIsXG5cdFx0QVBNUG93ZXJTdGF0dXNDaGFuZ2U6IFwid2luZG93czpBUE1Qb3dlclN0YXR1c0NoYW5nZVwiLFxuXHRcdEFQTVJlc3VtZUF1dG9tYXRpYzogXCJ3aW5kb3dzOkFQTVJlc3VtZUF1dG9tYXRpY1wiLFxuXHRcdEFQTVJlc3VtZVN1c3BlbmQ6IFwid2luZG93czpBUE1SZXN1bWVTdXNwZW5kXCIsXG5cdFx0QVBNU3VzcGVuZDogXCJ3aW5kb3dzOkFQTVN1c3BlbmRcIixcblx0XHRBcHBsaWNhdGlvblN0YXJ0ZWQ6IFwid2luZG93czpBcHBsaWNhdGlvblN0YXJ0ZWRcIixcblx0XHRTeXN0ZW1UaGVtZUNoYW5nZWQ6IFwid2luZG93czpTeXN0ZW1UaGVtZUNoYW5nZWRcIixcblx0XHRXZWJWaWV3TmF2aWdhdGlvbkNvbXBsZXRlZDogXCJ3aW5kb3dzOldlYlZpZXdOYXZpZ2F0aW9uQ29tcGxldGVkXCIsXG5cdFx0V2luZG93QWN0aXZlOiBcIndpbmRvd3M6V2luZG93QWN0aXZlXCIsXG5cdFx0V2luZG93QmFja2dyb3VuZEVyYXNlOiBcIndpbmRvd3M6V2luZG93QmFja2dyb3VuZEVyYXNlXCIsXG5cdFx0V2luZG93Q2xpY2tBY3RpdmU6IFwid2luZG93czpXaW5kb3dDbGlja0FjdGl2ZVwiLFxuXHRcdFdpbmRvd0Nsb3Npbmc6IFwid2luZG93czpXaW5kb3dDbG9zaW5nXCIsXG5cdFx0V2luZG93RGlkTW92ZTogXCJ3aW5kb3dzOldpbmRvd0RpZE1vdmVcIixcblx0XHRXaW5kb3dEaWRSZXNpemU6IFwid2luZG93czpXaW5kb3dEaWRSZXNpemVcIixcblx0XHRXaW5kb3dEUElDaGFuZ2VkOiBcIndpbmRvd3M6V2luZG93RFBJQ2hhbmdlZFwiLFxuXHRcdFdpbmRvd0RyYWdEcm9wOiBcIndpbmRvd3M6V2luZG93RHJhZ0Ryb3BcIixcblx0XHRXaW5kb3dEcmFnRW50ZXI6IFwid2luZG93czpXaW5kb3dEcmFnRW50ZXJcIixcblx0XHRXaW5kb3dEcmFnTGVhdmU6IFwid2luZG93czpXaW5kb3dEcmFnTGVhdmVcIixcblx0XHRXaW5kb3dEcmFnT3ZlcjogXCJ3aW5kb3dzOldpbmRvd0RyYWdPdmVyXCIsXG5cdFx0V2luZG93RW5kTW92ZTogXCJ3aW5kb3dzOldpbmRvd0VuZE1vdmVcIixcblx0XHRXaW5kb3dFbmRSZXNpemU6IFwid2luZG93czpXaW5kb3dFbmRSZXNpemVcIixcblx0XHRXaW5kb3dGdWxsc2NyZWVuOiBcIndpbmRvd3M6V2luZG93RnVsbHNjcmVlblwiLFxuXHRcdFdpbmRvd0hpZGU6IFwid2luZG93czpXaW5kb3dIaWRlXCIsXG5cdFx0V2luZG93SW5hY3RpdmU6IFwid2luZG93czpXaW5kb3dJbmFjdGl2ZVwiLFxuXHRcdFdpbmRvd0tleURvd246IFwid2luZG93czpXaW5kb3dLZXlEb3duXCIsXG5cdFx0V2luZG93S2V5VXA6IFwid2luZG93czpXaW5kb3dLZXlVcFwiLFxuXHRcdFdpbmRvd0tpbGxGb2N1czogXCJ3aW5kb3dzOldpbmRvd0tpbGxGb2N1c1wiLFxuXHRcdFdpbmRvd05vbkNsaWVudEhpdDogXCJ3aW5kb3dzOldpbmRvd05vbkNsaWVudEhpdFwiLFxuXHRcdFdpbmRvd05vbkNsaWVudE1vdXNlRG93bjogXCJ3aW5kb3dzOldpbmRvd05vbkNsaWVudE1vdXNlRG93blwiLFxuXHRcdFdpbmRvd05vbkNsaWVudE1vdXNlTGVhdmU6IFwid2luZG93czpXaW5kb3dOb25DbGllbnRNb3VzZUxlYXZlXCIsXG5cdFx0V2luZG93Tm9uQ2xpZW50TW91c2VNb3ZlOiBcIndpbmRvd3M6V2luZG93Tm9uQ2xpZW50TW91c2VNb3ZlXCIsXG5cdFx0V2luZG93Tm9uQ2xpZW50TW91c2VVcDogXCJ3aW5kb3dzOldpbmRvd05vbkNsaWVudE1vdXNlVXBcIixcblx0XHRXaW5kb3dQYWludDogXCJ3aW5kb3dzOldpbmRvd1BhaW50XCIsXG5cdFx0V2luZG93UmVzdG9yZTogXCJ3aW5kb3dzOldpbmRvd1Jlc3RvcmVcIixcblx0XHRXaW5kb3dTZXRGb2N1czogXCJ3aW5kb3dzOldpbmRvd1NldEZvY3VzXCIsXG5cdFx0V2luZG93U2hvdzogXCJ3aW5kb3dzOldpbmRvd1Nob3dcIixcblx0XHRXaW5kb3dTdGFydE1vdmU6IFwid2luZG93czpXaW5kb3dTdGFydE1vdmVcIixcblx0XHRXaW5kb3dTdGFydFJlc2l6ZTogXCJ3aW5kb3dzOldpbmRvd1N0YXJ0UmVzaXplXCIsXG5cdFx0V2luZG93VW5GdWxsc2NyZWVuOiBcIndpbmRvd3M6V2luZG93VW5GdWxsc2NyZWVuXCIsXG5cdFx0V2luZG93Wk9yZGVyQ2hhbmdlZDogXCJ3aW5kb3dzOldpbmRvd1pPcmRlckNoYW5nZWRcIixcblx0XHRXaW5kb3dNaW5pbWlzZTogXCJ3aW5kb3dzOldpbmRvd01pbmltaXNlXCIsXG5cdFx0V2luZG93VW5NaW5pbWlzZTogXCJ3aW5kb3dzOldpbmRvd1VuTWluaW1pc2VcIixcblx0XHRXaW5kb3dNYXhpbWlzZTogXCJ3aW5kb3dzOldpbmRvd01heGltaXNlXCIsXG5cdFx0V2luZG93VW5NYXhpbWlzZTogXCJ3aW5kb3dzOldpbmRvd1VuTWF4aW1pc2VcIixcblx0fSxcblx0TWFjOiB7XG5cdFx0QXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmU6IFwibWFjOkFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllc1wiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZTogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VFZmZlY3RpdmVBcHBlYXJhbmNlXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VJY29uOiBcIm1hYzpBcHBsaWNhdGlvbkRpZENoYW5nZUljb25cIixcblx0XHRBcHBsaWNhdGlvbkRpZENoYW5nZU9jY2x1c2lvblN0YXRlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZENoYW5nZU9jY2x1c2lvblN0YXRlXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOiBcIm1hYzpBcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNcIixcblx0XHRBcHBsaWNhdGlvbkRpZENoYW5nZVN0YXR1c0JhckZyYW1lOiBcIm1hYzpBcHBsaWNhdGlvbkRpZENoYW5nZVN0YXR1c0JhckZyYW1lXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VTdGF0dXNCYXJPcmllbnRhdGlvbjogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VTdGF0dXNCYXJPcmllbnRhdGlvblwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlVGhlbWU6IFwibWFjOkFwcGxpY2F0aW9uRGlkQ2hhbmdlVGhlbWVcIixcblx0XHRBcHBsaWNhdGlvbkRpZEZpbmlzaExhdW5jaGluZzogXCJtYWM6QXBwbGljYXRpb25EaWRGaW5pc2hMYXVuY2hpbmdcIixcblx0XHRBcHBsaWNhdGlvbkRpZEhpZGU6IFwibWFjOkFwcGxpY2F0aW9uRGlkSGlkZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkVW5oaWRlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZFVuaGlkZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkVXBkYXRlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZFVwZGF0ZVwiLFxuXHRcdEFwcGxpY2F0aW9uU2hvdWxkSGFuZGxlUmVvcGVuOiBcIm1hYzpBcHBsaWNhdGlvblNob3VsZEhhbmRsZVJlb3BlblwiLFxuXHRcdEFwcGxpY2F0aW9uV2lsbEJlY29tZUFjdGl2ZTogXCJtYWM6QXBwbGljYXRpb25XaWxsQmVjb21lQWN0aXZlXCIsXG5cdFx0QXBwbGljYXRpb25XaWxsRmluaXNoTGF1bmNoaW5nOiBcIm1hYzpBcHBsaWNhdGlvbldpbGxGaW5pc2hMYXVuY2hpbmdcIixcblx0XHRBcHBsaWNhdGlvbldpbGxIaWRlOiBcIm1hYzpBcHBsaWNhdGlvbldpbGxIaWRlXCIsXG5cdFx0QXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlOiBcIm1hYzpBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmVcIixcblx0XHRBcHBsaWNhdGlvbldpbGxUZXJtaW5hdGU6IFwibWFjOkFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZVwiLFxuXHRcdEFwcGxpY2F0aW9uV2lsbFVuaGlkZTogXCJtYWM6QXBwbGljYXRpb25XaWxsVW5oaWRlXCIsXG5cdFx0QXBwbGljYXRpb25XaWxsVXBkYXRlOiBcIm1hYzpBcHBsaWNhdGlvbldpbGxVcGRhdGVcIixcblx0XHRNZW51RGlkQWRkSXRlbTogXCJtYWM6TWVudURpZEFkZEl0ZW1cIixcblx0XHRNZW51RGlkQmVnaW5UcmFja2luZzogXCJtYWM6TWVudURpZEJlZ2luVHJhY2tpbmdcIixcblx0XHRNZW51RGlkQ2xvc2U6IFwibWFjOk1lbnVEaWRDbG9zZVwiLFxuXHRcdE1lbnVEaWREaXNwbGF5SXRlbTogXCJtYWM6TWVudURpZERpc3BsYXlJdGVtXCIsXG5cdFx0TWVudURpZEVuZFRyYWNraW5nOiBcIm1hYzpNZW51RGlkRW5kVHJhY2tpbmdcIixcblx0XHRNZW51RGlkSGlnaGxpZ2h0SXRlbTogXCJtYWM6TWVudURpZEhpZ2hsaWdodEl0ZW1cIixcblx0XHRNZW51RGlkT3BlbjogXCJtYWM6TWVudURpZE9wZW5cIixcblx0XHRNZW51RGlkUG9wVXA6IFwibWFjOk1lbnVEaWRQb3BVcFwiLFxuXHRcdE1lbnVEaWRSZW1vdmVJdGVtOiBcIm1hYzpNZW51RGlkUmVtb3ZlSXRlbVwiLFxuXHRcdE1lbnVEaWRTZW5kQWN0aW9uOiBcIm1hYzpNZW51RGlkU2VuZEFjdGlvblwiLFxuXHRcdE1lbnVEaWRTZW5kQWN0aW9uVG9JdGVtOiBcIm1hYzpNZW51RGlkU2VuZEFjdGlvblRvSXRlbVwiLFxuXHRcdE1lbnVEaWRVcGRhdGU6IFwibWFjOk1lbnVEaWRVcGRhdGVcIixcblx0XHRNZW51V2lsbEFkZEl0ZW06IFwibWFjOk1lbnVXaWxsQWRkSXRlbVwiLFxuXHRcdE1lbnVXaWxsQmVnaW5UcmFja2luZzogXCJtYWM6TWVudVdpbGxCZWdpblRyYWNraW5nXCIsXG5cdFx0TWVudVdpbGxEaXNwbGF5SXRlbTogXCJtYWM6TWVudVdpbGxEaXNwbGF5SXRlbVwiLFxuXHRcdE1lbnVXaWxsRW5kVHJhY2tpbmc6IFwibWFjOk1lbnVXaWxsRW5kVHJhY2tpbmdcIixcblx0XHRNZW51V2lsbEhpZ2hsaWdodEl0ZW06IFwibWFjOk1lbnVXaWxsSGlnaGxpZ2h0SXRlbVwiLFxuXHRcdE1lbnVXaWxsT3BlbjogXCJtYWM6TWVudVdpbGxPcGVuXCIsXG5cdFx0TWVudVdpbGxQb3BVcDogXCJtYWM6TWVudVdpbGxQb3BVcFwiLFxuXHRcdE1lbnVXaWxsUmVtb3ZlSXRlbTogXCJtYWM6TWVudVdpbGxSZW1vdmVJdGVtXCIsXG5cdFx0TWVudVdpbGxTZW5kQWN0aW9uOiBcIm1hYzpNZW51V2lsbFNlbmRBY3Rpb25cIixcblx0XHRNZW51V2lsbFNlbmRBY3Rpb25Ub0l0ZW06IFwibWFjOk1lbnVXaWxsU2VuZEFjdGlvblRvSXRlbVwiLFxuXHRcdE1lbnVXaWxsVXBkYXRlOiBcIm1hYzpNZW51V2lsbFVwZGF0ZVwiLFxuXHRcdFdlYlZpZXdEaWRDb21taXROYXZpZ2F0aW9uOiBcIm1hYzpXZWJWaWV3RGlkQ29tbWl0TmF2aWdhdGlvblwiLFxuXHRcdFdlYlZpZXdEaWRGaW5pc2hOYXZpZ2F0aW9uOiBcIm1hYzpXZWJWaWV3RGlkRmluaXNoTmF2aWdhdGlvblwiLFxuXHRcdFdlYlZpZXdEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb246IFwibWFjOldlYlZpZXdEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb25cIixcblx0XHRXZWJWaWV3RGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb246IFwibWFjOldlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvblwiLFxuXHRcdFdpbmRvd0RpZEJlY29tZUtleTogXCJtYWM6V2luZG93RGlkQmVjb21lS2V5XCIsXG5cdFx0V2luZG93RGlkQmVjb21lTWFpbjogXCJtYWM6V2luZG93RGlkQmVjb21lTWFpblwiLFxuXHRcdFdpbmRvd0RpZEJlZ2luU2hlZXQ6IFwibWFjOldpbmRvd0RpZEJlZ2luU2hlZXRcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VBbHBoYTogXCJtYWM6V2luZG93RGlkQ2hhbmdlQWxwaGFcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VCYWNraW5nTG9jYXRpb246IFwibWFjOldpbmRvd0RpZENoYW5nZUJhY2tpbmdMb2NhdGlvblwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllc1wiLFxuXHRcdFdpbmRvd0RpZENoYW5nZUNvbGxlY3Rpb25CZWhhdmlvcjogXCJtYWM6V2luZG93RGlkQ2hhbmdlQ29sbGVjdGlvbkJlaGF2aW9yXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZTogXCJtYWM6V2luZG93RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZU9jY2x1c2lvblN0YXRlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VPY2NsdXNpb25TdGF0ZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZU9yZGVyaW5nTW9kZTogXCJtYWM6V2luZG93RGlkQ2hhbmdlT3JkZXJpbmdNb2RlXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU2NyZWVuOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTY3JlZW5cIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU2NyZWVuUHJvZmlsZTogXCJtYWM6V2luZG93RGlkQ2hhbmdlU2NyZWVuUHJvZmlsZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNjcmVlblNwYWNlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTY3JlZW5TcGFjZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNjcmVlblNwYWNlUHJvcGVydGllczogXCJtYWM6V2luZG93RGlkQ2hhbmdlU2NyZWVuU3BhY2VQcm9wZXJ0aWVzXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU2hhcmluZ1R5cGU6IFwibWFjOldpbmRvd0RpZENoYW5nZVNoYXJpbmdUeXBlXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU3BhY2U6IFwibWFjOldpbmRvd0RpZENoYW5nZVNwYWNlXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU3BhY2VPcmRlcmluZ01vZGU6IFwibWFjOldpbmRvd0RpZENoYW5nZVNwYWNlT3JkZXJpbmdNb2RlXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlVGl0bGU6IFwibWFjOldpbmRvd0RpZENoYW5nZVRpdGxlXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlVG9vbGJhcjogXCJtYWM6V2luZG93RGlkQ2hhbmdlVG9vbGJhclwiLFxuXHRcdFdpbmRvd0RpZERlbWluaWF0dXJpemU6IFwibWFjOldpbmRvd0RpZERlbWluaWF0dXJpemVcIixcblx0XHRXaW5kb3dEaWRFbmRTaGVldDogXCJtYWM6V2luZG93RGlkRW5kU2hlZXRcIixcblx0XHRXaW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46IFwibWFjOldpbmRvd0RpZEVudGVyRnVsbFNjcmVlblwiLFxuXHRcdFdpbmRvd0RpZEVudGVyVmVyc2lvbkJyb3dzZXI6IFwibWFjOldpbmRvd0RpZEVudGVyVmVyc2lvbkJyb3dzZXJcIixcblx0XHRXaW5kb3dEaWRFeGl0RnVsbFNjcmVlbjogXCJtYWM6V2luZG93RGlkRXhpdEZ1bGxTY3JlZW5cIixcblx0XHRXaW5kb3dEaWRFeGl0VmVyc2lvbkJyb3dzZXI6IFwibWFjOldpbmRvd0RpZEV4aXRWZXJzaW9uQnJvd3NlclwiLFxuXHRcdFdpbmRvd0RpZEV4cG9zZTogXCJtYWM6V2luZG93RGlkRXhwb3NlXCIsXG5cdFx0V2luZG93RGlkRm9jdXM6IFwibWFjOldpbmRvd0RpZEZvY3VzXCIsXG5cdFx0V2luZG93RGlkTWluaWF0dXJpemU6IFwibWFjOldpbmRvd0RpZE1pbmlhdHVyaXplXCIsXG5cdFx0V2luZG93RGlkTW92ZTogXCJtYWM6V2luZG93RGlkTW92ZVwiLFxuXHRcdFdpbmRvd0RpZE9yZGVyT2ZmU2NyZWVuOiBcIm1hYzpXaW5kb3dEaWRPcmRlck9mZlNjcmVlblwiLFxuXHRcdFdpbmRvd0RpZE9yZGVyT25TY3JlZW46IFwibWFjOldpbmRvd0RpZE9yZGVyT25TY3JlZW5cIixcblx0XHRXaW5kb3dEaWRSZXNpZ25LZXk6IFwibWFjOldpbmRvd0RpZFJlc2lnbktleVwiLFxuXHRcdFdpbmRvd0RpZFJlc2lnbk1haW46IFwibWFjOldpbmRvd0RpZFJlc2lnbk1haW5cIixcblx0XHRXaW5kb3dEaWRSZXNpemU6IFwibWFjOldpbmRvd0RpZFJlc2l6ZVwiLFxuXHRcdFdpbmRvd0RpZFVwZGF0ZTogXCJtYWM6V2luZG93RGlkVXBkYXRlXCIsXG5cdFx0V2luZG93RGlkVXBkYXRlQWxwaGE6IFwibWFjOldpbmRvd0RpZFVwZGF0ZUFscGhhXCIsXG5cdFx0V2luZG93RGlkVXBkYXRlQ29sbGVjdGlvbkJlaGF2aW9yOiBcIm1hYzpXaW5kb3dEaWRVcGRhdGVDb2xsZWN0aW9uQmVoYXZpb3JcIixcblx0XHRXaW5kb3dEaWRVcGRhdGVDb2xsZWN0aW9uUHJvcGVydGllczogXCJtYWM6V2luZG93RGlkVXBkYXRlQ29sbGVjdGlvblByb3BlcnRpZXNcIixcblx0XHRXaW5kb3dEaWRVcGRhdGVTaGFkb3c6IFwibWFjOldpbmRvd0RpZFVwZGF0ZVNoYWRvd1wiLFxuXHRcdFdpbmRvd0RpZFVwZGF0ZVRpdGxlOiBcIm1hYzpXaW5kb3dEaWRVcGRhdGVUaXRsZVwiLFxuXHRcdFdpbmRvd0RpZFVwZGF0ZVRvb2xiYXI6IFwibWFjOldpbmRvd0RpZFVwZGF0ZVRvb2xiYXJcIixcblx0XHRXaW5kb3dEaWRab29tOiBcIm1hYzpXaW5kb3dEaWRab29tXCIsXG5cdFx0V2luZG93RmlsZURyYWdnaW5nRW50ZXJlZDogXCJtYWM6V2luZG93RmlsZURyYWdnaW5nRW50ZXJlZFwiLFxuXHRcdFdpbmRvd0ZpbGVEcmFnZ2luZ0V4aXRlZDogXCJtYWM6V2luZG93RmlsZURyYWdnaW5nRXhpdGVkXCIsXG5cdFx0V2luZG93RmlsZURyYWdnaW5nUGVyZm9ybWVkOiBcIm1hYzpXaW5kb3dGaWxlRHJhZ2dpbmdQZXJmb3JtZWRcIixcblx0XHRXaW5kb3dIaWRlOiBcIm1hYzpXaW5kb3dIaWRlXCIsXG5cdFx0V2luZG93TWF4aW1pc2U6IFwibWFjOldpbmRvd01heGltaXNlXCIsXG5cdFx0V2luZG93VW5NYXhpbWlzZTogXCJtYWM6V2luZG93VW5NYXhpbWlzZVwiLFxuXHRcdFdpbmRvd01pbmltaXNlOiBcIm1hYzpXaW5kb3dNaW5pbWlzZVwiLFxuXHRcdFdpbmRvd1VuTWluaW1pc2U6IFwibWFjOldpbmRvd1VuTWluaW1pc2VcIixcblx0XHRXaW5kb3dTaG91bGRDbG9zZTogXCJtYWM6V2luZG93U2hvdWxkQ2xvc2VcIixcblx0XHRXaW5kb3dTaG93OiBcIm1hYzpXaW5kb3dTaG93XCIsXG5cdFx0V2luZG93V2lsbEJlY29tZUtleTogXCJtYWM6V2luZG93V2lsbEJlY29tZUtleVwiLFxuXHRcdFdpbmRvd1dpbGxCZWNvbWVNYWluOiBcIm1hYzpXaW5kb3dXaWxsQmVjb21lTWFpblwiLFxuXHRcdFdpbmRvd1dpbGxCZWdpblNoZWV0OiBcIm1hYzpXaW5kb3dXaWxsQmVnaW5TaGVldFwiLFxuXHRcdFdpbmRvd1dpbGxDaGFuZ2VPcmRlcmluZ01vZGU6IFwibWFjOldpbmRvd1dpbGxDaGFuZ2VPcmRlcmluZ01vZGVcIixcblx0XHRXaW5kb3dXaWxsQ2xvc2U6IFwibWFjOldpbmRvd1dpbGxDbG9zZVwiLFxuXHRcdFdpbmRvd1dpbGxEZW1pbmlhdHVyaXplOiBcIm1hYzpXaW5kb3dXaWxsRGVtaW5pYXR1cml6ZVwiLFxuXHRcdFdpbmRvd1dpbGxFbnRlckZ1bGxTY3JlZW46IFwibWFjOldpbmRvd1dpbGxFbnRlckZ1bGxTY3JlZW5cIixcblx0XHRXaW5kb3dXaWxsRW50ZXJWZXJzaW9uQnJvd3NlcjogXCJtYWM6V2luZG93V2lsbEVudGVyVmVyc2lvbkJyb3dzZXJcIixcblx0XHRXaW5kb3dXaWxsRXhpdEZ1bGxTY3JlZW46IFwibWFjOldpbmRvd1dpbGxFeGl0RnVsbFNjcmVlblwiLFxuXHRcdFdpbmRvd1dpbGxFeGl0VmVyc2lvbkJyb3dzZXI6IFwibWFjOldpbmRvd1dpbGxFeGl0VmVyc2lvbkJyb3dzZXJcIixcblx0XHRXaW5kb3dXaWxsRm9jdXM6IFwibWFjOldpbmRvd1dpbGxGb2N1c1wiLFxuXHRcdFdpbmRvd1dpbGxNaW5pYXR1cml6ZTogXCJtYWM6V2luZG93V2lsbE1pbmlhdHVyaXplXCIsXG5cdFx0V2luZG93V2lsbE1vdmU6IFwibWFjOldpbmRvd1dpbGxNb3ZlXCIsXG5cdFx0V2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuOiBcIm1hYzpXaW5kb3dXaWxsT3JkZXJPZmZTY3JlZW5cIixcblx0XHRXaW5kb3dXaWxsT3JkZXJPblNjcmVlbjogXCJtYWM6V2luZG93V2lsbE9yZGVyT25TY3JlZW5cIixcblx0XHRXaW5kb3dXaWxsUmVzaWduTWFpbjogXCJtYWM6V2luZG93V2lsbFJlc2lnbk1haW5cIixcblx0XHRXaW5kb3dXaWxsUmVzaXplOiBcIm1hYzpXaW5kb3dXaWxsUmVzaXplXCIsXG5cdFx0V2luZG93V2lsbFVuZm9jdXM6IFwibWFjOldpbmRvd1dpbGxVbmZvY3VzXCIsXG5cdFx0V2luZG93V2lsbFVwZGF0ZTogXCJtYWM6V2luZG93V2lsbFVwZGF0ZVwiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVBbHBoYTogXCJtYWM6V2luZG93V2lsbFVwZGF0ZUFscGhhXCIsXG5cdFx0V2luZG93V2lsbFVwZGF0ZUNvbGxlY3Rpb25CZWhhdmlvcjogXCJtYWM6V2luZG93V2lsbFVwZGF0ZUNvbGxlY3Rpb25CZWhhdmlvclwiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVDb2xsZWN0aW9uUHJvcGVydGllczogXCJtYWM6V2luZG93V2lsbFVwZGF0ZUNvbGxlY3Rpb25Qcm9wZXJ0aWVzXCIsXG5cdFx0V2luZG93V2lsbFVwZGF0ZVNoYWRvdzogXCJtYWM6V2luZG93V2lsbFVwZGF0ZVNoYWRvd1wiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVUaXRsZTogXCJtYWM6V2luZG93V2lsbFVwZGF0ZVRpdGxlXCIsXG5cdFx0V2luZG93V2lsbFVwZGF0ZVRvb2xiYXI6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVUb29sYmFyXCIsXG5cdFx0V2luZG93V2lsbFVwZGF0ZVZpc2liaWxpdHk6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVWaXNpYmlsaXR5XCIsXG5cdFx0V2luZG93V2lsbFVzZVN0YW5kYXJkRnJhbWU6IFwibWFjOldpbmRvd1dpbGxVc2VTdGFuZGFyZEZyYW1lXCIsXG5cdFx0V2luZG93Wm9vbUluOiBcIm1hYzpXaW5kb3dab29tSW5cIixcblx0XHRXaW5kb3dab29tT3V0OiBcIm1hYzpXaW5kb3dab29tT3V0XCIsXG5cdFx0V2luZG93Wm9vbVJlc2V0OiBcIm1hYzpXaW5kb3dab29tUmVzZXRcIixcblx0fSxcblx0TGludXg6IHtcblx0XHRBcHBsaWNhdGlvblN0YXJ0dXA6IFwibGludXg6QXBwbGljYXRpb25TdGFydHVwXCIsXG5cdFx0U3lzdGVtVGhlbWVDaGFuZ2VkOiBcImxpbnV4OlN5c3RlbVRoZW1lQ2hhbmdlZFwiLFxuXHRcdFdpbmRvd0RlbGV0ZUV2ZW50OiBcImxpbnV4OldpbmRvd0RlbGV0ZUV2ZW50XCIsXG5cdFx0V2luZG93RGlkTW92ZTogXCJsaW51eDpXaW5kb3dEaWRNb3ZlXCIsXG5cdFx0V2luZG93RGlkUmVzaXplOiBcImxpbnV4OldpbmRvd0RpZFJlc2l6ZVwiLFxuXHRcdFdpbmRvd0ZvY3VzSW46IFwibGludXg6V2luZG93Rm9jdXNJblwiLFxuXHRcdFdpbmRvd0ZvY3VzT3V0OiBcImxpbnV4OldpbmRvd0ZvY3VzT3V0XCIsXG5cdFx0V2luZG93TG9hZENoYW5nZWQ6IFwibGludXg6V2luZG93TG9hZENoYW5nZWRcIixcblx0fSxcblx0Q29tbW9uOiB7XG5cdFx0QXBwbGljYXRpb25PcGVuZWRXaXRoRmlsZTogXCJjb21tb246QXBwbGljYXRpb25PcGVuZWRXaXRoRmlsZVwiLFxuXHRcdEFwcGxpY2F0aW9uU3RhcnRlZDogXCJjb21tb246QXBwbGljYXRpb25TdGFydGVkXCIsXG5cdFx0VGhlbWVDaGFuZ2VkOiBcImNvbW1vbjpUaGVtZUNoYW5nZWRcIixcblx0XHRXaW5kb3dDbG9zaW5nOiBcImNvbW1vbjpXaW5kb3dDbG9zaW5nXCIsXG5cdFx0V2luZG93RGlkTW92ZTogXCJjb21tb246V2luZG93RGlkTW92ZVwiLFxuXHRcdFdpbmRvd0RpZFJlc2l6ZTogXCJjb21tb246V2luZG93RGlkUmVzaXplXCIsXG5cdFx0V2luZG93RFBJQ2hhbmdlZDogXCJjb21tb246V2luZG93RFBJQ2hhbmdlZFwiLFxuXHRcdFdpbmRvd0ZpbGVzRHJvcHBlZDogXCJjb21tb246V2luZG93RmlsZXNEcm9wcGVkXCIsXG5cdFx0V2luZG93Rm9jdXM6IFwiY29tbW9uOldpbmRvd0ZvY3VzXCIsXG5cdFx0V2luZG93RnVsbHNjcmVlbjogXCJjb21tb246V2luZG93RnVsbHNjcmVlblwiLFxuXHRcdFdpbmRvd0hpZGU6IFwiY29tbW9uOldpbmRvd0hpZGVcIixcblx0XHRXaW5kb3dMb3N0Rm9jdXM6IFwiY29tbW9uOldpbmRvd0xvc3RGb2N1c1wiLFxuXHRcdFdpbmRvd01heGltaXNlOiBcImNvbW1vbjpXaW5kb3dNYXhpbWlzZVwiLFxuXHRcdFdpbmRvd01pbmltaXNlOiBcImNvbW1vbjpXaW5kb3dNaW5pbWlzZVwiLFxuXHRcdFdpbmRvd1Jlc3RvcmU6IFwiY29tbW9uOldpbmRvd1Jlc3RvcmVcIixcblx0XHRXaW5kb3dSdW50aW1lUmVhZHk6IFwiY29tbW9uOldpbmRvd1J1bnRpbWVSZWFkeVwiLFxuXHRcdFdpbmRvd1Nob3c6IFwiY29tbW9uOldpbmRvd1Nob3dcIixcblx0XHRXaW5kb3dVbkZ1bGxzY3JlZW46IFwiY29tbW9uOldpbmRvd1VuRnVsbHNjcmVlblwiLFxuXHRcdFdpbmRvd1VuTWF4aW1pc2U6IFwiY29tbW9uOldpbmRvd1VuTWF4aW1pc2VcIixcblx0XHRXaW5kb3dVbk1pbmltaXNlOiBcImNvbW1vbjpXaW5kb3dVbk1pbmltaXNlXCIsXG5cdFx0V2luZG93Wm9vbTogXCJjb21tb246V2luZG93Wm9vbVwiLFxuXHRcdFdpbmRvd1pvb21JbjogXCJjb21tb246V2luZG93Wm9vbUluXCIsXG5cdFx0V2luZG93Wm9vbU91dDogXCJjb21tb246V2luZG93Wm9vbU91dFwiLFxuXHRcdFdpbmRvd1pvb21SZXNldDogXCJjb21tb246V2luZG93Wm9vbVJlc2V0XCIsXG5cdH0sXG59O1xuIiwgIi8qXG4gXyAgICAgX18gICAgIF8gX19cbnwgfCAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKipcbiAqIExvZ3MgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIHdpdGggY3VzdG9tIGZvcm1hdHRpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWJ1Z0xvZyhtZXNzYWdlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc29sZS5sb2coXG4gICAgICAgICclYyB3YWlsczMgJWMgJyArIG1lc3NhZ2UgKyAnICcsXG4gICAgICAgICdiYWNrZ3JvdW5kOiAjYWEwMDAwOyBjb2xvcjogI2ZmZjsgYm9yZGVyLXJhZGl1czogM3B4IDBweCAwcHggM3B4OyBwYWRkaW5nOiAxcHg7IGZvbnQtc2l6ZTogMC43cmVtJyxcbiAgICAgICAgJ2JhY2tncm91bmQ6ICMwMDk5MDA7IGNvbG9yOiAjZmZmOyBib3JkZXItcmFkaXVzOiAwcHggM3B4IDNweCAwcHg7IHBhZGRpbmc6IDFweDsgZm9udC1zaXplOiAwLjdyZW0nXG4gICAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyByZW1vdmluZyBsaXN0ZW5lcnMgYnkgdHJpZ2dlcmluZyBhbiBBYm9ydFNpZ25hbFxuICogKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNzaWduYWwpXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkFib3J0TGlzdGVuZXJzKCkge1xuICAgIGlmICghRXZlbnRUYXJnZXQgfHwgIUFib3J0U2lnbmFsIHx8ICFBYm9ydENvbnRyb2xsZXIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IEV2ZW50VGFyZ2V0KCk7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsICgpID0+IHsgcmVzdWx0ID0gZmFsc2U7IH0sIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd0ZXN0JykpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqKlxuIFRoaXMgdGVjaG5pcXVlIGZvciBwcm9wZXIgbG9hZCBkZXRlY3Rpb24gaXMgdGFrZW4gZnJvbSBIVE1YOlxuXG4gQlNEIDItQ2xhdXNlIExpY2Vuc2VcblxuIENvcHlyaWdodCAoYykgMjAyMCwgQmlnIFNreSBTb2Z0d2FyZVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLFxuIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuICoqKi9cblxubGV0IGlzUmVhZHkgPSBmYWxzZTtcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiBpc1JlYWR5ID0gdHJ1ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuUmVhZHkoY2FsbGJhY2spIHtcbiAgICBpZiAoaXNSZWFkeSB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNhbGxiYWNrKTtcbiAgICB9XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cblxuLy8gSW1wb3J0IHNjcmVlbiBqc2RvYyBkZWZpbml0aW9uIGZyb20gLi9zY3JlZW5zLmpzXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3NjcmVlbnNcIikuU2NyZWVufSBTY3JlZW5cbiAqL1xuXG5cbi8qKlxuICogQSByZWNvcmQgZGVzY3JpYmluZyB0aGUgcG9zaXRpb24gb2YgYSB3aW5kb3cuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0gVGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHkgLSBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xuICovXG5cblxuLyoqXG4gKiBBIHJlY29yZCBkZXNjcmliaW5nIHRoZSBzaXplIG9mIGEgd2luZG93LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpemVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgd2luZG93XG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgd2luZG93XG4gKi9cblxuXG5pbXBvcnQge25ld1J1bnRpbWVDYWxsZXJXaXRoSUQsIG9iamVjdE5hbWVzfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5cbmNvbnN0IFBvc2l0aW9uTWV0aG9kICAgICAgICAgICAgICAgICAgICA9IDA7XG5jb25zdCBDZW50ZXJNZXRob2QgICAgICAgICAgICAgICAgICAgICAgPSAxO1xuY29uc3QgQ2xvc2VNZXRob2QgICAgICAgICAgICAgICAgICAgICAgID0gMjtcbmNvbnN0IERpc2FibGVTaXplQ29uc3RyYWludHNNZXRob2QgICAgICA9IDM7XG5jb25zdCBFbmFibGVTaXplQ29uc3RyYWludHNNZXRob2QgICAgICAgPSA0O1xuY29uc3QgRm9jdXNNZXRob2QgICAgICAgICAgICAgICAgICAgICAgID0gNTtcbmNvbnN0IEZvcmNlUmVsb2FkTWV0aG9kICAgICAgICAgICAgICAgICA9IDY7XG5jb25zdCBGdWxsc2NyZWVuTWV0aG9kICAgICAgICAgICAgICAgICAgPSA3O1xuY29uc3QgR2V0U2NyZWVuTWV0aG9kICAgICAgICAgICAgICAgICAgID0gODtcbmNvbnN0IEdldFpvb21NZXRob2QgICAgICAgICAgICAgICAgICAgICA9IDk7XG5jb25zdCBIZWlnaHRNZXRob2QgICAgICAgICAgICAgICAgICAgICAgPSAxMDtcbmNvbnN0IEhpZGVNZXRob2QgICAgICAgICAgICAgICAgICAgICAgICA9IDExO1xuY29uc3QgSXNGb2N1c2VkTWV0aG9kICAgICAgICAgICAgICAgICAgID0gMTI7XG5jb25zdCBJc0Z1bGxzY3JlZW5NZXRob2QgICAgICAgICAgICAgICAgPSAxMztcbmNvbnN0IElzTWF4aW1pc2VkTWV0aG9kICAgICAgICAgICAgICAgICA9IDE0O1xuY29uc3QgSXNNaW5pbWlzZWRNZXRob2QgICAgICAgICAgICAgICAgID0gMTU7XG5jb25zdCBNYXhpbWlzZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgPSAxNjtcbmNvbnN0IE1pbmltaXNlTWV0aG9kICAgICAgICAgICAgICAgICAgICA9IDE3O1xuY29uc3QgTmFtZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgID0gMTg7XG5jb25zdCBPcGVuRGV2VG9vbHNNZXRob2QgICAgICAgICAgICAgICAgPSAxOTtcbmNvbnN0IFJlbGF0aXZlUG9zaXRpb25NZXRob2QgICAgICAgICAgICA9IDIwO1xuY29uc3QgUmVsb2FkTWV0aG9kICAgICAgICAgICAgICAgICAgICAgID0gMjE7XG5jb25zdCBSZXNpemFibGVNZXRob2QgICAgICAgICAgICAgICAgICAgPSAyMjtcbmNvbnN0IFJlc3RvcmVNZXRob2QgICAgICAgICAgICAgICAgICAgICA9IDIzO1xuY29uc3QgU2V0UG9zaXRpb25NZXRob2QgICAgICAgICAgICAgICAgID0gMjQ7XG5jb25zdCBTZXRBbHdheXNPblRvcE1ldGhvZCAgICAgICAgICAgICAgPSAyNTtcbmNvbnN0IFNldEJhY2tncm91bmRDb2xvdXJNZXRob2QgICAgICAgICA9IDI2O1xuY29uc3QgU2V0RnJhbWVsZXNzTWV0aG9kICAgICAgICAgICAgICAgID0gMjc7XG5jb25zdCBTZXRGdWxsc2NyZWVuQnV0dG9uRW5hYmxlZE1ldGhvZCAgPSAyODtcbmNvbnN0IFNldE1heFNpemVNZXRob2QgICAgICAgICAgICAgICAgICA9IDI5O1xuY29uc3QgU2V0TWluU2l6ZU1ldGhvZCAgICAgICAgICAgICAgICAgID0gMzA7XG5jb25zdCBTZXRSZWxhdGl2ZVBvc2l0aW9uTWV0aG9kICAgICAgICAgPSAzMTtcbmNvbnN0IFNldFJlc2l6YWJsZU1ldGhvZCAgICAgICAgICAgICAgICA9IDMyO1xuY29uc3QgU2V0U2l6ZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgID0gMzM7XG5jb25zdCBTZXRUaXRsZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgPSAzNDtcbmNvbnN0IFNldFpvb21NZXRob2QgICAgICAgICAgICAgICAgICAgICA9IDM1O1xuY29uc3QgU2hvd01ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgID0gMzY7XG5jb25zdCBTaXplTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgPSAzNztcbmNvbnN0IFRvZ2dsZUZ1bGxzY3JlZW5NZXRob2QgICAgICAgICAgICA9IDM4O1xuY29uc3QgVG9nZ2xlTWF4aW1pc2VNZXRob2QgICAgICAgICAgICAgID0gMzk7XG5jb25zdCBVbkZ1bGxzY3JlZW5NZXRob2QgICAgICAgICAgICAgICAgPSA0MDtcbmNvbnN0IFVuTWF4aW1pc2VNZXRob2QgICAgICAgICAgICAgICAgICA9IDQxO1xuY29uc3QgVW5NaW5pbWlzZU1ldGhvZCAgICAgICAgICAgICAgICAgID0gNDI7XG5jb25zdCBXaWR0aE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgPSA0MztcbmNvbnN0IFpvb21NZXRob2QgICAgICAgICAgICAgICAgICAgICAgICA9IDQ0O1xuY29uc3QgWm9vbUluTWV0aG9kICAgICAgICAgICAgICAgICAgICAgID0gNDU7XG5jb25zdCBab29tT3V0TWV0aG9kICAgICAgICAgICAgICAgICAgICAgPSA0NjtcbmNvbnN0IFpvb21SZXNldE1ldGhvZCAgICAgICAgICAgICAgICAgICA9IDQ3O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNhbGxlciA9IFN5bWJvbCgpO1xuXG5leHBvcnQgY2xhc3MgV2luZG93IHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXNlcyBhIHdpbmRvdyBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhcmdldCB3aW5kb3cuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSA9ICcnKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAbmFtZSB7QGxpbmsgY2FsbGVyfVxuICAgICAgICAgKiBAdHlwZSB7KC4uLmFyZ3M6IGFueVtdKSA9PiBhbnl9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzW2NhbGxlcl0gPSBuZXdSdW50aW1lQ2FsbGVyV2l0aElEKG9iamVjdE5hbWVzLldpbmRvdywgbmFtZSlcblxuICAgICAgICAvLyBiaW5kIGluc3RhbmNlIG1ldGhvZCB0byBtYWtlIHRoZW0gZWFzaWx5IHVzYWJsZSBpbiBldmVudCBoYW5kbGVyc1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhXaW5kb3cucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1ldGhvZCAhPT0gXCJjb25zdHJ1Y3RvclwiXG4gICAgICAgICAgICAgICAgJiYgdHlwZW9mIHRoaXNbbWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzW21ldGhvZF0gPSB0aGlzW21ldGhvZF0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNwZWNpZmllZCB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd2luZG93IHRvIGdldC5cbiAgICAgKiBAcmV0dXJuIHtXaW5kb3d9IC0gVGhlIGNvcnJlc3BvbmRpbmcgd2luZG93IG9iamVjdC5cbiAgICAgKi9cbiAgICBHZXQobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFdpbmRvdyhuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UG9zaXRpb24+fSAtIFRoZSBjdXJyZW50IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgUG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oUG9zaXRpb25NZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENlbnRlcnMgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgQ2VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKENlbnRlck1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBDbG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShDbG9zZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgbWluL21heCBzaXplIGNvbnN0cmFpbnRzLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgRGlzYWJsZVNpemVDb25zdHJhaW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShEaXNhYmxlU2l6ZUNvbnN0cmFpbnRzTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG1pbi9tYXggc2l6ZSBjb25zdHJhaW50cy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIEVuYWJsZVNpemVDb25zdHJhaW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShFbmFibGVTaXplQ29uc3RyYWludHNNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIEZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKEZvY3VzTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIHdpbmRvdyB0byByZWxvYWQgdGhlIHBhZ2UgYXNzZXRzLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgRm9yY2VSZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oRm9yY2VSZWxvYWRNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvYy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIEZ1bGxzY3JlZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oRnVsbHNjcmVlbk1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2NyZWVuIHRoYXQgdGhlIHdpbmRvdyBpcyBvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFNjcmVlbj59IC0gVGhlIHNjcmVlbiB0aGUgd2luZG93IGlzIGN1cnJlbnRseSBvblxuICAgICAqL1xuICAgIEdldFNjcmVlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShHZXRTY3JlZW5NZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8bnVtYmVyPn0gLSBUaGUgY3VycmVudCB6b29tIGxldmVsXG4gICAgICovXG4gICAgR2V0Wm9vbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShHZXRab29tTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPG51bWJlcj59IC0gVGhlIGN1cnJlbnQgaGVpZ2h0IG9mIHRoZSB3aW5kb3dcbiAgICAgKi9cbiAgICBIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oSGVpZ2h0TWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgSGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShIaWRlTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpbmRvdyBpcyBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgd2luZG93IGlzIGN1cnJlbnRseSBmb2N1c2VkXG4gICAgICovXG4gICAgSXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKElzRm9jdXNlZE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgZnVsbHNjcmVlblxuICAgICAqL1xuICAgIElzRnVsbHNjcmVlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShJc0Z1bGxzY3JlZW5NZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIG1heGltaXNlZC5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgbWF4aW1pc2VkXG4gICAgICovXG4gICAgSXNNYXhpbWlzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oSXNNYXhpbWlzZWRNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIG1pbmltaXNlZC5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgbWluaW1pc2VkXG4gICAgICovXG4gICAgSXNNaW5pbWlzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oSXNNaW5pbWlzZWRNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1heGltaXNlcyB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgTWF4aW1pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oTWF4aW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1pbmltaXNlcyB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgTWluaW1pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oTWluaW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gVGhlIG5hbWUgb2YgdGhlIHdpbmRvd1xuICAgICAqL1xuICAgIE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oTmFtZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIGRldmVsb3BtZW50IHRvb2xzIHBhbmUuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBPcGVuRGV2VG9vbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oT3BlbkRldlRvb2xzTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgd2luZG93IHRvIHRoZSBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxQb3NpdGlvbj59IC0gVGhlIGN1cnJlbnQgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xuICAgICAqL1xuICAgIFJlbGF0aXZlUG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oUmVsYXRpdmVQb3NpdGlvbk1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsb2FkcyB0aGUgcGFnZSBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBSZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oUmVsb2FkTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpbmRvdyBpcyByZXNpemFibGUuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHJlc2l6YWJsZVxuICAgICAqL1xuICAgIFJlc2l6YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShSZXNpemFibGVNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIHRoZSB3aW5kb3cgdG8gaXRzIHByZXZpb3VzIHN0YXRlIGlmIGl0IHdhcyBwcmV2aW91c2x5IG1pbmltaXNlZCwgbWF4aW1pc2VkIG9yIGZ1bGxzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBSZXN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFJlc3RvcmVNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgZGVzaXJlZCBob3Jpem9udGFsIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBkZXNpcmVkIHZlcnRpY2FsIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFNldFBvc2l0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShTZXRQb3NpdGlvbk1ldGhvZCwgeyB4LCB5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHdpbmRvdyB0byBiZSBhbHdheXMgb24gdG9wLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWx3YXlzT25Ub3AgLSBXaGV0aGVyIHRoZSB3aW5kb3cgc2hvdWxkIHN0YXkgb24gdG9wXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBTZXRBbHdheXNPblRvcChhbHdheXNPblRvcCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFNldEFsd2F5c09uVG9wTWV0aG9kLCB7IGFsd2F5c09uVG9wIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3VyIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgZGVzaXJlZCByZWQgY29tcG9uZW50IG9mIHRoZSB3aW5kb3cgYmFja2dyb3VuZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGRlc2lyZWQgZ3JlZW4gY29tcG9uZW50IG9mIHRoZSB3aW5kb3cgYmFja2dyb3VuZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGRlc2lyZWQgYmx1ZSBjb21wb25lbnQgb2YgdGhlIHdpbmRvdyBiYWNrZ3JvdW5kXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGEgLSBUaGUgZGVzaXJlZCBhbHBoYSBjb21wb25lbnQgb2YgdGhlIHdpbmRvdyBiYWNrZ3JvdW5kXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBTZXRCYWNrZ3JvdW5kQ29sb3VyKHIsIGcsIGIsIGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShTZXRCYWNrZ3JvdW5kQ29sb3VyTWV0aG9kLCB7IHIsIGcsIGIsIGEgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgd2luZG93IGZyYW1lIGFuZCB0aXRsZSBiYXIuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmcmFtZWxlc3MgLSBXaGV0aGVyIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZyYW1lbGVzc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0RnJhbWVsZXNzKGZyYW1lbGVzcykge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFNldEZyYW1lbGVzc01ldGhvZCwgeyBmcmFtZWxlc3MgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHN5c3RlbSBmdWxsc2NyZWVuIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHRoZSBmdWxsc2NyZWVuIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZFxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0RnVsbHNjcmVlbkJ1dHRvbkVuYWJsZWQoZW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFNldEZ1bGxzY3JlZW5CdXR0b25FbmFibGVkTWV0aG9kLCB7IGVuYWJsZWQgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGRlc2lyZWQgbWF4aW11bSB3aWR0aCBvZiB0aGUgd2luZG93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCAtIFRoZSBkZXNpcmVkIG1heGltdW0gaGVpZ2h0IG9mIHRoZSB3aW5kb3dcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFNldE1heFNpemUod2lkdGgsIGhlaWdodCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFNldE1heFNpemVNZXRob2QsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggLSBUaGUgZGVzaXJlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSB3aW5kb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gVGhlIGRlc2lyZWQgbWluaW11bSBoZWlnaHQgb2YgdGhlIHdpbmRvd1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0TWluU2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oU2V0TWluU2l6ZU1ldGhvZCwgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cgdG8gdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBkZXNpcmVkIGhvcml6b250YWwgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIGRlc2lyZWQgdmVydGljYWwgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0UmVsYXRpdmVQb3NpdGlvbih4LCB5KSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oU2V0UmVsYXRpdmVQb3NpdGlvbk1ldGhvZCwgeyB4LCB5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGUgd2luZG93IGlzIHJlc2l6YWJsZS5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlc2l6YWJsZSAtIFdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgYmUgcmVzaXphYmxlXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBTZXRSZXNpemFibGUocmVzaXphYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oU2V0UmVzaXphYmxlTWV0aG9kLCB7IHJlc2l6YWJsZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzaXplIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gVGhlIGRlc2lyZWQgd2lkdGggb2YgdGhlIHdpbmRvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgZGVzaXJlZCBoZWlnaHQgb2YgdGhlIHdpbmRvd1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oU2V0U2l6ZU1ldGhvZCwgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gVGhlIGRlc2lyZWQgdGl0bGUgb2YgdGhlIHdpbmRvd1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgU2V0VGl0bGUodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShTZXRUaXRsZU1ldGhvZCwgeyB0aXRsZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB6b29tIGxldmVsIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHpvb20gLSBUaGUgZGVzaXJlZCB6b29tIGxldmVsXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBTZXRab29tKHpvb20pIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShTZXRab29tTWV0aG9kLCB7IHpvb20gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFNob3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oU2hvd01ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8U2l6ZT59IC0gVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd2luZG93XG4gICAgICovXG4gICAgU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShTaXplTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBmdWxsc2NyZWVuIGFuZCBub3JtYWwuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBUb2dnbGVGdWxsc2NyZWVuKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFRvZ2dsZUZ1bGxzY3JlZW5NZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG1heGltaXNlZCBhbmQgbm9ybWFsLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgVG9nZ2xlTWF4aW1pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oVG9nZ2xlTWF4aW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuLWZ1bGxzY3JlZW5zIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBVbkZ1bGxzY3JlZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oVW5GdWxsc2NyZWVuTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbi1tYXhpbWlzZXMgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFVuTWF4aW1pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oVW5NYXhpbWlzZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW4tbWluaW1pc2VzIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBVbk1pbmltaXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJdKFVuTWluaW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxudW1iZXI+fSAtIFRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSB3aW5kb3dcbiAgICAgKi9cbiAgICBXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyXShXaWR0aE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWm9vbXMgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFpvb20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oWm9vbU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVhc2VzIHRoZSB6b29tIGxldmVsIG9mIHRoZSB3ZWJ2aWV3IGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBab29tSW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oWm9vbUluTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZWFzZXMgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIHdlYnZpZXcgY29udGVudC5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIFpvb21PdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oWm9vbU91dE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSB6b29tIGxldmVsIG9mIHRoZSB3ZWJ2aWV3IGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBab29tUmVzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlcl0oWm9vbVJlc2V0TWV0aG9kKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIHdpbmRvdyB3aXRoaW4gd2hpY2ggdGhlIHNjcmlwdCBpcyBydW5uaW5nLlxuICpcbiAqIEB0eXBlIHtXaW5kb3d9XG4gKi9cbmNvbnN0IHRoaXNXaW5kb3cgPSBuZXcgV2luZG93KCcnKTtcblxuZXhwb3J0IGRlZmF1bHQgdGhpc1dpbmRvdztcbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0ICogYXMgUnVudGltZSBmcm9tIFwiLi4vQHdhaWxzaW8vcnVudGltZS9zcmNcIjtcblxuLy8gTk9URTogdGhlIGZvbGxvd2luZyBtZXRob2RzIE1VU1QgYmUgaW1wb3J0ZWQgZXhwbGljaXRseSBiZWNhdXNlIG9mIGhvdyBlc2J1aWxkIGluamVjdGlvbiB3b3Jrc1xuaW1wb3J0IHtFbmFibGUgYXMgRW5hYmxlV01MfSBmcm9tIFwiLi4vQHdhaWxzaW8vcnVudGltZS9zcmMvd21sXCI7XG5pbXBvcnQge2RlYnVnTG9nfSBmcm9tIFwiLi4vQHdhaWxzaW8vcnVudGltZS9zcmMvdXRpbHNcIjtcblxud2luZG93LndhaWxzID0gUnVudGltZTtcbkVuYWJsZVdNTCgpO1xuXG5pZiAoREVCVUcpIHtcbiAgICBkZWJ1Z0xvZyhcIldhaWxzIFJ1bnRpbWUgTG9hZGVkXCIpXG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cblxuaW1wb3J0IHtuZXdSdW50aW1lQ2FsbGVyV2l0aElELCBvYmplY3ROYW1lc30gZnJvbSBcIi4vcnVudGltZVwiO1xubGV0IGNhbGwgPSBuZXdSdW50aW1lQ2FsbGVyV2l0aElEKG9iamVjdE5hbWVzLlN5c3RlbSwgJycpO1xuY29uc3Qgc3lzdGVtSXNEYXJrTW9kZSA9IDA7XG5jb25zdCBlbnZpcm9ubWVudCA9IDE7XG5cbmNvbnN0IF9pbnZva2UgPSAoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGlmKHdpbmRvdz8uY2hyb21lPy53ZWJ2aWV3KSB7XG4gICAgICAgICAgICByZXR1cm4gKG1zZykgPT4gd2luZG93LmNocm9tZS53ZWJ2aWV3LnBvc3RNZXNzYWdlKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYod2luZG93Py53ZWJraXQ/Lm1lc3NhZ2VIYW5kbGVycz8uZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIHJldHVybiAobXNnKSA9PiB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5leHRlcm5hbC5wb3N0TWVzc2FnZShtc2cpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignXFxuJWNcdTI2QTBcdUZFMEYgQnJvd3NlciBFbnZpcm9ubWVudCBEZXRlY3RlZCAlY1xcblxcbiVjT25seSBVSSBwcmV2aWV3cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyLiBGb3IgZnVsbCBmdW5jdGlvbmFsaXR5LCBwbGVhc2UgcnVuIHRoZSBhcHBsaWNhdGlvbiBpbiBkZXNrdG9wIG1vZGUuXFxuTW9yZSBpbmZvcm1hdGlvbiBhdDogaHR0cHM6Ly92My53YWlscy5pby9sZWFybi9idWlsZC8jdXNpbmctYS1icm93c2VyLWZvci1kZXZlbG9wbWVudFxcbicsXG4gICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmZmZmZjsgY29sb3I6ICMwMDAwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyBwYWRkaW5nOiA0cHggOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDAwMDA7JyxcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsnLFxuICAgICAgICAgICAgJ2NvbG9yOiAjZmZmZmZmOyBmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBib2xkOycpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn0pKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2UobXNnKSB7XG4gICAgaWYgKCFfaW52b2tlKSByZXR1cm47XG4gICAgcmV0dXJuIF9pbnZva2UobXNnKTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGRhcmsgbW9kZSBzdGF0dXMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgc3lzdGVtIGlzIGluIGRhcmsgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzRGFya01vZGUoKSB7XG4gICAgcmV0dXJuIGNhbGwoc3lzdGVtSXNEYXJrTW9kZSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBhcHBsaWNhdGlvbiBmcm9tIHRoZSBzZXJ2ZXIuXG4gKlxuICogQGFzeW5jXG4gKiBAZnVuY3Rpb24gQ2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2FwYWJpbGl0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FwYWJpbGl0aWVzKCkge1xuICAgIGxldCByZXNwb25zZSA9IGZldGNoKFwiL3dhaWxzL2NhcGFiaWxpdGllc1wiKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9TSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IEJyYW5kaW5nIC0gVGhlIGJyYW5kaW5nIG9mIHRoZSBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJRCAtIFRoZSBJRCBvZiB0aGUgT1MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWZXJzaW9uIC0gVGhlIHZlcnNpb24gb2YgdGhlIE9TLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRW52aXJvbm1lbnRJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gRGVidWcgLSBUcnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGRlYnVnIG1vZGUsIG90aGVyd2lzZSBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBPUyAtIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIHVzZS5cbiAqIEBwcm9wZXJ0eSB7T1NJbmZvfSBPU0luZm8gLSBEZXRhaWxzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFBsYXRmb3JtSW5mbyAtIEFkZGl0aW9uYWwgcGxhdGZvcm0gaW5mb3JtYXRpb24uXG4gKi9cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIFJldHJpZXZlcyBlbnZpcm9ubWVudCBkZXRhaWxzLlxuICogQHJldHVybnMge1Byb21pc2U8RW52aXJvbm1lbnRJbmZvPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyBPUyBhbmQgc3lzdGVtIGFyY2hpdGVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xuICAgIHJldHVybiBjYWxsKGVudmlyb25tZW50KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBpcyBXaW5kb3dzLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgV2luZG93cywgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNXaW5kb3dzKCkge1xuICAgIHJldHVybiB3aW5kb3cuX3dhaWxzLmVudmlyb25tZW50Lk9TID09PSBcIndpbmRvd3NcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBpcyBMaW51eC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0gaXMgTGludXgsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzTGludXgoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuT1MgPT09IFwibGludXhcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtYWNPUyBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBtYWNPUywgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNNYWMoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuT1MgPT09IFwiZGFyd2luXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGFyY2hpdGVjdHVyZSBpcyBBTUQ2NCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNBTUQ2NCgpIHtcbiAgICByZXR1cm4gd2luZG93Ll93YWlscy5lbnZpcm9ubWVudC5BcmNoID09PSBcImFtZDY0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBpcyBBUk0uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGlzIEFSTSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNBUk0oKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuQXJjaCA9PT0gXCJhcm1cIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgQVJNNjQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgQVJNNjQgYXJjaGl0ZWN0dXJlLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzQVJNNjQoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuQXJjaCA9PT0gXCJhcm02NFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSXNEZWJ1ZygpIHtcbiAgICByZXR1cm4gd2luZG93Ll93YWlscy5lbnZpcm9ubWVudC5EZWJ1ZyA9PT0gdHJ1ZTtcbn1cblxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cbmltcG9ydCB7bmV3UnVudGltZUNhbGxlcldpdGhJRCwgb2JqZWN0TmFtZXN9IGZyb20gXCIuL3J1bnRpbWVcIjtcbmltcG9ydCB7SXNEZWJ1Z30gZnJvbSBcIi4vc3lzdGVtXCI7XG5cbi8vIHNldHVwXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBjb250ZXh0TWVudUhhbmRsZXIpO1xuXG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3ROYW1lcy5Db250ZXh0TWVudSwgJycpO1xuY29uc3QgQ29udGV4dE1lbnVPcGVuID0gMDtcblxuZnVuY3Rpb24gb3BlbkNvbnRleHRNZW51KGlkLCB4LCB5LCBkYXRhKSB7XG4gICAgdm9pZCBjYWxsKENvbnRleHRNZW51T3Blbiwge2lkLCB4LCB5LCBkYXRhfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRleHRNZW51SGFuZGxlcihldmVudCkge1xuICAgIC8vIENoZWNrIGZvciBjdXN0b20gY29udGV4dCBtZW51XG4gICAgbGV0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgbGV0IGN1c3RvbUNvbnRleHRNZW51ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tY3VzdG9tLWNvbnRleHRtZW51XCIpO1xuICAgIGN1c3RvbUNvbnRleHRNZW51ID0gY3VzdG9tQ29udGV4dE1lbnUgPyBjdXN0b21Db250ZXh0TWVudS50cmltKCkgOiBcIlwiO1xuICAgIGlmIChjdXN0b21Db250ZXh0TWVudSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgY3VzdG9tQ29udGV4dE1lbnVEYXRhID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tY3VzdG9tLWNvbnRleHRtZW51LWRhdGFcIik7XG4gICAgICAgIG9wZW5Db250ZXh0TWVudShjdXN0b21Db250ZXh0TWVudSwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgY3VzdG9tQ29udGV4dE1lbnVEYXRhKTtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudCk7XG59XG5cblxuLypcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogYXV0bzsgKGRlZmF1bHQpIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWUgT1IgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBPUiBlbGVtZW50IGlzIGlucHV0IG9yIHRleHRhcmVhXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IHNob3c7IHdpbGwgYWx3YXlzIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGhpZGU7IHdpbGwgYWx3YXlzIGhpZGUgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG5cblRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgbGlrZSBub3JtYWwgQ1NTIHJ1bGVzLCBzbyBuZXN0aW5nIHdvcmtzIGFzIGV4cGVjdGVkXG4qL1xuZnVuY3Rpb24gcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudCkge1xuXG4gICAgLy8gRGVidWcgYnVpbGRzIGFsd2F5cyBzaG93IHRoZSBtZW51XG4gICAgaWYgKElzRGVidWcoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBkZWZhdWx0IGNvbnRleHQgbWVudVxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIGNvbnN0IGRlZmF1bHRDb250ZXh0TWVudUFjdGlvbiA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tZGVmYXVsdC1jb250ZXh0bWVudVwiKS50cmltKCk7XG4gICAgc3dpdGNoIChkZWZhdWx0Q29udGV4dE1lbnVBY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcInNob3dcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcImhpZGVcIjpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRleHQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NlbGVjdGlvbiA9IChzZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgaWYgKGhhc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSByZWN0c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGFnbmFtZSBpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gXCJJTlBVVFwiIHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc1NlbGVjdGlvbiB8fCAoIWVsZW1lbnQucmVhZE9ubHkgJiYgIWVsZW1lbnQuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhpZGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgZmxhZyBtYXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVN0cmluZyAtIFRoZSBrZXkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZvci5cbiAqIEByZXR1cm4geyp9IC0gVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdldEZsYWcoa2V5U3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZmxhZ3Nba2V5U3RyaW5nXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byByZXRyaWV2ZSBmbGFnICdcIiArIGtleVN0cmluZyArIFwiJzogXCIgKyBlKTtcbiAgICB9XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5pbXBvcnQge2ludm9rZSwgSXNXaW5kb3dzfSBmcm9tIFwiLi9zeXN0ZW1cIjtcbmltcG9ydCB7R2V0RmxhZ30gZnJvbSBcIi4vZmxhZ3NcIjtcblxuLy8gU2V0dXBcbmxldCBzaG91bGREcmFnID0gZmFsc2U7XG5sZXQgcmVzaXphYmxlID0gZmFsc2U7XG5sZXQgcmVzaXplRWRnZSA9IG51bGw7XG5sZXQgZGVmYXVsdEN1cnNvciA9IFwiYXV0b1wiO1xuXG53aW5kb3cuX3dhaWxzID0gd2luZG93Ll93YWlscyB8fCB7fTtcblxud2luZG93Ll93YWlscy5zZXRSZXNpemFibGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc2l6YWJsZSA9IHZhbHVlO1xufTtcblxud2luZG93Ll93YWlscy5lbmREcmFnID0gZnVuY3Rpb24oKSB7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gICAgc2hvdWxkRHJhZyA9IGZhbHNlO1xufTtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG5cblxuZnVuY3Rpb24gZHJhZ1Rlc3QoZSkge1xuICAgIGxldCB2YWwgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLnRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0td2FpbHMtZHJhZ2dhYmxlXCIpO1xuICAgIGxldCBtb3VzZVByZXNzZWQgPSBlLmJ1dHRvbnMgIT09IHVuZGVmaW5lZCA/IGUuYnV0dG9ucyA6IGUud2hpY2g7XG4gICAgaWYgKCF2YWwgfHwgdmFsID09PSBcIlwiIHx8IHZhbC50cmltKCkgIT09IFwiZHJhZ1wiIHx8IG1vdXNlUHJlc3NlZCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBlLmRldGFpbCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuXG4gICAgLy8gQ2hlY2sgZm9yIHJlc2l6aW5nXG4gICAgaWYgKHJlc2l6ZUVkZ2UpIHtcbiAgICAgICAgaW52b2tlKFwid2FpbHM6cmVzaXplOlwiICsgcmVzaXplRWRnZSk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkcmFnVGVzdChlKSkge1xuICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXG4gICAgICAgIGlmIChlLm9mZnNldFggPiBlLnRhcmdldC5jbGllbnRXaWR0aCB8fCBlLm9mZnNldFkgPiBlLnRhcmdldC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGREcmFnID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGREcmFnID0gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvbk1vdXNlVXAoKSB7XG4gICAgc2hvdWxkRHJhZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCBkZWZhdWx0Q3Vyc29yO1xuICAgIHJlc2l6ZUVkZ2UgPSBjdXJzb3I7XG59XG5cbmZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcbiAgICBpZiAoc2hvdWxkRHJhZykge1xuICAgICAgICBzaG91bGREcmFnID0gZmFsc2U7XG4gICAgICAgIGxldCBtb3VzZVByZXNzZWQgPSBlLmJ1dHRvbnMgIT09IHVuZGVmaW5lZCA/IGUuYnV0dG9ucyA6IGUud2hpY2g7XG4gICAgICAgIGlmIChtb3VzZVByZXNzZWQgPiAwKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ3YWlsczpkcmFnXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghcmVzaXphYmxlIHx8ICFJc1dpbmRvd3MoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkZWZhdWx0Q3Vyc29yID09IG51bGwpIHtcbiAgICAgICAgZGVmYXVsdEN1cnNvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I7XG4gICAgfVxuICAgIGxldCByZXNpemVIYW5kbGVIZWlnaHQgPSBHZXRGbGFnKFwic3lzdGVtLnJlc2l6ZUhhbmRsZUhlaWdodFwiKSB8fCA1O1xuICAgIGxldCByZXNpemVIYW5kbGVXaWR0aCA9IEdldEZsYWcoXCJzeXN0ZW0ucmVzaXplSGFuZGxlV2lkdGhcIikgfHwgNTtcblxuICAgIC8vIEV4dHJhIHBpeGVscyBmb3IgdGhlIGNvcm5lciBhcmVhc1xuICAgIGxldCBjb3JuZXJFeHRyYSA9IEdldEZsYWcoXCJyZXNpemVDb3JuZXJFeHRyYVwiKSB8fCAxMDtcblxuICAgIGxldCByaWdodEJvcmRlciA9IHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgcmVzaXplSGFuZGxlV2lkdGg7XG4gICAgbGV0IGxlZnRCb3JkZXIgPSBlLmNsaWVudFggPCByZXNpemVIYW5kbGVXaWR0aDtcbiAgICBsZXQgdG9wQm9yZGVyID0gZS5jbGllbnRZIDwgcmVzaXplSGFuZGxlSGVpZ2h0O1xuICAgIGxldCBib3R0b21Cb3JkZXIgPSB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCByZXNpemVIYW5kbGVIZWlnaHQ7XG5cbiAgICAvLyBBZGp1c3QgZm9yIGNvcm5lcnNcbiAgICBsZXQgcmlnaHRDb3JuZXIgPSB3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IChyZXNpemVIYW5kbGVXaWR0aCArIGNvcm5lckV4dHJhKTtcbiAgICBsZXQgbGVmdENvcm5lciA9IGUuY2xpZW50WCA8IChyZXNpemVIYW5kbGVXaWR0aCArIGNvcm5lckV4dHJhKTtcbiAgICBsZXQgdG9wQ29ybmVyID0gZS5jbGllbnRZIDwgKHJlc2l6ZUhhbmRsZUhlaWdodCArIGNvcm5lckV4dHJhKTtcbiAgICBsZXQgYm90dG9tQ29ybmVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgKHJlc2l6ZUhhbmRsZUhlaWdodCArIGNvcm5lckV4dHJhKTtcblxuICAgIC8vIElmIHdlIGFyZW4ndCBvbiBhbiBlZGdlLCBidXQgd2VyZSwgcmVzZXQgdGhlIGN1cnNvciB0byBkZWZhdWx0XG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgcmVzaXplRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFJlc2l6ZSgpO1xuICAgIH1cbiAgICAvLyBBZGp1c3RlZCBmb3IgY29ybmVyIGFyZWFzXG4gICAgZWxzZSBpZiAocmlnaHRDb3JuZXIgJiYgYm90dG9tQ29ybmVyKSBzZXRSZXNpemUoXCJzZS1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAobGVmdENvcm5lciAmJiBib3R0b21Db3JuZXIpIHNldFJlc2l6ZShcInN3LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChsZWZ0Q29ybmVyICYmIHRvcENvcm5lcikgc2V0UmVzaXplKFwibnctcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKHRvcENvcm5lciAmJiByaWdodENvcm5lcikgc2V0UmVzaXplKFwibmUtcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIpIHNldFJlc2l6ZShcInctcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKHRvcEJvcmRlcikgc2V0UmVzaXplKFwibi1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAoYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChyaWdodEJvcmRlcikgc2V0UmVzaXplKFwiZS1yZXNpemVcIik7XG59IiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cbmltcG9ydCB7IG5ld1J1bnRpbWVDYWxsZXJXaXRoSUQsIG9iamVjdE5hbWVzIH0gZnJvbSBcIi4vcnVudGltZVwiO1xuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXJXaXRoSUQob2JqZWN0TmFtZXMuQXBwbGljYXRpb24sICcnKTtcblxuY29uc3QgSGlkZU1ldGhvZCA9IDA7XG5jb25zdCBTaG93TWV0aG9kID0gMTtcbmNvbnN0IFF1aXRNZXRob2QgPSAyO1xuXG4vKipcbiAqIEhpZGVzIGEgY2VydGFpbiBtZXRob2QgYnkgY2FsbGluZyB0aGUgSGlkZU1ldGhvZCBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEhpZGUoKSB7XG4gICAgcmV0dXJuIGNhbGwoSGlkZU1ldGhvZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgdGhlIFNob3dNZXRob2QgYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gU2hvdygpIHtcbiAgICByZXR1cm4gY2FsbChTaG93TWV0aG9kKTtcbn1cblxuLyoqXG4gKiBDYWxscyB0aGUgUXVpdE1ldGhvZCB0byB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKSB7XG4gICAgcmV0dXJuIGNhbGwoUXVpdE1ldGhvZCk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cbmltcG9ydCB7IG5ld1J1bnRpbWVDYWxsZXJXaXRoSUQsIG9iamVjdE5hbWVzIH0gZnJvbSBcIi4vcnVudGltZVwiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQuanMnO1xuXG4vLyBTZXR1cFxud2luZG93Ll93YWlscyA9IHdpbmRvdy5fd2FpbHMgfHwge307XG53aW5kb3cuX3dhaWxzLmNhbGxSZXN1bHRIYW5kbGVyID0gcmVzdWx0SGFuZGxlcjtcbndpbmRvdy5fd2FpbHMuY2FsbEVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcblxuXG5jb25zdCBDYWxsQmluZGluZyA9IDA7XG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3ROYW1lcy5DYWxsLCAnJyk7XG5jb25zdCBjYW5jZWxDYWxsID0gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3ROYW1lcy5DYW5jZWxDYWxsLCAnJyk7XG5sZXQgY2FsbFJlc3BvbnNlcyA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQgdXNpbmcgdGhlIG5hbm9pZCBsaWJyYXJ5LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gLSBBIHVuaXF1ZSBJRCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjYWxsUmVzcG9uc2VzIHNldC5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVJRCgpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGRvIHtcbiAgICAgICAgcmVzdWx0ID0gbmFub2lkKCk7XG4gICAgfSB3aGlsZSAoY2FsbFJlc3BvbnNlcy5oYXMocmVzdWx0KSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSByZXN1bHQgb2YgYSBjYWxsIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gVGhlIGlkIG9mIHRoZSByZXF1ZXN0IHRvIGhhbmRsZSB0aGUgcmVzdWx0IGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIHJlc3VsdCBkYXRhIG9mIHRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0pTT04gLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSBpcyBKU09OIG9yIG5vdC5cbiAqXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR9IC0gVGhpcyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGFueSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcmVzdWx0SGFuZGxlcihpZCwgZGF0YSwgaXNKU09OKSB7XG4gICAgY29uc3QgcHJvbWlzZUhhbmRsZXIgPSBnZXRBbmREZWxldGVSZXNwb25zZShpZCk7XG4gICAgaWYgKHByb21pc2VIYW5kbGVyKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcHJvbWlzZUhhbmRsZXIucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0pTT04pIHtcbiAgICAgICAgICAgIHByb21pc2VIYW5kbGVyLnJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb21pc2VIYW5kbGVyLnJlc29sdmUoSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlSGFuZGxlci5yZWplY3QobmV3IFR5cGVFcnJvcihcImNvdWxkIG5vdCBwYXJzZSByZXN1bHQ6IFwiICsgZXJyLm1lc3NhZ2UsIHsgY2F1c2U6IGVyciB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgZXJyb3IgZnJvbSBhIGNhbGwgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgaWQgb2YgdGhlIHByb21pc2UgaGFuZGxlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVycm9yIGRhdGEgdG8gcmVqZWN0IHRoZSBwcm9taXNlIGhhbmRsZXIgd2l0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNKU09OIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgaXMgSlNPTiBvciBub3QuXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGlkLCBkYXRhLCBpc0pTT04pIHtcbiAgICBjb25zdCBwcm9taXNlSGFuZGxlciA9IGdldEFuZERlbGV0ZVJlc3BvbnNlKGlkKTtcbiAgICBpZiAocHJvbWlzZUhhbmRsZXIpIHtcbiAgICAgICAgaWYgKCFpc0pTT04pIHtcbiAgICAgICAgICAgIHByb21pc2VIYW5kbGVyLnJlamVjdChuZXcgRXJyb3IoZGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlSGFuZGxlci5yZWplY3QobmV3IFR5cGVFcnJvcihcImNvdWxkIG5vdCBwYXJzZSBlcnJvcjogXCIgKyBlcnIubWVzc2FnZSwgeyBjYXVzZTogZXJyIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoZXJyb3IuY2F1c2UpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNhdXNlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBleGNlcHRpb247XG4gICAgICAgICAgICBzd2l0Y2ggKGVycm9yLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiUmVmZXJlbmNlRXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gbmV3IFJlZmVyZW5jZUVycm9yKGVycm9yLm1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiVHlwZUVycm9yXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG5ldyBUeXBlRXJyb3IoZXJyb3IubWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJSdW50aW1lRXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gbmV3IFJ1bnRpbWVFcnJvcihlcnJvci5tZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gbmV3IEVycm9yKGVycm9yLm1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZUhhbmRsZXIucmVqZWN0KGV4Y2VwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuZCByZW1vdmVzIHRoZSByZXNwb25zZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIElEIGZyb20gdGhlIGNhbGxSZXNwb25zZXMgbWFwLlxuICpcbiAqIEBwYXJhbSB7YW55fSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVzcG9uc2UgdG8gYmUgcmV0cmlldmVkIGFuZCByZW1vdmVkLlxuICpcbiAqIEByZXR1cm5zIHthbnl9IFRoZSByZXNwb25zZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBJRC5cbiAqL1xuZnVuY3Rpb24gZ2V0QW5kRGVsZXRlUmVzcG9uc2UoaWQpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGNhbGxSZXNwb25zZXMuZ2V0KGlkKTtcbiAgICBjYWxsUmVzcG9uc2VzLmRlbGV0ZShpZCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgYSBiaW5kaW5nIGNhbGwuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2FsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWV0aG9kSURdIC0gVGhlIG51bWVyaWMgSUQgb2YgdGhlIGJvdW5kIG1ldGhvZCB0byBjYWxsLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttZXRob2ROYW1lXSAtIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgYm91bmQgbWV0aG9kIHRvIGNhbGwuXG4gKiBAcHJvcGVydHkge2FueVtdfSBhcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBib3VuZCBtZXRob2QuXG4gKi9cblxuLyoqXG4gKiBFeGNlcHRpb24gY2xhc3MgdGhhdCB3aWxsIGJlIHRocm93biBpbiBjYXNlIHRoZSBib3VuZCBtZXRob2QgcmV0dXJucyBhbiBlcnJvci5cbiAqIFRoZSB2YWx1ZSBvZiB0aGUge0BsaW5rIFJ1bnRpbWVFcnJvciNuYW1lfSBwcm9wZXJ0eSBpcyBcIlJ1bnRpbWVFcnJvclwiLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUnVudGltZUVycm9yIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgRXJyb3IgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSdW50aW1lRXJyb3JcIjtcbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbCBhIGJvdW5kIG1ldGhvZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGNhbGwgb3B0aW9ucy5cbiAqXG4gKiBJbiBjYXNlIG9mIGZhaWx1cmUsIHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgcmVqZWN0IHdpdGggYW4gZXhjZXB0aW9uXG4gKiBhbW9uZyBSZWZlcmVuY2VFcnJvciAodW5rbm93biBtZXRob2QpLCBUeXBlRXJyb3IgKHdyb25nIGFyZ3VtZW50IGNvdW50IG9yIHR5cGUpLFxuICoge0BsaW5rIFJ1bnRpbWVFcnJvcn0gKG1ldGhvZCByZXR1cm5lZCBhbiBlcnJvciksIG9yIG90aGVyIChuZXR3b3JrIG9yIGludGVybmFsIGVycm9ycykuXG4gKiBUaGUgZXhjZXB0aW9uIG1pZ2h0IGhhdmUgYSBcImNhdXNlXCIgZmllbGQgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWRcbiAqIGJ5IHRoZSBhcHBsaWNhdGlvbi0gb3Igc2VydmljZS1sZXZlbCBlcnJvciBtYXJzaGFsaW5nIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0NhbGxPcHRpb25zfSBvcHRpb25zIC0gQSBtZXRob2QgY2FsbCBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gLSBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChvcHRpb25zKSB7XG4gICAgY29uc3QgaWQgPSBnZW5lcmF0ZUlEKCk7XG4gICAgY29uc3QgZG9DYW5jZWwgPSAoKSA9PiB7IHJldHVybiBjYW5jZWxDYWxsKHR5cGUsIHtcImNhbGwtaWRcIjogaWR9KSB9O1xuICAgIGxldCBxdWV1ZWRDYW5jZWwgPSBmYWxzZSwgY2FsbFJ1bm5pbmcgPSBmYWxzZTtcbiAgICBsZXQgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb3B0aW9uc1tcImNhbGwtaWRcIl0gPSBpZDtcbiAgICAgICAgY2FsbFJlc3BvbnNlcy5zZXQoaWQsIHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgICBjYWxsKENhbGxCaW5kaW5nLCBvcHRpb25zKS50aGVuKChfKSA9PiB7XG4gICAgICAgICAgICBjYWxsUnVubmluZyA9IHRydWU7XG4gICAgICAgICAgICBpZiAocXVldWVkQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvQ2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGNhbGxSZXNwb25zZXMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcC5jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGlmIChjYWxsUnVubmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGRvQ2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWV1ZWRDYW5jZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgbWV0aG9kIGJ5IG5hbWUgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy5cbiAqIFNlZSB7QGxpbmsgQ2FsbH0gZm9yIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIGluIHRoZSBmb3JtYXQgJ3BhY2thZ2Uuc3RydWN0Lm1ldGhvZCcuXG4gKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2QgY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJ5TmFtZShtZXRob2ROYW1lLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIENhbGwoe1xuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBhcmdzXG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBtZXRob2QgYnkgaXRzIG51bWVyaWMgSUQgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy5cbiAqIFNlZSB7QGxpbmsgQ2FsbH0gZm9yIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1ldGhvZElEIC0gVGhlIElEIG9mIHRoZSBtZXRob2QgdG8gY2FsbC5cbiAqIEBwYXJhbSB7YW55W119IGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gLSBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2QgY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJ5SUQobWV0aG9kSUQsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gQ2FsbCh7XG4gICAgICAgIG1ldGhvZElELFxuICAgICAgICBhcmdzXG4gICAgfSk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cblxuaW1wb3J0IHtuZXdSdW50aW1lQ2FsbGVyV2l0aElELCBvYmplY3ROYW1lc30gZnJvbSBcIi4vcnVudGltZVwiO1xuXG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3ROYW1lcy5DbGlwYm9hcmQsICcnKTtcbmNvbnN0IENsaXBib2FyZFNldFRleHQgPSAwO1xuY29uc3QgQ2xpcGJvYXJkVGV4dCA9IDE7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dCB0byB0aGUgQ2xpcGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgc2V0IHRvIHRoZSBDbGlwYm9hcmQuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gU2V0VGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIGNhbGwoQ2xpcGJvYXJkU2V0VGV4dCwge3RleHR9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIENsaXBib2FyZCB0ZXh0XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0ZXh0IGZyb20gdGhlIENsaXBib2FyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRleHQoKSB7XG4gICAgcmV0dXJuIGNhbGwoQ2xpcGJvYXJkVGV4dCk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cblxuLyoqXG4gKiBBbnkgaXMgYSBkdW1teSBjcmVhdGlvbiBmdW5jdGlvbiBmb3Igc2ltcGxlIG9yIHVua25vd24gdHlwZXMuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHthbnl9IHNvdXJjZVxuICogQHJldHVybnMge1R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBbnkoc291cmNlKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8oc291cmNlKTtcbn1cblxuLyoqXG4gKiBCeXRlU2xpY2UgaXMgYSBjcmVhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2VzXG4gKiBudWxsIHN0cmluZ3Mgd2l0aCBlbXB0eSBzdHJpbmdzLlxuICogQHBhcmFtIHthbnl9IHNvdXJjZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJ5dGVTbGljZShzb3VyY2UpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovKChzb3VyY2UgPT0gbnVsbCkgPyBcIlwiIDogc291cmNlKTtcbn1cblxuLyoqXG4gKiBBcnJheSB0YWtlcyBhIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhbiBhcmJpdHJhcnkgdHlwZVxuICogYW5kIHJldHVybnMgYW4gaW4tcGxhY2UgY3JlYXRpb24gZnVuY3Rpb24gZm9yIGFuIGFycmF5XG4gKiB3aG9zZSBlbGVtZW50cyBhcmUgb2YgdGhhdCB0eXBlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7KHNvdXJjZTogYW55KSA9PiBUfSBlbGVtZW50XG4gKiBAcmV0dXJucyB7KHNvdXJjZTogYW55KSA9PiBUW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBcnJheShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IEFueSkge1xuICAgICAgICByZXR1cm4gKHNvdXJjZSkgPT4gKHNvdXJjZSA9PT0gbnVsbCA/IFtdIDogc291cmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZSkgPT4ge1xuICAgICAgICBpZiAoc291cmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNvdXJjZVtpXSA9IGVsZW1lbnQoc291cmNlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH07XG59XG5cbi8qKlxuICogTWFwIHRha2VzIGNyZWF0aW9uIGZ1bmN0aW9ucyBmb3IgdHdvIGFyYml0cmFyeSB0eXBlc1xuICogYW5kIHJldHVybnMgYW4gaW4tcGxhY2UgY3JlYXRpb24gZnVuY3Rpb24gZm9yIGFuIG9iamVjdFxuICogd2hvc2Uga2V5cyBhbmQgdmFsdWVzIGFyZSBvZiB0aG9zZSB0eXBlcy5cbiAqIEB0ZW1wbGF0ZSBLLCBWXG4gKiBAcGFyYW0geyhzb3VyY2U6IGFueSkgPT4gS30ga2V5XG4gKiBAcGFyYW0geyhzb3VyY2U6IGFueSkgPT4gVn0gdmFsdWVcbiAqIEByZXR1cm5zIHsoc291cmNlOiBhbnkpID0+IHsgW186IEtdOiBWIH19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNYXAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gQW55KSB7XG4gICAgICAgIHJldHVybiAoc291cmNlKSA9PiAoc291cmNlID09PSBudWxsID8ge30gOiBzb3VyY2UpO1xuICAgIH1cblxuICAgIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIHNvdXJjZVtrZXldID0gdmFsdWUoc291cmNlW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBOdWxsYWJsZSB0YWtlcyBhIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhbiBhcmJpdHJhcnkgdHlwZVxuICogYW5kIHJldHVybnMgYSBjcmVhdGlvbiBmdW5jdGlvbiBmb3IgYSBudWxsYWJsZSB2YWx1ZSBvZiB0aGF0IHR5cGUuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHsoc291cmNlOiBhbnkpID0+IFR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHsoc291cmNlOiBhbnkpID0+IChUIHwgbnVsbCl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBOdWxsYWJsZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IEFueSkge1xuICAgICAgICByZXR1cm4gQW55O1xuICAgIH1cblxuICAgIHJldHVybiAoc291cmNlKSA9PiAoc291cmNlID09PSBudWxsID8gbnVsbCA6IGVsZW1lbnQoc291cmNlKSk7XG59XG5cbi8qKlxuICogU3RydWN0IHRha2VzIGFuIG9iamVjdCBtYXBwaW5nIGZpZWxkIG5hbWVzIHRvIGNyZWF0aW9uIGZ1bmN0aW9uc1xuICogYW5kIHJldHVybnMgYW4gaW4tcGxhY2UgY3JlYXRpb24gZnVuY3Rpb24gZm9yIGEgc3RydWN0LlxuICogQHRlbXBsYXRlIHt7IFtfOiBzdHJpbmddOiAoKHNvdXJjZTogYW55KSA9PiBhbnkpIH19IFRcbiAqIEB0ZW1wbGF0ZSB7eyBbS2V5IGluIGtleW9mIFRdPzogUmV0dXJuVHlwZTxUW0tleV0+IH19IFVcbiAqIEBwYXJhbSB7VH0gY3JlYXRlRmllbGRcbiAqIEByZXR1cm5zIHsoc291cmNlOiBhbnkpID0+IFV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdHJ1Y3QoY3JlYXRlRmllbGQpIHtcbiAgICBsZXQgYWxsQW55ID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gY3JlYXRlRmllbGQpIHtcbiAgICAgICAgaWYgKGNyZWF0ZUZpZWxkW25hbWVdICE9PSBBbnkpIHtcbiAgICAgICAgICAgIGFsbEFueSA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFsbEFueSkge1xuICAgICAgICByZXR1cm4gQW55O1xuICAgIH1cblxuICAgIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBjcmVhdGVGaWVsZCkge1xuICAgICAgICAgICAgaWYgKG5hbWUgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgc291cmNlW25hbWVdID0gY3JlYXRlRmllbGRbbmFtZV0oc291cmNlW25hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH07XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaXplXG4gKiBAcHJvcGVydHkge251bWJlcn0gV2lkdGggLSBUaGUgd2lkdGguXG4gKiBAcHJvcGVydHkge251bWJlcn0gSGVpZ2h0IC0gVGhlIGhlaWdodC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlY3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYIC0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgb3JpZ2luLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFkgLSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBvcmlnaW4uXG4gKiBAcHJvcGVydHkge251bWJlcn0gV2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JlZW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJRCAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NyZWVuLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5hbWUgLSBIdW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoZSBzY3JlZW4uXG4gKiBAcHJvcGVydHkge251bWJlcn0gU2NhbGVGYWN0b3IgLSBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBzY3JlZW4gKERQSS85NikuIDEgPSBzdGFuZGFyZCBEUEksIDIgPSBIaURQSSAoUmV0aW5hKSwgZXRjLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFggLSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBzY3JlZW4uXG4gKiBAcHJvcGVydHkge251bWJlcn0gWSAtIFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHNjcmVlbi5cbiAqIEBwcm9wZXJ0eSB7U2l6ZX0gU2l6ZSAtIENvbnRhaW5zIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uXG4gKiBAcHJvcGVydHkge1JlY3R9IEJvdW5kcyAtIENvbnRhaW5zIHRoZSBib3VuZHMgb2YgdGhlIHNjcmVlbiBpbiB0ZXJtcyBvZiBYLCBZLCBXaWR0aCwgYW5kIEhlaWdodC5cbiAqIEBwcm9wZXJ0eSB7UmVjdH0gUGh5c2ljYWxCb3VuZHMgLSBDb250YWlucyB0aGUgcGh5c2ljYWwgYm91bmRzIG9mIHRoZSBzY3JlZW4gaW4gdGVybXMgb2YgWCwgWSwgV2lkdGgsIGFuZCBIZWlnaHQgKGJlZm9yZSBzY2FsaW5nKS5cbiAqIEBwcm9wZXJ0eSB7UmVjdH0gV29ya0FyZWEgLSBDb250YWlucyB0aGUgYXJlYSBvZiB0aGUgc2NyZWVuIHRoYXQgaXMgYWN0dWFsbHkgdXNhYmxlIChleGNsdWRpbmcgdGFza2JhciBhbmQgb3RoZXIgc3lzdGVtIFVJKS5cbiAqIEBwcm9wZXJ0eSB7UmVjdH0gUGh5c2ljYWxXb3JrQXJlYSAtIENvbnRhaW5zIHRoZSBwaHlzaWNhbCBXb3JrQXJlYSBvZiB0aGUgc2NyZWVuIChiZWZvcmUgc2NhbGluZykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IElzUHJpbWFyeSAtIFRydWUgaWYgdGhpcyBpcyB0aGUgcHJpbWFyeSBtb25pdG9yIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFJvdGF0aW9uIC0gVGhlIHJvdGF0aW9uIG9mIHRoZSBzY3JlZW4uXG4gKi9cblxuaW1wb3J0IHsgbmV3UnVudGltZUNhbGxlcldpdGhJRCwgb2JqZWN0TmFtZXMgfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcldpdGhJRChvYmplY3ROYW1lcy5TY3JlZW5zLCBcIlwiKTtcblxuY29uc3QgZ2V0QWxsID0gMDtcbmNvbnN0IGdldFByaW1hcnkgPSAxO1xuY29uc3QgZ2V0Q3VycmVudCA9IDI7XG5cbi8qKlxuICogR2V0cyBhbGwgc2NyZWVucy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNjcmVlbltdPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgU2NyZWVuIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGwoKSB7XG4gICAgcmV0dXJuIGNhbGwoZ2V0QWxsKTtcbn1cbi8qKlxuICogR2V0cyB0aGUgcHJpbWFyeSBzY3JlZW4uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTY3JlZW4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcHJpbWFyeSBzY3JlZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZXRQcmltYXJ5KCkge1xuICAgIHJldHVybiBjYWxsKGdldFByaW1hcnkpO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IGFjdGl2ZSBzY3JlZW4uXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8U2NyZWVuPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY3VycmVudCBhY3RpdmUgc2NyZWVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gR2V0Q3VycmVudCgpIHtcbiAgICByZXR1cm4gY2FsbChnZXRDdXJyZW50KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7OztBQzZCQSxJQUFJLGNBQ0E7QUFFRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLE9BQU87QUFDL0IsTUFBSSxLQUFLO0FBRVQsTUFBSSxJQUFJLE9BQU87QUFDZixTQUFPLEtBQUs7QUFFUixVQUFNLFlBQWEsS0FBSyxPQUFPLElBQUksS0FBTSxDQUFDO0FBQUEsRUFDOUM7QUFDQSxTQUFPO0FBQ1g7OztBQzVCQSxJQUFNLGFBQWEsT0FBTyxTQUFTLFNBQVM7QUFHckMsSUFBTSxjQUFjO0FBQUEsRUFDdkIsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUNoQjtBQUNPLElBQUksV0FBVyxPQUFPO0FBc0J0QixTQUFTLHVCQUF1QixRQUFRLFlBQVk7QUFDdkQsU0FBTyxTQUFVLFFBQVEsT0FBSyxNQUFNO0FBQ2hDLFdBQU8sa0JBQWtCLFFBQVEsUUFBUSxZQUFZLElBQUk7QUFBQSxFQUM3RDtBQUNKO0FBT0EsZUFBZSxrQkFBa0IsVUFBVSxRQUFRLFlBQVksTUFBTTtBQUNqRSxNQUFJLE1BQU0sSUFBSSxJQUFJLFVBQVU7QUFDNUIsTUFBSSxZQUFZLE1BQU07QUFDbEIsUUFBSSxhQUFhLE9BQU8sVUFBVSxRQUFRO0FBQUEsRUFDOUM7QUFDQSxNQUFJLFVBQVUsTUFB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QzFCLGdCQUFnQjtBQUFBLElBQ2hCLDRCQUE0QjtBQUFBLElBQzVCLDRCQUE0QjtBQUFBLElBQzVCLHlEQUF5RDtBQUFBLElBQ3pELHNDQUFzQztBQUFBLElBQ3RDLG9CQUFvQjtBQUFBLElBQ3BCLHFCQUFxQjtBQUFBLElBQ3JCLHFCQUFxQjtBQUFBLElBQ3JCLHNCQUFzQjtBQUFBLElBQ3RCLGdDQUFnQztBQUFBLElBQ2hDLGtDQUFrQztBQUFBLElBQ2xDLG1DQUFtQztBQUFBLElBQ25DLG9DQUFvQztBQUFBLElBQ3BDLCtCQUErQjtBQUFBLElBQy9CLDZCQUE2QjtBQUFBLElBQzdCLHVCQUF1QjtBQUFBLElBQ3ZCLGlDQUFpQztBQUFBLElBQ2pDLDhCQUE4QjtBQUFBLElBQzlCLDRCQUE0QjtBQUFBLElBQzVCLHNDQUFzQztBQUFBLElBQ3RDLDRCQUE0QjtBQUFBLElBQzVCLHNCQUFzQjtBQUFBLElBQ3RCLGtDQUFrQztBQUFBLElBQ2xDLHNCQUFzQjtBQUFBLElBQ3RCLHdCQUF3QjtBQUFBLElBQ3hCLHdCQUF3QjtBQUFBLElBQ3hCLG1CQUFtQjtBQUFBLElBQ25CLDBCQUEwQjtBQUFBLElBQzFCLDhCQUE4QjtBQUFBLElBQzlCLHlCQUF5QjtBQUFBLElBQ3pCLDZCQUE2QjtBQUFBLElBQzdCLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLHNCQUFzQjtBQUFBLElBQ3RCLGVBQWU7QUFBQSxJQUNmLHlCQUF5QjtBQUFBLElBQ3pCLHdCQUF3QjtBQUFBLElBQ3hCLG9CQUFvQjtBQUFBLElBQ3BCLHFCQUFxQjtBQUFBLElBQ3JCLGlCQUFpQjtBQUFBLElBQ2pCLGlCQUFpQjtBQUFBLElBQ2pCLHNCQUFzQjtBQUFBLElBQ3RCLG1DQUFtQztBQUFBLElBQ25DLHFDQUFxQztBQUFBLElBQ3JDLHVCQUF1QjtBQUFBLElBQ3ZCLHNCQUFzQjtBQUFBLElBQ3RCLHdCQUF3QjtBQUFBLElBQ3hCLGVBQWU7QUFBQSxJQUNmLDJCQUEyQjtBQUFBLElBQzNCLDBCQUEwQjtBQUFBLElBQzFCLDZC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SSxZQUFZLElBQUksTUFBTSxLQUFLO0FBQzNCLGVBQVM7QUFDVDtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBSSxRQUFRO0FBQ1IsV0FBTztBQUFBLEVBQ1g7QUFFQSxTQUFPLENBQUMsV0FBVztBQUNmLGVBQVcsUUFBUSxhQUFhO0FBQzVCLFVBQUksUUFBUSxRQUFRO0FBQ2hCLGVBQU8sSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDakQ7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDSjs7O0FDNUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJDQSxJQUFNQyxRQUFPLHVCQUF1QixZQUFZLFNBQVMsRUFBRTtBQUUzRCxJQUFNLFNBQVM7QUFDZixJQUFNLGFBQWE7QUFDbkIsSUFBTSxhQUFhO0FBTVosU0FBUyxTQUFTO0FBQ3JCLFNBQU9BLE1BQUssTUFBTTtBQUN0QjtBQUtPLFNBQVMsYUFBYTtBQUN6QixTQUFPQSxNQUFLLFVBQVU7QUFDMUI7QUFNTyxTQUFTLGFBQWE7QUFDekIsU0FBT0EsTUFBSyxVQUFVO0FBQzFCOzs7QW5CM0RBLE9BQU8sU0FBUyxPQUFPLFVBQVUsQ0FBQztBQWtDbEMsSUFBSSxjQUFjO0FBQ1gsU0FBUyxPQUFPO0FBQ25CLFNBQU8sT0FBTyxTQUFnQjtBQUM5QixFQUFPLE9BQU8scUJBQXFCO0FBQ25DLGdCQUFjO0FBQ2xCO0FBRUEsT0FBTyxpQkFBaUIsUUFBUSxNQUFNO0FBQ2xDLE1BQUksQ0FBQyxhQUFhO0FBQ2QsU0FBSztBQUFBLEVBQ1Q7QUFDSixDQUFDOyIsCiAgIm5hbWVzIjogWyJFcnJvciIsICJjYWxsIiwgInR5cGUiLCAiRXJyb3IiLCAiY2FsbCIsICJldmVudE5hbWUiLCAiY29udHJvbGxlciIsICJyZXNpemFibGUiLCAiY2FsbCIsICJjYWxsIiwgImNhbGwiLCAiSGlkZU1ldGhvZCIsICJTaG93TWV0aG9kIiwgImNhbGwiLCAiZ2VuZXJhdGVJRCIsICJjYWxsIiwgIk1hcCIsICJNYXAiLCAia2V5IiwgImNhbGwiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2luZGV4LnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy93bWwudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2Jyb3dzZXIudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL25hbm9pZC50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvcnVudGltZS50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZGlhbG9ncy50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZXZlbnRzLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9saXN0ZW5lci50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvZXZlbnRfdHlwZXMudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3V0aWxzLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy93aW5kb3cudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL2NvbXBpbGVkL21haW4uanMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3N5c3RlbS50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvY29udGV4dG1lbnUudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2ZsYWdzLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9kcmFnLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9hcHBsaWNhdGlvbi50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvY2FsbHMudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL2NhbGxhYmxlLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9jYW5jZWxsYWJsZS50cyIsICIuLi8uLi9ydW50aW1lL2Rlc2t0b3AvQHdhaWxzaW8vcnVudGltZS9zcmMvY2xpcGJvYXJkLnRzIiwgIi4uLy4uL3J1bnRpbWUvZGVza3RvcC9Ad2FpbHNpby9ydW50aW1lL3NyYy9jcmVhdGUudHMiLCAiLi4vLi4vcnVudGltZS9kZXNrdG9wL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3NjcmVlbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vLyBTZXR1cFxud2luZG93Ll93YWlscyA9IHdpbmRvdy5fd2FpbHMgfHwge307XG5cbmltcG9ydCBcIi4vY29udGV4dG1lbnUuanNcIjtcbmltcG9ydCBcIi4vZHJhZy5qc1wiO1xuXG4vLyBSZS1leHBvcnQgcHVibGljIEFQSVxuaW1wb3J0ICogYXMgQXBwbGljYXRpb24gZnJvbSBcIi4vYXBwbGljYXRpb24uanNcIjtcbmltcG9ydCAqIGFzIEJyb3dzZXIgZnJvbSBcIi4vYnJvd3Nlci5qc1wiO1xuaW1wb3J0ICogYXMgQ2FsbCBmcm9tIFwiLi9jYWxscy5qc1wiO1xuaW1wb3J0ICogYXMgQ2xpcGJvYXJkIGZyb20gXCIuL2NsaXBib2FyZC5qc1wiO1xuaW1wb3J0ICogYXMgQ3JlYXRlIGZyb20gXCIuL2NyZWF0ZS5qc1wiO1xuaW1wb3J0ICogYXMgRGlhbG9ncyBmcm9tIFwiLi9kaWFsb2dzLmpzXCI7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCI7XG5pbXBvcnQgKiBhcyBGbGFncyBmcm9tIFwiLi9mbGFncy5qc1wiO1xuaW1wb3J0ICogYXMgU2NyZWVucyBmcm9tIFwiLi9zY3JlZW5zLmpzXCI7XG5pbXBvcnQgKiBhcyBTeXN0ZW0gZnJvbSBcIi4vc3lzdGVtLmpzXCI7XG5pbXBvcnQgV2luZG93IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuaW1wb3J0ICogYXMgV01MIGZyb20gXCIuL3dtbC5qc1wiO1xuXG5leHBvcnQge1xuICAgIEFwcGxpY2F0aW9uLFxuICAgIEJyb3dzZXIsXG4gICAgQ2FsbCxcbiAgICBDbGlwYm9hcmQsXG4gICAgRGlhbG9ncyxcbiAgICBFdmVudHMsXG4gICAgRmxhZ3MsXG4gICAgU2NyZWVucyxcbiAgICBTeXN0ZW0sXG4gICAgV2luZG93LFxuICAgIFdNTFxufTtcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCB1dGlsaXR5IGNvbnN1bWVkIGJ5IHRoZSBiaW5kaW5nIGdlbmVyYXRvci5cbiAqXG4gKiBAaWdub3JlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHsgQ3JlYXRlIH07XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NhbmNlbGxhYmxlLmpzXCI7XG5cbi8vIE5vdGlmeSBiYWNrZW5kXG53aW5kb3cuX3dhaWxzLmludm9rZSA9IFN5c3RlbS5pbnZva2U7XG5TeXN0ZW0uaW52b2tlKFwid2FpbHM6cnVudGltZTpyZWFkeVwiKTtcbiIsICIvKlxuIF8gICAgIF9fICAgICBfIF9fXG58IHwgIC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0IHsgT3BlblVSTCB9IGZyb20gXCIuL2Jyb3dzZXIuanNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vZGlhbG9ncy5qc1wiO1xuaW1wb3J0IHsgRW1pdCwgV2FpbHNFdmVudCB9IGZyb20gXCIuL2V2ZW50cy5qc1wiO1xuaW1wb3J0IHsgY2FuQWJvcnRMaXN0ZW5lcnMsIHdoZW5SZWFkeSB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgV2luZG93IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIG9wdGlvbmFsIGRhdGEuXG4gKlxuICogQHBhcmFtIGV2ZW50TmFtZSAtIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHNlbmQuXG4gKiBAcGFyYW0gW2RhdGE9bnVsbF0gLSAtIE9wdGlvbmFsIGRhdGEgdG8gc2VuZCBhbG9uZyB3aXRoIHRoZSBldmVudC5cbiAqL1xuZnVuY3Rpb24gc2VuZEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgRW1pdChuZXcgV2FpbHNFdmVudChldmVudE5hbWUsIGRhdGEpKTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIG1ldGhvZCBvbiBhIHNwZWNpZmllZCB3aW5kb3cuXG4gKlxuICogQHBhcmFtIHdpbmRvd05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd2luZG93IHRvIGNhbGwgdGhlIG1ldGhvZCBvbi5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBjYWxsLlxuICovXG5mdW5jdGlvbiBjYWxsV2luZG93TWV0aG9kKHdpbmRvd05hbWU6IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFyZ2V0V2luZG93ID0gV2luZG93LkdldCh3aW5kb3dOYW1lKTtcbiAgICBjb25zdCBtZXRob2QgPSAodGFyZ2V0V2luZG93IGFzIGFueSlbbWV0aG9kTmFtZV07XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFdpbmRvdyBtZXRob2QgJyR7bWV0aG9kTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgbWV0aG9kLmNhbGwodGFyZ2V0V2luZG93KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGNhbGxpbmcgd2luZG93IG1ldGhvZCAnJHttZXRob2ROYW1lfSc6IGAsIGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXNwb25kcyB0byBhIHRyaWdnZXJpbmcgZXZlbnQgYnkgcnVubmluZyBhcHByb3ByaWF0ZSBXTUwgYWN0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBvbldNTFRyaWdnZXJlZChldjogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXYuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXG4gICAgZnVuY3Rpb24gcnVuRWZmZWN0KGNob2ljZSA9IFwiWWVzXCIpIHtcbiAgICAgICAgaWYgKGNob2ljZSAhPT0gXCJZZXNcIilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBldmVudFR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnd21sLWV2ZW50JykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd21sLWV2ZW50Jyk7XG4gICAgICAgIGNvbnN0IHRhcmdldFdpbmRvdyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3bWwtdGFyZ2V0LXdpbmRvdycpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXdtbC10YXJnZXQtd2luZG93JykgfHwgXCJcIjtcbiAgICAgICAgY29uc3Qgd2luZG93TWV0aG9kID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dtbC13aW5kb3cnKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS13bWwtd2luZG93Jyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3bWwtb3BlbnVybCcpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXdtbC1vcGVudXJsJyk7XG5cbiAgICAgICAgaWYgKGV2ZW50VHlwZSAhPT0gbnVsbClcbiAgICAgICAgICAgIHNlbmRFdmVudChldmVudFR5cGUpO1xuICAgICAgICBpZiAod2luZG93TWV0aG9kICE9PSBudWxsKVxuICAgICAgICAgICAgY2FsbFdpbmRvd01ldGhvZCh0YXJnZXRXaW5kb3csIHdpbmRvd01ldGhvZCk7XG4gICAgICAgIGlmICh1cmwgIT09IG51bGwpXG4gICAgICAgICAgICB2b2lkIE9wZW5VUkwodXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maXJtID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dtbC1jb25maXJtJykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd21sLWNvbmZpcm0nKTtcblxuICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgIFF1ZXN0aW9uKHtcbiAgICAgICAgICAgIFRpdGxlOiBcIkNvbmZpcm1cIixcbiAgICAgICAgICAgIE1lc3NhZ2U6IGNvbmZpcm0sXG4gICAgICAgICAgICBEZXRhY2hlZDogZmFsc2UsXG4gICAgICAgICAgICBCdXR0b25zOiBbXG4gICAgICAgICAgICAgICAgeyBMYWJlbDogXCJZZXNcIiB9LFxuICAgICAgICAgICAgICAgIHsgTGFiZWw6IFwiTm9cIiwgSXNEZWZhdWx0OiB0cnVlIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSkudGhlbihydW5FZmZlY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bkVmZmVjdCgpO1xuICAgIH1cbn1cblxuLy8gUHJpdmF0ZSBmaWVsZCBuYW1lcy5cbmNvbnN0IGNvbnRyb2xsZXJTeW0gPSBTeW1ib2woXCJjb250cm9sbGVyXCIpO1xuY29uc3QgdHJpZ2dlck1hcFN5bSA9IFN5bWJvbChcInRyaWdnZXJNYXBcIik7XG5jb25zdCBlbGVtZW50Q291bnRTeW0gPSBTeW1ib2woXCJlbGVtZW50Q291bnRcIik7XG5cbi8qKlxuICogQWJvcnRDb250cm9sbGVyUmVnaXN0cnkgZG9lcyBub3QgYWN0dWFsbHkgcmVtZW1iZXIgYWN0aXZlIGV2ZW50IGxpc3RlbmVyczogaW5zdGVhZFxuICogaXQgdGllcyB0aGVtIHRvIGFuIEFib3J0U2lnbmFsIGFuZCB1c2VzIGFuIEFib3J0Q29udHJvbGxlciB0byByZW1vdmUgdGhlbSBhbGwgYXQgb25jZS5cbiAqL1xuY2xhc3MgQWJvcnRDb250cm9sbGVyUmVnaXN0cnkge1xuICAgIC8vIFByaXZhdGUgZmllbGRzLlxuICAgIFtjb250cm9sbGVyU3ltXTogQWJvcnRDb250cm9sbGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXNbY29udHJvbGxlclN5bV0gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvcHRpb25zIG9iamVjdCBmb3IgYWRkRXZlbnRMaXN0ZW5lciB0aGF0IHRpZXMgdGhlIGxpc3RlbmVyXG4gICAgICogdG8gdGhlIEFib3J0U2lnbmFsIGZyb20gdGhlIGN1cnJlbnQgQWJvcnRDb250cm9sbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVsZW1lbnQgLSBBbiBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdHJpZ2dlcnMgLSBUaGUgbGlzdCBvZiBhY3RpdmUgV01MIHRyaWdnZXIgZXZlbnRzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzXG4gICAgICovXG4gICAgc2V0KGVsZW1lbnQ6IEVsZW1lbnQsIHRyaWdnZXJzOiBzdHJpbmdbXSk6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmFsOiB0aGlzW2NvbnRyb2xsZXJTeW1dLnNpZ25hbCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzIGFuZCByZXNldHMgdGhlIHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzW2NvbnRyb2xsZXJTeW1dLmFib3J0KCk7XG4gICAgICAgIHRoaXNbY29udHJvbGxlclN5bV0gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFdlYWtNYXBSZWdpc3RyeSBtYXBzIGFjdGl2ZSB0cmlnZ2VyIGV2ZW50cyB0byBlYWNoIERPTSBlbGVtZW50IHRocm91Z2ggYSBXZWFrTWFwLlxuICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG1hcHBpbmcgcmVtYWlucyBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLCB3aGlsZSBzdGlsbCBhbGxvd2luZyBnYXJiYWdlXG4gKiBjb2xsZWN0aW9uIG9mIHRoZSBpbnZvbHZlZCBlbGVtZW50cy5cbiAqL1xuY2xhc3MgV2Vha01hcFJlZ2lzdHJ5IHtcbiAgICAvKiogU3RvcmVzIHRoZSBjdXJyZW50IGVsZW1lbnQtdG8tdHJpZ2dlciBtYXBwaW5nLiAqL1xuICAgIFt0cmlnZ2VyTWFwU3ltXTogV2Vha01hcDxFbGVtZW50LCBzdHJpbmdbXT47XG4gICAgLyoqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggYWN0aXZlIFdNTCB0cmlnZ2Vycy4gKi9cbiAgICBbZWxlbWVudENvdW50U3ltXTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXNbdHJpZ2dlck1hcFN5bV0gPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzW2VsZW1lbnRDb3VudFN5bV0gPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYWN0aXZlIHRyaWdnZXJzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZWxlbWVudCAtIEFuIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB0cmlnZ2VycyAtIFRoZSBsaXN0IG9mIGFjdGl2ZSBXTUwgdHJpZ2dlciBldmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHNldChlbGVtZW50OiBFbGVtZW50LCB0cmlnZ2Vyczogc3RyaW5nW10pOiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB7XG4gICAgICAgIGlmICghdGhpc1t0cmlnZ2VyTWFwU3ltXS5oYXMoZWxlbWVudCkpIHsgdGhpc1tlbGVtZW50Q291bnRTeW1dKys7IH1cbiAgICAgICAgdGhpc1t0cmlnZ2VyTWFwU3ltXS5zZXQoZWxlbWVudCwgdHJpZ2dlcnMpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzW2VsZW1lbnRDb3VudFN5bV0gPD0gMClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2VsZW1lbnRDb3VudFN5bV0gPD0gMClcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzW3RyaWdnZXJNYXBTeW1dLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VycyAhPSBudWxsKSB7IHRoaXNbZWxlbWVudENvdW50U3ltXS0tOyB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0cmlnZ2VycyB8fCBbXSlcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHJpZ2dlciwgb25XTUxUcmlnZ2VyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0cmlnZ2VyTWFwU3ltXSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXNbZWxlbWVudENvdW50U3ltXSA9IDA7XG4gICAgfVxufVxuXG5jb25zdCB0cmlnZ2VyUmVnaXN0cnkgPSBjYW5BYm9ydExpc3RlbmVycygpID8gbmV3IEFib3J0Q29udHJvbGxlclJlZ2lzdHJ5KCkgOiBuZXcgV2Vha01hcFJlZ2lzdHJ5KCk7XG5cbi8qKlxuICogQWRkcyBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhZGRXTUxMaXN0ZW5lcnMoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRyaWdnZXJSZWdFeHAgPSAvXFxTKy9nO1xuICAgIGNvbnN0IHRyaWdnZXJBdHRyID0gKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3bWwtdHJpZ2dlcicpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXdtbC10cmlnZ2VyJykgfHwgXCJjbGlja1wiKTtcbiAgICBjb25zdCB0cmlnZ2Vyczogc3RyaW5nW10gPSBbXTtcblxuICAgIGxldCBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gdHJpZ2dlclJlZ0V4cC5leGVjKHRyaWdnZXJBdHRyKSkgIT09IG51bGwpXG4gICAgICAgIHRyaWdnZXJzLnB1c2gobWF0Y2hbMF0pO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRyaWdnZXJSZWdpc3RyeS5zZXQoZWxlbWVudCwgdHJpZ2dlcnMpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0cmlnZ2VycylcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRyaWdnZXIsIG9uV01MVHJpZ2dlcmVkLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTY2hlZHVsZXMgYW4gYXV0b21hdGljIHJlbG9hZCBvZiBXTUwgdG8gYmUgcGVyZm9ybWVkIGFzIHNvb24gYXMgdGhlIGRvY3VtZW50IGlzIGZ1bGx5IGxvYWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVuYWJsZSgpOiB2b2lkIHtcbiAgICB3aGVuUmVhZHkoUmVsb2FkKTtcbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBXTUwgcGFnZSBieSBhZGRpbmcgbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVycyBhbmQgYnJvd3NlciBsaXN0ZW5lcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWxvYWQoKTogdm9pZCB7XG4gICAgdHJpZ2dlclJlZ2lzdHJ5LnJlc2V0KCk7XG4gICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdbd21sLWV2ZW50XSwgW3dtbC13aW5kb3ddLCBbd21sLW9wZW51cmxdLCBbZGF0YS13bWwtZXZlbnRdLCBbZGF0YS13bWwtd2luZG93XSwgW2RhdGEtd21sLW9wZW51cmxdJykuZm9yRWFjaChhZGRXTUxMaXN0ZW5lcnMpO1xufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQgeyBuZXdSdW50aW1lQ2FsbGVyLCBvYmplY3ROYW1lcyB9IGZyb20gXCIuL3J1bnRpbWUuanNcIjtcblxuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXIob2JqZWN0TmFtZXMuQnJvd3Nlcik7XG5cbmNvbnN0IEJyb3dzZXJPcGVuVVJMID0gMDtcblxuLyoqXG4gKiBPcGVuIGEgYnJvd3NlciB3aW5kb3cgdG8gdGhlIGdpdmVuIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBvcGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPcGVuVVJMKHVybDogc3RyaW5nIHwgVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGNhbGwoQnJvd3Nlck9wZW5VUkwsIHt1cmw6IHVybC50b1N0cmluZygpfSk7XG59XG4iLCAiLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vYWkvbmFub2lkXG5cbi8vIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuLy9cbi8vIENvcHlyaWdodCAyMDE3IEFuZHJleSBTaXRuaWsgPGFuZHJleUBzaXRuaWsucnU+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxuLy8gdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxuLy8gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xuLy8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2Zcbi8vIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbi8vICAgICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4vLyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTU1xuLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SXG4vLyBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVJcbi8vIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4vLyBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIGFscGhhYmV0IHVzZXMgYEEtWmEtejAtOV8tYCBzeW1ib2xzLlxuLy8gVGhlIG9yZGVyIG9mIGNoYXJhY3RlcnMgaXMgb3B0aW1pemVkIGZvciBiZXR0ZXIgZ3ppcCBhbmQgYnJvdGxpIGNvbXByZXNzaW9uLlxuLy8gUmVmZXJlbmNlcyB0byB0aGUgc2FtZSBmaWxlICh3b3JrcyBib3RoIGZvciBnemlwIGFuZCBicm90bGkpOlxuLy8gYCd1c2VgLCBgYW5kb21gLCBhbmQgYHJpY3QnYFxuLy8gUmVmZXJlbmNlcyB0byB0aGUgYnJvdGxpIGRlZmF1bHQgZGljdGlvbmFyeTpcbi8vIGAtMjZUYCwgYDE5ODNgLCBgNDBweGAsIGA3NXB4YCwgYGJ1c2hgLCBgamFja2AsIGBtaW5kYCwgYHZlcnlgLCBhbmQgYHdvbGZgXG5jb25zdCB1cmxBbHBoYWJldCA9XG4gICAgJ3VzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3QnXG5cbmV4cG9ydCBmdW5jdGlvbiBuYW5vaWQoc2l6ZTogbnVtYmVyID0gMjEpOiBzdHJpbmcge1xuICAgIGxldCBpZCA9ICcnXG4gICAgLy8gQSBjb21wYWN0IGFsdGVybmF0aXZlIGZvciBgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwOyBpKyspYC5cbiAgICBsZXQgaSA9IHNpemUgfCAwXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICAvLyBgfCAwYCBpcyBtb3JlIGNvbXBhY3QgYW5kIGZhc3RlciB0aGFuIGBNYXRoLmZsb29yKClgLlxuICAgICAgICBpZCArPSB1cmxBbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIDY0KSB8IDBdXG4gICAgfVxuICAgIHJldHVybiBpZFxufVxuIiwgIi8qXG4gXyAgICAgX18gICAgIF8gX19cbnwgfCAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICcuL25hbm9pZC5qcyc7XG5cbmNvbnN0IHJ1bnRpbWVVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgXCIvd2FpbHMvcnVudGltZVwiO1xuXG4vLyBPYmplY3QgTmFtZXNcbmV4cG9ydCBjb25zdCBvYmplY3ROYW1lcyA9IE9iamVjdC5mcmVlemUoe1xuICAgIENhbGw6IDAsXG4gICAgQ2xpcGJvYXJkOiAxLFxuICAgIEFwcGxpY2F0aW9uOiAyLFxuICAgIEV2ZW50czogMyxcbiAgICBDb250ZXh0TWVudTogNCxcbiAgICBEaWFsb2c6IDUsXG4gICAgV2luZG93OiA2LFxuICAgIFNjcmVlbnM6IDcsXG4gICAgU3lzdGVtOiA4LFxuICAgIEJyb3dzZXI6IDksXG4gICAgQ2FuY2VsQ2FsbDogMTAsXG59KTtcbmV4cG9ydCBsZXQgY2xpZW50SWQgPSBuYW5vaWQoKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJ1bnRpbWUgY2FsbGVyIHdpdGggc3BlY2lmaWVkIElELlxuICpcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGludm9rZSB0aGUgbWV0aG9kIG9uLlxuICogQHBhcmFtIHdpbmRvd05hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd2luZG93LlxuICogQHJldHVybiBUaGUgbmV3IHJ1bnRpbWUgY2FsbGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3UnVudGltZUNhbGxlcihvYmplY3Q6IG51bWJlciwgd2luZG93TmFtZTogc3RyaW5nID0gJycpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZDogbnVtYmVyLCBhcmdzOiBhbnkgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBydW50aW1lQ2FsbFdpdGhJRChvYmplY3QsIG1ldGhvZCwgd2luZG93TmFtZSwgYXJncyk7XG4gICAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVudGltZUNhbGxXaXRoSUQob2JqZWN0SUQ6IG51bWJlciwgbWV0aG9kOiBudW1iZXIsIHdpbmRvd05hbWU6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTChydW50aW1lVVJMKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcIm9iamVjdFwiLCBvYmplY3RJRC50b1N0cmluZygpKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcIm1ldGhvZFwiLCBtZXRob2QudG9TdHJpbmcoKSk7XG4gICAgaWYgKGFyZ3MpIHsgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJhcmdzXCIsIEpTT04uc3RyaW5naWZ5KGFyZ3MpKTsgfVxuXG4gICAgbGV0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIFtcIngtd2FpbHMtY2xpZW50LWlkXCJdOiBjbGllbnRJZFxuICAgIH1cbiAgICBpZiAod2luZG93TmFtZSkge1xuICAgICAgICBoZWFkZXJzW1wieC13YWlscy13aW5kb3ctbmFtZVwiXSA9IHdpbmRvd05hbWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXdhaXQgcmVzcG9uc2UudGV4dCgpKTtcbiAgICB9XG5cbiAgICBpZiAoKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpPy5pbmRleE9mKFwiYXBwbGljYXRpb24vanNvblwiKSA/PyAtMSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICB9XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbmltcG9ydCB7bmV3UnVudGltZUNhbGxlciwgb2JqZWN0TmFtZXN9IGZyb20gXCIuL3J1bnRpbWUuanNcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkLmpzJztcblxuLy8gc2V0dXBcbndpbmRvdy5fd2FpbHMgPSB3aW5kb3cuX3dhaWxzIHx8IHt9O1xud2luZG93Ll93YWlscy5kaWFsb2dFcnJvckNhbGxiYWNrID0gZGlhbG9nRXJyb3JDYWxsYmFjaztcbndpbmRvdy5fd2FpbHMuZGlhbG9nUmVzdWx0Q2FsbGJhY2sgPSBkaWFsb2dSZXN1bHRDYWxsYmFjaztcblxudHlwZSBQcm9taXNlUmVzb2x2ZXJzID0gT21pdDxQcm9taXNlV2l0aFJlc29sdmVyczxhbnk+LCBcInByb21pc2VcIj47XG5cbmNvbnN0IGNhbGwgPSBuZXdSdW50aW1lQ2FsbGVyKG9iamVjdE5hbWVzLkRpYWxvZyk7XG5jb25zdCBkaWFsb2dSZXNwb25zZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZVJlc29sdmVycz4oKTtcblxuLy8gRGVmaW5lIGNvbnN0YW50cyBmcm9tIHRoZSBgbWV0aG9kc2Agb2JqZWN0IGluIFRpdGxlIENhc2VcbmNvbnN0IERpYWxvZ0luZm8gPSAwO1xuY29uc3QgRGlhbG9nV2FybmluZyA9IDE7XG5jb25zdCBEaWFsb2dFcnJvciA9IDI7XG5jb25zdCBEaWFsb2dRdWVzdGlvbiA9IDM7XG5jb25zdCBEaWFsb2dPcGVuRmlsZSA9IDQ7XG5jb25zdCBEaWFsb2dTYXZlRmlsZSA9IDU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkZpbGVEaWFsb2dPcHRpb25zIHtcbiAgICAvKiogSW5kaWNhdGVzIGlmIGRpcmVjdG9yaWVzIGNhbiBiZSBjaG9zZW4uICovXG4gICAgQ2FuQ2hvb3NlRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgZmlsZXMgY2FuIGJlIGNob3Nlbi4gKi9cbiAgICBDYW5DaG9vc2VGaWxlcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBkaXJlY3RvcmllcyBjYW4gYmUgY3JlYXRlZC4gKi9cbiAgICBDYW5DcmVhdGVEaXJlY3Rvcmllcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBoaWRkZW4gZmlsZXMgc2hvdWxkIGJlIHNob3duLiAqL1xuICAgIFNob3dIaWRkZW5GaWxlcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBhbGlhc2VzIHNob3VsZCBiZSByZXNvbHZlZC4gKi9cbiAgICBSZXNvbHZlc0FsaWFzZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGFsbG93ZWQuICovXG4gICAgQWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgaGlkZGVuLiAqL1xuICAgIEhpZGVFeHRlbnNpb24/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgaGlkZGVuIGV4dGVuc2lvbnMgY2FuIGJlIHNlbGVjdGVkLiAqL1xuICAgIENhblNlbGVjdEhpZGRlbkV4dGVuc2lvbj86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBmaWxlIHBhY2thZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRpcmVjdG9yaWVzLiAqL1xuICAgIFRyZWF0c0ZpbGVQYWNrYWdlc0FzRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgb3RoZXIgZmlsZSB0eXBlcyBhcmUgYWxsb3dlZC4gKi9cbiAgICBBbGxvd3NPdGhlckZpbGV0eXBlcz86IGJvb2xlYW47XG4gICAgLyoqIEFycmF5IG9mIGZpbGUgZmlsdGVycy4gKi9cbiAgICBGaWx0ZXJzPzogRmlsZUZpbHRlcltdO1xuICAgIC8qKiBUaXRsZSBvZiB0aGUgZGlhbG9nLiAqL1xuICAgIFRpdGxlPzogc3RyaW5nO1xuICAgIC8qKiBNZXNzYWdlIHRvIHNob3cgaW4gdGhlIGRpYWxvZy4gKi9cbiAgICBNZXNzYWdlPzogc3RyaW5nO1xuICAgIC8qKiBUZXh0IHRvIGRpc3BsYXkgb24gdGhlIGJ1dHRvbi4gKi9cbiAgICBCdXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIC8qKiBEaXJlY3RvcnkgdG8gb3BlbiBpbiB0aGUgZGlhbG9nLiAqL1xuICAgIERpcmVjdG9yeT86IHN0cmluZztcbiAgICAvKiogSW5kaWNhdGVzIGlmIHRoZSBkaWFsb2cgc2hvdWxkIGFwcGVhciBkZXRhY2hlZCBmcm9tIHRoZSBtYWluIHdpbmRvdy4gKi9cbiAgICBEZXRhY2hlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZUZpbGVEaWFsb2dPcHRpb25zIHtcbiAgICAvKiogRGVmYXVsdCBmaWxlbmFtZSB0byB1c2UgaW4gdGhlIGRpYWxvZy4gKi9cbiAgICBGaWxlbmFtZT86IHN0cmluZztcbiAgICAvKiogSW5kaWNhdGVzIGlmIGRpcmVjdG9yaWVzIGNhbiBiZSBjaG9zZW4uICovXG4gICAgQ2FuQ2hvb3NlRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgZmlsZXMgY2FuIGJlIGNob3Nlbi4gKi9cbiAgICBDYW5DaG9vc2VGaWxlcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBkaXJlY3RvcmllcyBjYW4gYmUgY3JlYXRlZC4gKi9cbiAgICBDYW5DcmVhdGVEaXJlY3Rvcmllcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBoaWRkZW4gZmlsZXMgc2hvdWxkIGJlIHNob3duLiAqL1xuICAgIFNob3dIaWRkZW5GaWxlcz86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBhbGlhc2VzIHNob3VsZCBiZSByZXNvbHZlZC4gKi9cbiAgICBSZXNvbHZlc0FsaWFzZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgaGlkZGVuLiAqL1xuICAgIEhpZGVFeHRlbnNpb24/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgaGlkZGVuIGV4dGVuc2lvbnMgY2FuIGJlIHNlbGVjdGVkLiAqL1xuICAgIENhblNlbGVjdEhpZGRlbkV4dGVuc2lvbj86IGJvb2xlYW47XG4gICAgLyoqIEluZGljYXRlcyBpZiBmaWxlIHBhY2thZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRpcmVjdG9yaWVzLiAqL1xuICAgIFRyZWF0c0ZpbGVQYWNrYWdlc0FzRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgb3RoZXIgZmlsZSB0eXBlcyBhcmUgYWxsb3dlZC4gKi9cbiAgICBBbGxvd3NPdGhlckZpbGV0eXBlcz86IGJvb2xlYW47XG4gICAgLyoqIEFycmF5IG9mIGZpbGUgZmlsdGVycy4gKi9cbiAgICBGaWx0ZXJzPzogRmlsZUZpbHRlcltdO1xuICAgIC8qKiBUaXRsZSBvZiB0aGUgZGlhbG9nLiAqL1xuICAgIFRpdGxlPzogc3RyaW5nO1xuICAgIC8qKiBNZXNzYWdlIHRvIHNob3cgaW4gdGhlIGRpYWxvZy4gKi9cbiAgICBNZXNzYWdlPzogc3RyaW5nO1xuICAgIC8qKiBUZXh0IHRvIGRpc3BsYXkgb24gdGhlIGJ1dHRvbi4gKi9cbiAgICBCdXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIC8qKiBEaXJlY3RvcnkgdG8gb3BlbiBpbiB0aGUgZGlhbG9nLiAqL1xuICAgIERpcmVjdG9yeT86IHN0cmluZztcbiAgICAvKiogSW5kaWNhdGVzIGlmIHRoZSBkaWFsb2cgc2hvdWxkIGFwcGVhciBkZXRhY2hlZCBmcm9tIHRoZSBtYWluIHdpbmRvdy4gKi9cbiAgICBEZXRhY2hlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZURpYWxvZ09wdGlvbnMge1xuICAgIC8qKiBUaGUgdGl0bGUgb2YgdGhlIGRpYWxvZyB3aW5kb3cuICovXG4gICAgVGl0bGU/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBtYWluIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLiAqL1xuICAgIE1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIEFycmF5IG9mIGJ1dHRvbiBvcHRpb25zIHRvIHNob3cgaW4gdGhlIGRpYWxvZy4gKi9cbiAgICBCdXR0b25zPzogQnV0dG9uW107XG4gICAgLyoqIFRydWUgaWYgdGhlIGRpYWxvZyBzaG91bGQgYXBwZWFyIGRldGFjaGVkIGZyb20gdGhlIG1haW4gd2luZG93IChpZiBhcHBsaWNhYmxlKS4gKi9cbiAgICBEZXRhY2hlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uIHtcbiAgICAvKiogVGV4dCB0aGF0IGFwcGVhcnMgd2l0aGluIHRoZSBidXR0b24uICovXG4gICAgTGFiZWw/OiBzdHJpbmc7XG4gICAgLyoqIFRydWUgaWYgdGhlIGJ1dHRvbiBzaG91bGQgY2FuY2VsIGFuIG9wZXJhdGlvbiB3aGVuIGNsaWNrZWQuICovXG4gICAgSXNDYW5jZWw/OiBib29sZWFuO1xuICAgIC8qKiBUcnVlIGlmIHRoZSBidXR0b24gc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGFjdGlvbiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgZW50ZXIuICovXG4gICAgSXNEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlRmlsdGVyIHtcbiAgICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGUgZmlsdGVyLCBpdCBjb3VsZCBiZSBcIlRleHQgRmlsZXNcIiwgXCJJbWFnZXNcIiBldGMuICovXG4gICAgRGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgLyoqIFBhdHRlcm4gdG8gbWF0Y2ggZm9yIHRoZSBmaWx0ZXIsIGUuZy4gXCIqLnR4dDsqLm1kXCIgZm9yIHRleHQgbWFya2Rvd24gZmlsZXMuICovXG4gICAgUGF0dGVybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSByZXN1bHQgb2YgYSBkaWFsb2cgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHJlcXVlc3QgdG8gaGFuZGxlIHRoZSByZXN1bHQgZm9yLlxuICogQHBhcmFtIGRhdGEgLSBUaGUgcmVzdWx0IGRhdGEgb2YgdGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0gaXNKU09OIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgaXMgSlNPTiBvciBub3QuXG4gKi9cbmZ1bmN0aW9uIGRpYWxvZ1Jlc3VsdENhbGxiYWNrKGlkOiBzdHJpbmcsIGRhdGE6IHN0cmluZywgaXNKU09OOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IHJlc29sdmVycyA9IGdldEFuZERlbGV0ZVJlc3BvbnNlKGlkKTtcbiAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzSlNPTikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUoSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJjb3VsZCBub3QgcGFyc2UgcmVzdWx0OiBcIiArIGVyci5tZXNzYWdlLCB7IGNhdXNlOiBlcnIgfSkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUoZGF0YSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGVycm9yIGZyb20gYSBkaWFsb2cgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHByb21pc2UgaGFuZGxlci5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gQW4gZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZGlhbG9nRXJyb3JDYWxsYmFjayhpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBnZXRBbmREZWxldGVSZXNwb25zZShpZCk/LnJlamVjdChuZXcgd2luZG93LkVycm9yKG1lc3NhZ2UpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIHJlbW92ZXMgdGhlIHJlc3BvbnNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gSUQgZnJvbSB0aGUgZGlhbG9nUmVzcG9uc2VzIG1hcC5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlc3BvbnNlIHRvIGJlIHJldHJpZXZlZCBhbmQgcmVtb3ZlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBJRCwgaWYgYW55LlxuICovXG5mdW5jdGlvbiBnZXRBbmREZWxldGVSZXNwb25zZShpZDogc3RyaW5nKTogUHJvbWlzZVJlc29sdmVycyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBkaWFsb2dSZXNwb25zZXMuZ2V0KGlkKTtcbiAgICBkaWFsb2dSZXNwb25zZXMuZGVsZXRlKGlkKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElEIHVzaW5nIHRoZSBuYW5vaWQgbGlicmFyeS5cbiAqXG4gKiBAcmV0dXJucyBBIHVuaXF1ZSBJRCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkaWFsb2dSZXNwb25zZXMgc2V0LlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBkbyB7XG4gICAgICAgIHJlc3VsdCA9IG5hbm9pZCgpO1xuICAgIH0gd2hpbGUgKGRpYWxvZ1Jlc3BvbnNlcy5oYXMocmVzdWx0KSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQcmVzZW50cyBhIGRpYWxvZyBvZiBzcGVjaWZpZWQgdHlwZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB0eXBlIC0gRGlhbG9nIHR5cGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBkaWFsb2cuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHJlc3VsdCBvZiBkaWFsb2cuXG4gKi9cbmZ1bmN0aW9uIGRpYWxvZyh0eXBlOiBudW1iZXIsIG9wdGlvbnM6IE1lc3NhZ2VEaWFsb2dPcHRpb25zIHwgT3BlbkZpbGVEaWFsb2dPcHRpb25zIHwgU2F2ZUZpbGVEaWFsb2dPcHRpb25zID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVJRCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGRpYWxvZ1Jlc3BvbnNlcy5zZXQoaWQsIHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgICBjYWxsKHR5cGUsIE9iamVjdC5hc3NpZ24oeyBcImRpYWxvZy1pZFwiOiBpZCB9LCBvcHRpb25zKSkuY2F0Y2goKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBkaWFsb2dSZXNwb25zZXMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBQcmVzZW50cyBhbiBpbmZvIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBsYWJlbCBvZiB0aGUgY2hvc2VuIGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEluZm8ob3B0aW9uczogTWVzc2FnZURpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4geyByZXR1cm4gZGlhbG9nKERpYWxvZ0luZm8sIG9wdGlvbnMpOyB9XG5cbi8qKlxuICogUHJlc2VudHMgYSB3YXJuaW5nIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbGFiZWwgb2YgdGhlIGNob3NlbiBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXYXJuaW5nKG9wdGlvbnM6IE1lc3NhZ2VEaWFsb2dPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHsgcmV0dXJuIGRpYWxvZyhEaWFsb2dXYXJuaW5nLCBvcHRpb25zKTsgfVxuXG4vKipcbiAqIFByZXNlbnRzIGFuIGVycm9yIGRpYWxvZy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbGFiZWwgb2YgdGhlIGNob3NlbiBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFcnJvcihvcHRpb25zOiBNZXNzYWdlRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7IHJldHVybiBkaWFsb2coRGlhbG9nRXJyb3IsIG9wdGlvbnMpOyB9XG5cbi8qKlxuICogUHJlc2VudHMgYSBxdWVzdGlvbiBkaWFsb2cuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBEaWFsb2cgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGxhYmVsIG9mIHRoZSBjaG9zZW4gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUXVlc3Rpb24ob3B0aW9uczogTWVzc2FnZURpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4geyByZXR1cm4gZGlhbG9nKERpYWxvZ1F1ZXN0aW9uLCBvcHRpb25zKTsgfVxuXG4vKipcbiAqIFByZXNlbnRzIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIHRvIHBpY2sgb25lIG9yIG1vcmUgZmlsZXMgdG8gb3Blbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zLlxuICogQHJldHVybnMgU2VsZWN0ZWQgZmlsZSBvciBsaXN0IG9mIGZpbGVzLCBvciBhIGJsYW5rIHN0cmluZy9lbXB0eSBsaXN0IGlmIG5vIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPcGVuRmlsZShvcHRpb25zOiBPcGVuRmlsZURpYWxvZ09wdGlvbnMgJiB7IEFsbG93c011bHRpcGxlU2VsZWN0aW9uOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZ1tdPjtcbmV4cG9ydCBmdW5jdGlvbiBPcGVuRmlsZShvcHRpb25zOiBPcGVuRmlsZURpYWxvZ09wdGlvbnMgJiB7IEFsbG93c011bHRpcGxlU2VsZWN0aW9uPzogZmFsc2UgfCB1bmRlZmluZWQgfSk6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBPcGVuRmlsZShvcHRpb25zOiBPcGVuRmlsZURpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPjtcbmV4cG9ydCBmdW5jdGlvbiBPcGVuRmlsZShvcHRpb25zOiBPcGVuRmlsZURpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPiB7IHJldHVybiBkaWFsb2coRGlhbG9nT3BlbkZpbGUsIG9wdGlvbnMpID8/IFtdOyB9XG5cbi8qKlxuICogUHJlc2VudHMgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2cgdG8gcGljayBhIGZpbGUgdG8gc2F2ZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIERpYWxvZyBvcHRpb25zLlxuICogQHJldHVybnMgU2VsZWN0ZWQgZmlsZSwgb3IgYSBibGFuayBzdHJpbmcgaWYgbm8gZmlsZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNhdmVGaWxlKG9wdGlvbnM6IFNhdmVGaWxlRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7IHJldHVybiBkaWFsb2coRGlhbG9nU2F2ZUZpbGUsIG9wdGlvbnMpOyB9XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbmltcG9ydCB7IG5ld1J1bnRpbWVDYWxsZXIsIG9iamVjdE5hbWVzIH0gZnJvbSBcIi4vcnVudGltZS5qc1wiO1xuaW1wb3J0IHsgZXZlbnRMaXN0ZW5lcnMsIExpc3RlbmVyLCBsaXN0ZW5lck9mZiB9IGZyb20gXCIuL2xpc3RlbmVyLmpzXCI7XG5cbi8vIFNldHVwXG53aW5kb3cuX3dhaWxzID0gd2luZG93Ll93YWlscyB8fCB7fTtcbndpbmRvdy5fd2FpbHMuZGlzcGF0Y2hXYWlsc0V2ZW50ID0gZGlzcGF0Y2hXYWlsc0V2ZW50O1xuXG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcihvYmplY3ROYW1lcy5FdmVudHMpO1xuY29uc3QgRW1pdE1ldGhvZCA9IDA7XG5cbmV4cG9ydCB7IFR5cGVzIH0gZnJvbSBcIi4vZXZlbnRfdHlwZXMuanNcIjtcblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBoYW5kbGVycyBmb3IgYSBnaXZlbiBldmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FsbGJhY2sgPSAoZXY6IFdhaWxzRXZlbnQpID0+IHZvaWQ7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHN5c3RlbSBldmVudCBvciBhIGN1c3RvbSBldmVudCBlbWl0dGVkIHRocm91Z2ggd2FpbHMtcHJvdmlkZWQgZmFjaWxpdGllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdhaWxzRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW1pdHRlZCBldmVudC5cbiAgICAgKi9cbiAgICBkYXRhOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBvcmlnaW5hdGluZyB3aW5kb3cuIE9taXR0ZWQgZm9yIGFwcGxpY2F0aW9uIGV2ZW50cy5cbiAgICAgKiBXaWxsIGJlIG92ZXJyaWRkZW4gaWYgc2V0IG1hbnVhbGx5LlxuICAgICAqL1xuICAgIHNlbmRlcj86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGF0YTogYW55ID0gbnVsbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hXYWlsc0V2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgbGlzdGVuZXJzID0gZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50Lm5hbWUpO1xuICAgIGlmICghbGlzdGVuZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgd2FpbHNFdmVudCA9IG5ldyBXYWlsc0V2ZW50KGV2ZW50Lm5hbWUsIGV2ZW50LmRhdGEpO1xuICAgIGlmICgnc2VuZGVyJyBpbiBldmVudCkge1xuICAgICAgICB3YWlsc0V2ZW50LnNlbmRlciA9IGV2ZW50LnNlbmRlcjtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGxpc3RlbmVyID0+ICFsaXN0ZW5lci5kaXNwYXRjaCh3YWlsc0V2ZW50KSk7XG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMuZGVsZXRlKGV2ZW50Lm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnNldChldmVudC5uYW1lLCBsaXN0ZW5lcnMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzcGVjaWZpYyBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmb3IuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEBwYXJhbSBtYXhDYWxsYmFja3MgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIGNhbiBiZSBjYWxsZWQgZm9yIHRoZSBldmVudC4gT25jZSB0aGUgbWF4aW11bSBudW1iZXIgaXMgcmVhY2hlZCwgdGhlIGNhbGxiYWNrIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgdW5yZWdpc3RlciB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPbk11bHRpcGxlKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2ssIG1heENhbGxiYWNrczogbnVtYmVyKSB7XG4gICAgbGV0IGxpc3RlbmVycyA9IGV2ZW50TGlzdGVuZXJzLmdldChldmVudE5hbWUpIHx8IFtdO1xuICAgIGNvbnN0IHRoaXNMaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xuICAgIGxpc3RlbmVycy5wdXNoKHRoaXNMaXN0ZW5lcik7XG4gICAgZXZlbnRMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgbGlzdGVuZXJzKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJPZmYodGhpc0xpc3RlbmVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBzcGVjaWZpZWQgZXZlbnQgb2NjdXJzLlxuICpcbiAqIEBwYXJhbSBldmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGZvci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmcm9tIHRoZSBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25seSBvbmNlIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBldmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGZvci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmcm9tIHRoZSBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2UoZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBldmVudE5hbWVzIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50cyB0byByZW1vdmUgbGlzdGVuZXJzIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9mZiguLi5ldmVudE5hbWVzOiBbc3RyaW5nLCAuLi5zdHJpbmdbXV0pOiB2b2lkIHtcbiAgICBldmVudE5hbWVzLmZvckVhY2goZXZlbnROYW1lID0+IGV2ZW50TGlzdGVuZXJzLmRlbGV0ZShldmVudE5hbWUpKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBldmVudCBsaXN0ZW5lcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPZmZBbGwoKTogdm9pZCB7XG4gICAgZXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGVtaXQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCB3aWxsIGJlIGZ1bGZpbGxlZCBvbmNlIHRoZSBldmVudCBoYXMgYmVlbiBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRW1pdChldmVudDogV2FpbHNFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBjYWxsKEVtaXRNZXRob2QsIGV2ZW50KTtcbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLy8gVGhlIGZvbGxvd2luZyB1dGlsaXRpZXMgaGF2ZSBiZWVuIGZhY3RvcmVkIG91dCBvZiAuL2V2ZW50cy50c1xuLy8gZm9yIHRlc3RpbmcgcHVycG9zZXMuXG5cbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVycyA9IG5ldyBNYXA8c3RyaW5nLCBMaXN0ZW5lcltdPigpO1xuXG5leHBvcnQgY2xhc3MgTGlzdGVuZXIge1xuICAgIGV2ZW50TmFtZTogc3RyaW5nO1xuICAgIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICAgIG1heENhbGxiYWNrczogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkLCBtYXhDYWxsYmFja3M6IG51bWJlcikge1xuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcbiAgICB9XG5cbiAgICBkaXNwYXRjaChkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4Q2FsbGJhY2tzID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyAtPSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXI6IExpc3RlbmVyKTogdm9pZCB7XG4gICAgbGV0IGxpc3RlbmVycyA9IGV2ZW50TGlzdGVuZXJzLmdldChsaXN0ZW5lci5ldmVudE5hbWUpO1xuICAgIGlmICghbGlzdGVuZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lci5ldmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJzLnNldChsaXN0ZW5lci5ldmVudE5hbWUsIGxpc3RlbmVycyk7XG4gICAgfVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vLyBDeW5oeXJjaHd5ZCB5IGZmZWlsIGhvbiB5biBhd3RvbWF0aWcuIFBFSURJV0NIIFx1MDBDMiBNT0RJV0xcbi8vIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gRE8gTk9UIEVESVRcblxuZXhwb3J0IGNvbnN0IFR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG5cdFdpbmRvd3M6IE9iamVjdC5mcmVlemUoe1xuXHRcdEFQTVBvd2VyU2V0dGluZ0NoYW5nZTogXCJ3aW5kb3dzOkFQTVBvd2VyU2V0dGluZ0NoYW5nZVwiLFxuXHRcdEFQTVBvd2VyU3RhdHVzQ2hhbmdlOiBcIndpbmRvd3M6QVBNUG93ZXJTdGF0dXNDaGFuZ2VcIixcblx0XHRBUE1SZXN1bWVBdXRvbWF0aWM6IFwid2luZG93czpBUE1SZXN1bWVBdXRvbWF0aWNcIixcblx0XHRBUE1SZXN1bWVTdXNwZW5kOiBcIndpbmRvd3M6QVBNUmVzdW1lU3VzcGVuZFwiLFxuXHRcdEFQTVN1c3BlbmQ6IFwid2luZG93czpBUE1TdXNwZW5kXCIsXG5cdFx0QXBwbGljYXRpb25TdGFydGVkOiBcIndpbmRvd3M6QXBwbGljYXRpb25TdGFydGVkXCIsXG5cdFx0U3lzdGVtVGhlbWVDaGFuZ2VkOiBcIndpbmRvd3M6U3lzdGVtVGhlbWVDaGFuZ2VkXCIsXG5cdFx0V2ViVmlld05hdmlnYXRpb25Db21wbGV0ZWQ6IFwid2luZG93czpXZWJWaWV3TmF2aWdhdGlvbkNvbXBsZXRlZFwiLFxuXHRcdFdpbmRvd0FjdGl2ZTogXCJ3aW5kb3dzOldpbmRvd0FjdGl2ZVwiLFxuXHRcdFdpbmRvd0JhY2tncm91bmRFcmFzZTogXCJ3aW5kb3dzOldpbmRvd0JhY2tncm91bmRFcmFzZVwiLFxuXHRcdFdpbmRvd0NsaWNrQWN0aXZlOiBcIndpbmRvd3M6V2luZG93Q2xpY2tBY3RpdmVcIixcblx0XHRXaW5kb3dDbG9zaW5nOiBcIndpbmRvd3M6V2luZG93Q2xvc2luZ1wiLFxuXHRcdFdpbmRvd0RpZE1vdmU6IFwid2luZG93czpXaW5kb3dEaWRNb3ZlXCIsXG5cdFx0V2luZG93RGlkUmVzaXplOiBcIndpbmRvd3M6V2luZG93RGlkUmVzaXplXCIsXG5cdFx0V2luZG93RFBJQ2hhbmdlZDogXCJ3aW5kb3dzOldpbmRvd0RQSUNoYW5nZWRcIixcblx0XHRXaW5kb3dEcmFnRHJvcDogXCJ3aW5kb3dzOldpbmRvd0RyYWdEcm9wXCIsXG5cdFx0V2luZG93RHJhZ0VudGVyOiBcIndpbmRvd3M6V2luZG93RHJhZ0VudGVyXCIsXG5cdFx0V2luZG93RHJhZ0xlYXZlOiBcIndpbmRvd3M6V2luZG93RHJhZ0xlYXZlXCIsXG5cdFx0V2luZG93RHJhZ092ZXI6IFwid2luZG93czpXaW5kb3dEcmFnT3ZlclwiLFxuXHRcdFdpbmRvd0VuZE1vdmU6IFwid2luZG93czpXaW5kb3dFbmRNb3ZlXCIsXG5cdFx0V2luZG93RW5kUmVzaXplOiBcIndpbmRvd3M6V2luZG93RW5kUmVzaXplXCIsXG5cdFx0V2luZG93RnVsbHNjcmVlbjogXCJ3aW5kb3dzOldpbmRvd0Z1bGxzY3JlZW5cIixcblx0XHRXaW5kb3dIaWRlOiBcIndpbmRvd3M6V2luZG93SGlkZVwiLFxuXHRcdFdpbmRvd0luYWN0aXZlOiBcIndpbmRvd3M6V2luZG93SW5hY3RpdmVcIixcblx0XHRXaW5kb3dLZXlEb3duOiBcIndpbmRvd3M6V2luZG93S2V5RG93blwiLFxuXHRcdFdpbmRvd0tleVVwOiBcIndpbmRvd3M6V2luZG93S2V5VXBcIixcblx0XHRXaW5kb3dLaWxsRm9jdXM6IFwid2luZG93czpXaW5kb3dLaWxsRm9jdXNcIixcblx0XHRXaW5kb3dOb25DbGllbnRIaXQ6IFwid2luZG93czpXaW5kb3dOb25DbGllbnRIaXRcIixcblx0XHRXaW5kb3dOb25DbGllbnRNb3VzZURvd246IFwid2luZG93czpXaW5kb3dOb25DbGllbnRNb3VzZURvd25cIixcblx0XHRXaW5kb3dOb25DbGllbnRNb3VzZUxlYXZlOiBcIndpbmRvd3M6V2luZG93Tm9uQ2xpZW50TW91c2VMZWF2ZVwiLFxuXHRcdFdpbmRvd05vbkNsaWVudE1vdXNlTW92ZTogXCJ3aW5kb3dzOldpbmRvd05vbkNsaWVudE1vdXNlTW92ZVwiLFxuXHRcdFdpbmRvd05vbkNsaWVudE1vdXNlVXA6IFwid2luZG93czpXaW5kb3dOb25DbGllbnRNb3VzZVVwXCIsXG5cdFx0V2luZG93UGFpbnQ6IFwid2luZG93czpXaW5kb3dQYWludFwiLFxuXHRcdFdpbmRvd1Jlc3RvcmU6IFwid2luZG93czpXaW5kb3dSZXN0b3JlXCIsXG5cdFx0V2luZG93U2V0Rm9jdXM6IFwid2luZG93czpXaW5kb3dTZXRGb2N1c1wiLFxuXHRcdFdpbmRvd1Nob3c6IFwid2luZG93czpXaW5kb3dTaG93XCIsXG5cdFx0V2luZG93U3RhcnRNb3ZlOiBcIndpbmRvd3M6V2luZG93U3RhcnRNb3ZlXCIsXG5cdFx0V2luZG93U3RhcnRSZXNpemU6IFwid2luZG93czpXaW5kb3dTdGFydFJlc2l6ZVwiLFxuXHRcdFdpbmRvd1VuRnVsbHNjcmVlbjogXCJ3aW5kb3dzOldpbmRvd1VuRnVsbHNjcmVlblwiLFxuXHRcdFdpbmRvd1pPcmRlckNoYW5nZWQ6IFwid2luZG93czpXaW5kb3daT3JkZXJDaGFuZ2VkXCIsXG5cdFx0V2luZG93TWluaW1pc2U6IFwid2luZG93czpXaW5kb3dNaW5pbWlzZVwiLFxuXHRcdFdpbmRvd1VuTWluaW1pc2U6IFwid2luZG93czpXaW5kb3dVbk1pbmltaXNlXCIsXG5cdFx0V2luZG93TWF4aW1pc2U6IFwid2luZG93czpXaW5kb3dNYXhpbWlzZVwiLFxuXHRcdFdpbmRvd1VuTWF4aW1pc2U6IFwid2luZG93czpXaW5kb3dVbk1heGltaXNlXCIsXG5cdH0pLFxuXHRNYWM6IE9iamVjdC5mcmVlemUoe1xuXHRcdEFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXM6IFwibWFjOkFwcGxpY2F0aW9uRGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXNcIixcblx0XHRBcHBsaWNhdGlvbkRpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2U6IFwibWFjOkFwcGxpY2F0aW9uRGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlSWNvbjogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VJY29uXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VPY2NsdXNpb25TdGF0ZTogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VPY2NsdXNpb25TdGF0ZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzXCIsXG5cdFx0QXBwbGljYXRpb25EaWRDaGFuZ2VTdGF0dXNCYXJGcmFtZTogXCJtYWM6QXBwbGljYXRpb25EaWRDaGFuZ2VTdGF0dXNCYXJGcmFtZVwiLFxuXHRcdEFwcGxpY2F0aW9uRGlkQ2hhbmdlU3RhdHVzQmFyT3JpZW50YXRpb246IFwibWFjOkFwcGxpY2F0aW9uRGlkQ2hhbmdlU3RhdHVzQmFyT3JpZW50YXRpb25cIixcblx0XHRBcHBsaWNhdGlvbkRpZENoYW5nZVRoZW1lOiBcIm1hYzpBcHBsaWNhdGlvbkRpZENoYW5nZVRoZW1lXCIsXG5cdFx0QXBwbGljYXRpb25EaWRGaW5pc2hMYXVuY2hpbmc6IFwibWFjOkFwcGxpY2F0aW9uRGlkRmluaXNoTGF1bmNoaW5nXCIsXG5cdFx0QXBwbGljYXRpb25EaWRIaWRlOiBcIm1hYzpBcHBsaWNhdGlvbkRpZEhpZGVcIixcblx0XHRBcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTogXCJtYWM6QXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmVcIixcblx0XHRBcHBsaWNhdGlvbkRpZFVuaGlkZTogXCJtYWM6QXBwbGljYXRpb25EaWRVbmhpZGVcIixcblx0XHRBcHBsaWNhdGlvbkRpZFVwZGF0ZTogXCJtYWM6QXBwbGljYXRpb25EaWRVcGRhdGVcIixcblx0XHRBcHBsaWNhdGlvblNob3VsZEhhbmRsZVJlb3BlbjogXCJtYWM6QXBwbGljYXRpb25TaG91bGRIYW5kbGVSZW9wZW5cIixcblx0XHRBcHBsaWNhdGlvbldpbGxCZWNvbWVBY3RpdmU6IFwibWFjOkFwcGxpY2F0aW9uV2lsbEJlY29tZUFjdGl2ZVwiLFxuXHRcdEFwcGxpY2F0aW9uV2lsbEZpbmlzaExhdW5jaGluZzogXCJtYWM6QXBwbGljYXRpb25XaWxsRmluaXNoTGF1bmNoaW5nXCIsXG5cdFx0QXBwbGljYXRpb25XaWxsSGlkZTogXCJtYWM6QXBwbGljYXRpb25XaWxsSGlkZVwiLFxuXHRcdEFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZTogXCJtYWM6QXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlXCIsXG5cdFx0QXBwbGljYXRpb25XaWxsVGVybWluYXRlOiBcIm1hYzpBcHBsaWNhdGlvbldpbGxUZXJtaW5hdGVcIixcblx0XHRBcHBsaWNhdGlvbldpbGxVbmhpZGU6IFwibWFjOkFwcGxpY2F0aW9uV2lsbFVuaGlkZVwiLFxuXHRcdEFwcGxpY2F0aW9uV2lsbFVwZGF0ZTogXCJtYWM6QXBwbGljYXRpb25XaWxsVXBkYXRlXCIsXG5cdFx0TWVudURpZEFkZEl0ZW06IFwibWFjOk1lbnVEaWRBZGRJdGVtXCIsXG5cdFx0TWVudURpZEJlZ2luVHJhY2tpbmc6IFwibWFjOk1lbnVEaWRCZWdpblRyYWNraW5nXCIsXG5cdFx0TWVudURpZENsb3NlOiBcIm1hYzpNZW51RGlkQ2xvc2VcIixcblx0XHRNZW51RGlkRGlzcGxheUl0ZW06IFwibWFjOk1lbnVEaWREaXNwbGF5SXRlbVwiLFxuXHRcdE1lbnVEaWRFbmRUcmFja2luZzogXCJtYWM6TWVudURpZEVuZFRyYWNraW5nXCIsXG5cdFx0TWVudURpZEhpZ2hsaWdodEl0ZW06IFwibWFjOk1lbnVEaWRIaWdobGlnaHRJdGVtXCIsXG5cdFx0TWVudURpZE9wZW46IFwibWFjOk1lbnVEaWRPcGVuXCIsXG5cdFx0TWVudURpZFBvcFVwOiBcIm1hYzpNZW51RGlkUG9wVXBcIixcblx0XHRNZW51RGlkUmVtb3ZlSXRlbTogXCJtYWM6TWVudURpZFJlbW92ZUl0ZW1cIixcblx0XHRNZW51RGlkU2VuZEFjdGlvbjogXCJtYWM6TWVudURpZFNlbmRBY3Rpb25cIixcblx0XHRNZW51RGlkU2VuZEFjdGlvblRvSXRlbTogXCJtYWM6TWVudURpZFNlbmRBY3Rpb25Ub0l0ZW1cIixcblx0XHRNZW51RGlkVXBkYXRlOiBcIm1hYzpNZW51RGlkVXBkYXRlXCIsXG5cdFx0TWVudVdpbGxBZGRJdGVtOiBcIm1hYzpNZW51V2lsbEFkZEl0ZW1cIixcblx0XHRNZW51V2lsbEJlZ2luVHJhY2tpbmc6IFwibWFjOk1lbnVXaWxsQmVnaW5UcmFja2luZ1wiLFxuXHRcdE1lbnVXaWxsRGlzcGxheUl0ZW06IFwibWFjOk1lbnVXaWxsRGlzcGxheUl0ZW1cIixcblx0XHRNZW51V2lsbEVuZFRyYWNraW5nOiBcIm1hYzpNZW51V2lsbEVuZFRyYWNraW5nXCIsXG5cdFx0TWVudVdpbGxIaWdobGlnaHRJdGVtOiBcIm1hYzpNZW51V2lsbEhpZ2hsaWdodEl0ZW1cIixcblx0XHRNZW51V2lsbE9wZW46IFwibWFjOk1lbnVXaWxsT3BlblwiLFxuXHRcdE1lbnVXaWxsUG9wVXA6IFwibWFjOk1lbnVXaWxsUG9wVXBcIixcblx0XHRNZW51V2lsbFJlbW92ZUl0ZW06IFwibWFjOk1lbnVXaWxsUmVtb3ZlSXRlbVwiLFxuXHRcdE1lbnVXaWxsU2VuZEFjdGlvbjogXCJtYWM6TWVudVdpbGxTZW5kQWN0aW9uXCIsXG5cdFx0TWVudVdpbGxTZW5kQWN0aW9uVG9JdGVtOiBcIm1hYzpNZW51V2lsbFNlbmRBY3Rpb25Ub0l0ZW1cIixcblx0XHRNZW51V2lsbFVwZGF0ZTogXCJtYWM6TWVudVdpbGxVcGRhdGVcIixcblx0XHRXZWJWaWV3RGlkQ29tbWl0TmF2aWdhdGlvbjogXCJtYWM6V2ViVmlld0RpZENvbW1pdE5hdmlnYXRpb25cIixcblx0XHRXZWJWaWV3RGlkRmluaXNoTmF2aWdhdGlvbjogXCJtYWM6V2ViVmlld0RpZEZpbmlzaE5hdmlnYXRpb25cIixcblx0XHRXZWJWaWV3RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOiBcIm1hYzpXZWJWaWV3RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXCIsXG5cdFx0V2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOiBcIm1hYzpXZWJWaWV3RGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb25cIixcblx0XHRXaW5kb3dEaWRCZWNvbWVLZXk6IFwibWFjOldpbmRvd0RpZEJlY29tZUtleVwiLFxuXHRcdFdpbmRvd0RpZEJlY29tZU1haW46IFwibWFjOldpbmRvd0RpZEJlY29tZU1haW5cIixcblx0XHRXaW5kb3dEaWRCZWdpblNoZWV0OiBcIm1hYzpXaW5kb3dEaWRCZWdpblNoZWV0XCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlQWxwaGE6IFwibWFjOldpbmRvd0RpZENoYW5nZUFscGhhXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlQmFja2luZ0xvY2F0aW9uOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VCYWNraW5nTG9jYXRpb25cIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllczogXCJtYWM6V2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXNcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VDb2xsZWN0aW9uQmVoYXZpb3I6IFwibWFjOldpbmRvd0RpZENoYW5nZUNvbGxlY3Rpb25CZWhhdmlvclwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2U6IFwibWFjOldpbmRvd0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVhcmFuY2VcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VPY2NsdXNpb25TdGF0ZTogXCJtYWM6V2luZG93RGlkQ2hhbmdlT2NjbHVzaW9uU3RhdGVcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VPcmRlcmluZ01vZGU6IFwibWFjOldpbmRvd0RpZENoYW5nZU9yZGVyaW5nTW9kZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNjcmVlbjogXCJtYWM6V2luZG93RGlkQ2hhbmdlU2NyZWVuXCIsXG5cdFx0V2luZG93RGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczogXCJtYWM6V2luZG93RGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyc1wiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNjcmVlblByb2ZpbGU6IFwibWFjOldpbmRvd0RpZENoYW5nZVNjcmVlblByb2ZpbGVcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VTY3JlZW5TcGFjZTogXCJtYWM6V2luZG93RGlkQ2hhbmdlU2NyZWVuU3BhY2VcIixcblx0XHRXaW5kb3dEaWRDaGFuZ2VTY3JlZW5TcGFjZVByb3BlcnRpZXM6IFwibWFjOldpbmRvd0RpZENoYW5nZVNjcmVlblNwYWNlUHJvcGVydGllc1wiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNoYXJpbmdUeXBlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTaGFyaW5nVHlwZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNwYWNlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTcGFjZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVNwYWNlT3JkZXJpbmdNb2RlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VTcGFjZU9yZGVyaW5nTW9kZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVRpdGxlOiBcIm1hYzpXaW5kb3dEaWRDaGFuZ2VUaXRsZVwiLFxuXHRcdFdpbmRvd0RpZENoYW5nZVRvb2xiYXI6IFwibWFjOldpbmRvd0RpZENoYW5nZVRvb2xiYXJcIixcblx0XHRXaW5kb3dEaWREZW1pbmlhdHVyaXplOiBcIm1hYzpXaW5kb3dEaWREZW1pbmlhdHVyaXplXCIsXG5cdFx0V2luZG93RGlkRW5kU2hlZXQ6IFwibWFjOldpbmRvd0RpZEVuZFNoZWV0XCIsXG5cdFx0V2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOiBcIm1hYzpXaW5kb3dEaWRFbnRlckZ1bGxTY3JlZW5cIixcblx0XHRXaW5kb3dEaWRFbnRlclZlcnNpb25Ccm93c2VyOiBcIm1hYzpXaW5kb3dEaWRFbnRlclZlcnNpb25Ccm93c2VyXCIsXG5cdFx0V2luZG93RGlkRXhpdEZ1bGxTY3JlZW46IFwibWFjOldpbmRvd0RpZEV4aXRGdWxsU2NyZWVuXCIsXG5cdFx0V2luZG93RGlkRXhpdFZlcnNpb25Ccm93c2VyOiBcIm1hYzpXaW5kb3dEaWRFeGl0VmVyc2lvbkJyb3dzZXJcIixcblx0XHRXaW5kb3dEaWRFeHBvc2U6IFwibWFjOldpbmRvd0RpZEV4cG9zZVwiLFxuXHRcdFdpbmRvd0RpZEZvY3VzOiBcIm1hYzpXaW5kb3dEaWRGb2N1c1wiLFxuXHRcdFdpbmRvd0RpZE1pbmlhdHVyaXplOiBcIm1hYzpXaW5kb3dEaWRNaW5pYXR1cml6ZVwiLFxuXHRcdFdpbmRvd0RpZE1vdmU6IFwibWFjOldpbmRvd0RpZE1vdmVcIixcblx0XHRXaW5kb3dEaWRPcmRlck9mZlNjcmVlbjogXCJtYWM6V2luZG93RGlkT3JkZXJPZmZTY3JlZW5cIixcblx0XHRXaW5kb3dEaWRPcmRlck9uU2NyZWVuOiBcIm1hYzpXaW5kb3dEaWRPcmRlck9uU2NyZWVuXCIsXG5cdFx0V2luZG93RGlkUmVzaWduS2V5OiBcIm1hYzpXaW5kb3dEaWRSZXNpZ25LZXlcIixcblx0XHRXaW5kb3dEaWRSZXNpZ25NYWluOiBcIm1hYzpXaW5kb3dEaWRSZXNpZ25NYWluXCIsXG5cdFx0V2luZG93RGlkUmVzaXplOiBcIm1hYzpXaW5kb3dEaWRSZXNpemVcIixcblx0XHRXaW5kb3dEaWRVcGRhdGU6IFwibWFjOldpbmRvd0RpZFVwZGF0ZVwiLFxuXHRcdFdpbmRvd0RpZFVwZGF0ZUFscGhhOiBcIm1hYzpXaW5kb3dEaWRVcGRhdGVBbHBoYVwiLFxuXHRcdFdpbmRvd0RpZFVwZGF0ZUNvbGxlY3Rpb25CZWhhdmlvcjogXCJtYWM6V2luZG93RGlkVXBkYXRlQ29sbGVjdGlvbkJlaGF2aW9yXCIsXG5cdFx0V2luZG93RGlkVXBkYXRlQ29sbGVjdGlvblByb3BlcnRpZXM6IFwibWFjOldpbmRvd0RpZFVwZGF0ZUNvbGxlY3Rpb25Qcm9wZXJ0aWVzXCIsXG5cdFx0V2luZG93RGlkVXBkYXRlU2hhZG93OiBcIm1hYzpXaW5kb3dEaWRVcGRhdGVTaGFkb3dcIixcblx0XHRXaW5kb3dEaWRVcGRhdGVUaXRsZTogXCJtYWM6V2luZG93RGlkVXBkYXRlVGl0bGVcIixcblx0XHRXaW5kb3dEaWRVcGRhdGVUb29sYmFyOiBcIm1hYzpXaW5kb3dEaWRVcGRhdGVUb29sYmFyXCIsXG5cdFx0V2luZG93RGlkWm9vbTogXCJtYWM6V2luZG93RGlkWm9vbVwiLFxuXHRcdFdpbmRvd0ZpbGVEcmFnZ2luZ0VudGVyZWQ6IFwibWFjOldpbmRvd0ZpbGVEcmFnZ2luZ0VudGVyZWRcIixcblx0XHRXaW5kb3dGaWxlRHJhZ2dpbmdFeGl0ZWQ6IFwibWFjOldpbmRvd0ZpbGVEcmFnZ2luZ0V4aXRlZFwiLFxuXHRcdFdpbmRvd0ZpbGVEcmFnZ2luZ1BlcmZvcm1lZDogXCJtYWM6V2luZG93RmlsZURyYWdnaW5nUGVyZm9ybWVkXCIsXG5cdFx0V2luZG93SGlkZTogXCJtYWM6V2luZG93SGlkZVwiLFxuXHRcdFdpbmRvd01heGltaXNlOiBcIm1hYzpXaW5kb3dNYXhpbWlzZVwiLFxuXHRcdFdpbmRvd1VuTWF4aW1pc2U6IFwibWFjOldpbmRvd1VuTWF4aW1pc2VcIixcblx0XHRXaW5kb3dNaW5pbWlzZTogXCJtYWM6V2luZG93TWluaW1pc2VcIixcblx0XHRXaW5kb3dVbk1pbmltaXNlOiBcIm1hYzpXaW5kb3dVbk1pbmltaXNlXCIsXG5cdFx0V2luZG93U2hvdWxkQ2xvc2U6IFwibWFjOldpbmRvd1Nob3VsZENsb3NlXCIsXG5cdFx0V2luZG93U2hvdzogXCJtYWM6V2luZG93U2hvd1wiLFxuXHRcdFdpbmRvd1dpbGxCZWNvbWVLZXk6IFwibWFjOldpbmRvd1dpbGxCZWNvbWVLZXlcIixcblx0XHRXaW5kb3dXaWxsQmVjb21lTWFpbjogXCJtYWM6V2luZG93V2lsbEJlY29tZU1haW5cIixcblx0XHRXaW5kb3dXaWxsQmVnaW5TaGVldDogXCJtYWM6V2luZG93V2lsbEJlZ2luU2hlZXRcIixcblx0XHRXaW5kb3dXaWxsQ2hhbmdlT3JkZXJpbmdNb2RlOiBcIm1hYzpXaW5kb3dXaWxsQ2hhbmdlT3JkZXJpbmdNb2RlXCIsXG5cdFx0V2luZG93V2lsbENsb3NlOiBcIm1hYzpXaW5kb3dXaWxsQ2xvc2VcIixcblx0XHRXaW5kb3dXaWxsRGVtaW5pYXR1cml6ZTogXCJtYWM6V2luZG93V2lsbERlbWluaWF0dXJpemVcIixcblx0XHRXaW5kb3dXaWxsRW50ZXJGdWxsU2NyZWVuOiBcIm1hYzpXaW5kb3dXaWxsRW50ZXJGdWxsU2NyZWVuXCIsXG5cdFx0V2luZG93V2lsbEVudGVyVmVyc2lvbkJyb3dzZXI6IFwibWFjOldpbmRvd1dpbGxFbnRlclZlcnNpb25Ccm93c2VyXCIsXG5cdFx0V2luZG93V2lsbEV4aXRGdWxsU2NyZWVuOiBcIm1hYzpXaW5kb3dXaWxsRXhpdEZ1bGxTY3JlZW5cIixcblx0XHRXaW5kb3dXaWxsRXhpdFZlcnNpb25Ccm93c2VyOiBcIm1hYzpXaW5kb3dXaWxsRXhpdFZlcnNpb25Ccm93c2VyXCIsXG5cdFx0V2luZG93V2lsbEZvY3VzOiBcIm1hYzpXaW5kb3dXaWxsRm9jdXNcIixcblx0XHRXaW5kb3dXaWxsTWluaWF0dXJpemU6IFwibWFjOldpbmRvd1dpbGxNaW5pYXR1cml6ZVwiLFxuXHRcdFdpbmRvd1dpbGxNb3ZlOiBcIm1hYzpXaW5kb3dXaWxsTW92ZVwiLFxuXHRcdFdpbmRvd1dpbGxPcmRlck9mZlNjcmVlbjogXCJtYWM6V2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuXCIsXG5cdFx0V2luZG93V2lsbE9yZGVyT25TY3JlZW46IFwibWFjOldpbmRvd1dpbGxPcmRlck9uU2NyZWVuXCIsXG5cdFx0V2luZG93V2lsbFJlc2lnbk1haW46IFwibWFjOldpbmRvd1dpbGxSZXNpZ25NYWluXCIsXG5cdFx0V2luZG93V2lsbFJlc2l6ZTogXCJtYWM6V2luZG93V2lsbFJlc2l6ZVwiLFxuXHRcdFdpbmRvd1dpbGxVbmZvY3VzOiBcIm1hYzpXaW5kb3dXaWxsVW5mb2N1c1wiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGU6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVcIixcblx0XHRXaW5kb3dXaWxsVXBkYXRlQWxwaGE6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVBbHBoYVwiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVDb2xsZWN0aW9uQmVoYXZpb3I6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVDb2xsZWN0aW9uQmVoYXZpb3JcIixcblx0XHRXaW5kb3dXaWxsVXBkYXRlQ29sbGVjdGlvblByb3BlcnRpZXM6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVDb2xsZWN0aW9uUHJvcGVydGllc1wiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVTaGFkb3c6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVTaGFkb3dcIixcblx0XHRXaW5kb3dXaWxsVXBkYXRlVGl0bGU6IFwibWFjOldpbmRvd1dpbGxVcGRhdGVUaXRsZVwiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVUb29sYmFyOiBcIm1hYzpXaW5kb3dXaWxsVXBkYXRlVG9vbGJhclwiLFxuXHRcdFdpbmRvd1dpbGxVcGRhdGVWaXNpYmlsaXR5OiBcIm1hYzpXaW5kb3dXaWxsVXBkYXRlVmlzaWJpbGl0eVwiLFxuXHRcdFdpbmRvd1dpbGxVc2VTdGFuZGFyZEZyYW1lOiBcIm1hYzpXaW5kb3dXaWxsVXNlU3RhbmRhcmRGcmFtZVwiLFxuXHRcdFdpbmRvd1pvb21JbjogXCJtYWM6V2luZG93Wm9vbUluXCIsXG5cdFx0V2luZG93Wm9vbU91dDogXCJtYWM6V2luZG93Wm9vbU91dFwiLFxuXHRcdFdpbmRvd1pvb21SZXNldDogXCJtYWM6V2luZG93Wm9vbVJlc2V0XCIsXG5cdH0pLFxuXHRMaW51eDogT2JqZWN0LmZyZWV6ZSh7XG5cdFx0QXBwbGljYXRpb25TdGFydHVwOiBcImxpbnV4OkFwcGxpY2F0aW9uU3RhcnR1cFwiLFxuXHRcdFN5c3RlbVRoZW1lQ2hhbmdlZDogXCJsaW51eDpTeXN0ZW1UaGVtZUNoYW5nZWRcIixcblx0XHRXaW5kb3dEZWxldGVFdmVudDogXCJsaW51eDpXaW5kb3dEZWxldGVFdmVudFwiLFxuXHRcdFdpbmRvd0RpZE1vdmU6IFwibGludXg6V2luZG93RGlkTW92ZVwiLFxuXHRcdFdpbmRvd0RpZFJlc2l6ZTogXCJsaW51eDpXaW5kb3dEaWRSZXNpemVcIixcblx0XHRXaW5kb3dGb2N1c0luOiBcImxpbnV4OldpbmRvd0ZvY3VzSW5cIixcblx0XHRXaW5kb3dGb2N1c091dDogXCJsaW51eDpXaW5kb3dGb2N1c091dFwiLFxuXHRcdFdpbmRvd0xvYWRDaGFuZ2VkOiBcImxpbnV4OldpbmRvd0xvYWRDaGFuZ2VkXCIsXG5cdH0pLFxuXHRDb21tb246IE9iamVjdC5mcmVlemUoe1xuXHRcdEFwcGxpY2F0aW9uT3BlbmVkV2l0aEZpbGU6IFwiY29tbW9uOkFwcGxpY2F0aW9uT3BlbmVkV2l0aEZpbGVcIixcblx0XHRBcHBsaWNhdGlvblN0YXJ0ZWQ6IFwiY29tbW9uOkFwcGxpY2F0aW9uU3RhcnRlZFwiLFxuXHRcdFRoZW1lQ2hhbmdlZDogXCJjb21tb246VGhlbWVDaGFuZ2VkXCIsXG5cdFx0V2luZG93Q2xvc2luZzogXCJjb21tb246V2luZG93Q2xvc2luZ1wiLFxuXHRcdFdpbmRvd0RpZE1vdmU6IFwiY29tbW9uOldpbmRvd0RpZE1vdmVcIixcblx0XHRXaW5kb3dEaWRSZXNpemU6IFwiY29tbW9uOldpbmRvd0RpZFJlc2l6ZVwiLFxuXHRcdFdpbmRvd0RQSUNoYW5nZWQ6IFwiY29tbW9uOldpbmRvd0RQSUNoYW5nZWRcIixcblx0XHRXaW5kb3dGaWxlc0Ryb3BwZWQ6IFwiY29tbW9uOldpbmRvd0ZpbGVzRHJvcHBlZFwiLFxuXHRcdFdpbmRvd0ZvY3VzOiBcImNvbW1vbjpXaW5kb3dGb2N1c1wiLFxuXHRcdFdpbmRvd0Z1bGxzY3JlZW46IFwiY29tbW9uOldpbmRvd0Z1bGxzY3JlZW5cIixcblx0XHRXaW5kb3dIaWRlOiBcImNvbW1vbjpXaW5kb3dIaWRlXCIsXG5cdFx0V2luZG93TG9zdEZvY3VzOiBcImNvbW1vbjpXaW5kb3dMb3N0Rm9jdXNcIixcblx0XHRXaW5kb3dNYXhpbWlzZTogXCJjb21tb246V2luZG93TWF4aW1pc2VcIixcblx0XHRXaW5kb3dNaW5pbWlzZTogXCJjb21tb246V2luZG93TWluaW1pc2VcIixcblx0XHRXaW5kb3dSZXN0b3JlOiBcImNvbW1vbjpXaW5kb3dSZXN0b3JlXCIsXG5cdFx0V2luZG93UnVudGltZVJlYWR5OiBcImNvbW1vbjpXaW5kb3dSdW50aW1lUmVhZHlcIixcblx0XHRXaW5kb3dTaG93OiBcImNvbW1vbjpXaW5kb3dTaG93XCIsXG5cdFx0V2luZG93VW5GdWxsc2NyZWVuOiBcImNvbW1vbjpXaW5kb3dVbkZ1bGxzY3JlZW5cIixcblx0XHRXaW5kb3dVbk1heGltaXNlOiBcImNvbW1vbjpXaW5kb3dVbk1heGltaXNlXCIsXG5cdFx0V2luZG93VW5NaW5pbWlzZTogXCJjb21tb246V2luZG93VW5NaW5pbWlzZVwiLFxuXHRcdFdpbmRvd1pvb206IFwiY29tbW9uOldpbmRvd1pvb21cIixcblx0XHRXaW5kb3dab29tSW46IFwiY29tbW9uOldpbmRvd1pvb21JblwiLFxuXHRcdFdpbmRvd1pvb21PdXQ6IFwiY29tbW9uOldpbmRvd1pvb21PdXRcIixcblx0XHRXaW5kb3dab29tUmVzZXQ6IFwiY29tbW9uOldpbmRvd1pvb21SZXNldFwiLFxuXHR9KSxcbn0pO1xuIiwgIi8qXG4gXyAgICAgX18gICAgIF8gX19cbnwgfCAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKipcbiAqIExvZ3MgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIHdpdGggY3VzdG9tIGZvcm1hdHRpbmcuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWJ1Z0xvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJyVjIHdhaWxzMyAlYyAnICsgbWVzc2FnZSArICcgJyxcbiAgICAgICAgJ2JhY2tncm91bmQ6ICNhYTAwMDA7IGNvbG9yOiAjZmZmOyBib3JkZXItcmFkaXVzOiAzcHggMHB4IDBweCAzcHg7IHBhZGRpbmc6IDFweDsgZm9udC1zaXplOiAwLjdyZW0nLFxuICAgICAgICAnYmFja2dyb3VuZDogIzAwOTkwMDsgY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDBweCAzcHggM3B4IDBweDsgcGFkZGluZzogMXB4OyBmb250LXNpemU6IDAuN3JlbSdcbiAgICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB3ZWJ2aWV3IHN1cHBvcnRzIHRoZSB7QGxpbmsgTW91c2VFdmVudCNidXR0b25zfSBwcm9wZXJ0eS5cbiAqIExvb2tpbmcgYXQgeW91IG1hY09TIEhpZ2ggU2llcnJhIVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuVHJhY2tCdXR0b25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicpKS5idXR0b25zID09PSAwO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIHJlbW92aW5nIGxpc3RlbmVycyBieSB0cmlnZ2VyaW5nIGFuIEFib3J0U2lnbmFsXG4gKiAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI3NpZ25hbCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5BYm9ydExpc3RlbmVycygpIHtcbiAgICBpZiAoIUV2ZW50VGFyZ2V0IHx8ICFBYm9ydFNpZ25hbCB8fCAhQWJvcnRDb250cm9sbGVyKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBFdmVudFRhcmdldCgpO1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCAoKSA9PiB7IHJlc3VsdCA9IGZhbHNlOyB9LCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgndGVzdCcpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGNsb3Nlc3QgSFRNTEVsZW1lbnQgYW5jZXN0b3Igb2YgYW4gZXZlbnQncyB0YXJnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudFRhcmdldChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC50YXJnZXQ7XG4gICAgfSBlbHNlIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBldmVudC50YXJnZXQucGFyZW50RWxlbWVudCA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICAgIH1cbn1cblxuLyoqKlxuIFRoaXMgdGVjaG5pcXVlIGZvciBwcm9wZXIgbG9hZCBkZXRlY3Rpb24gaXMgdGFrZW4gZnJvbSBIVE1YOlxuXG4gQlNEIDItQ2xhdXNlIExpY2Vuc2VcblxuIENvcHlyaWdodCAoYykgMjAyMCwgQmlnIFNreSBTb2Z0d2FyZVxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEVcbiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTFxuIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJcbiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLFxuIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuICoqKi9cblxubGV0IGlzUmVhZHkgPSBmYWxzZTtcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7IGlzUmVhZHkgPSB0cnVlIH0pO1xuXG5leHBvcnQgZnVuY3Rpb24gd2hlblJlYWR5KGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKGlzUmVhZHkgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBjYWxsYmFjayk7XG4gICAgfVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQge25ld1J1bnRpbWVDYWxsZXIsIG9iamVjdE5hbWVzfSBmcm9tIFwiLi9ydW50aW1lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNjcmVlbiB9IGZyb20gXCIuL3NjcmVlbnMuanNcIjtcblxuY29uc3QgUG9zaXRpb25NZXRob2QgICAgICAgICAgICAgICAgICAgID0gMDtcbmNvbnN0IENlbnRlck1ldGhvZCAgICAgICAgICAgICAgICAgICAgICA9IDE7XG5jb25zdCBDbG9zZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgPSAyO1xuY29uc3QgRGlzYWJsZVNpemVDb25zdHJhaW50c01ldGhvZCAgICAgID0gMztcbmNvbnN0IEVuYWJsZVNpemVDb25zdHJhaW50c01ldGhvZCAgICAgICA9IDQ7XG5jb25zdCBGb2N1c01ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgPSA1O1xuY29uc3QgRm9yY2VSZWxvYWRNZXRob2QgICAgICAgICAgICAgICAgID0gNjtcbmNvbnN0IEZ1bGxzY3JlZW5NZXRob2QgICAgICAgICAgICAgICAgICA9IDc7XG5jb25zdCBHZXRTY3JlZW5NZXRob2QgICAgICAgICAgICAgICAgICAgPSA4O1xuY29uc3QgR2V0Wm9vbU1ldGhvZCAgICAgICAgICAgICAgICAgICAgID0gOTtcbmNvbnN0IEhlaWdodE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICA9IDEwO1xuY29uc3QgSGlkZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgID0gMTE7XG5jb25zdCBJc0ZvY3VzZWRNZXRob2QgICAgICAgICAgICAgICAgICAgPSAxMjtcbmNvbnN0IElzRnVsbHNjcmVlbk1ldGhvZCAgICAgICAgICAgICAgICA9IDEzO1xuY29uc3QgSXNNYXhpbWlzZWRNZXRob2QgICAgICAgICAgICAgICAgID0gMTQ7XG5jb25zdCBJc01pbmltaXNlZE1ldGhvZCAgICAgICAgICAgICAgICAgPSAxNTtcbmNvbnN0IE1heGltaXNlTWV0aG9kICAgICAgICAgICAgICAgICAgICA9IDE2O1xuY29uc3QgTWluaW1pc2VNZXRob2QgICAgICAgICAgICAgICAgICAgID0gMTc7XG5jb25zdCBOYW1lTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgPSAxODtcbmNvbnN0IE9wZW5EZXZUb29sc01ldGhvZCAgICAgICAgICAgICAgICA9IDE5O1xuY29uc3QgUmVsYXRpdmVQb3NpdGlvbk1ldGhvZCAgICAgICAgICAgID0gMjA7XG5jb25zdCBSZWxvYWRNZXRob2QgICAgICAgICAgICAgICAgICAgICAgPSAyMTtcbmNvbnN0IFJlc2l6YWJsZU1ldGhvZCAgICAgICAgICAgICAgICAgICA9IDIyO1xuY29uc3QgUmVzdG9yZU1ldGhvZCAgICAgICAgICAgICAgICAgICAgID0gMjM7XG5jb25zdCBTZXRQb3NpdGlvbk1ldGhvZCAgICAgICAgICAgICAgICAgPSAyNDtcbmNvbnN0IFNldEFsd2F5c09uVG9wTWV0aG9kICAgICAgICAgICAgICA9IDI1O1xuY29uc3QgU2V0QmFja2dyb3VuZENvbG91ck1ldGhvZCAgICAgICAgID0gMjY7XG5jb25zdCBTZXRGcmFtZWxlc3NNZXRob2QgICAgICAgICAgICAgICAgPSAyNztcbmNvbnN0IFNldEZ1bGxzY3JlZW5CdXR0b25FbmFibGVkTWV0aG9kICA9IDI4O1xuY29uc3QgU2V0TWF4U2l6ZU1ldGhvZCAgICAgICAgICAgICAgICAgID0gMjk7XG5jb25zdCBTZXRNaW5TaXplTWV0aG9kICAgICAgICAgICAgICAgICAgPSAzMDtcbmNvbnN0IFNldFJlbGF0aXZlUG9zaXRpb25NZXRob2QgICAgICAgICA9IDMxO1xuY29uc3QgU2V0UmVzaXphYmxlTWV0aG9kICAgICAgICAgICAgICAgID0gMzI7XG5jb25zdCBTZXRTaXplTWV0aG9kICAgICAgICAgICAgICAgICAgICAgPSAzMztcbmNvbnN0IFNldFRpdGxlTWV0aG9kICAgICAgICAgICAgICAgICAgICA9IDM0O1xuY29uc3QgU2V0Wm9vbU1ldGhvZCAgICAgICAgICAgICAgICAgICAgID0gMzU7XG5jb25zdCBTaG93TWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgPSAzNjtcbmNvbnN0IFNpemVNZXRob2QgICAgICAgICAgICAgICAgICAgICAgICA9IDM3O1xuY29uc3QgVG9nZ2xlRnVsbHNjcmVlbk1ldGhvZCAgICAgICAgICAgID0gMzg7XG5jb25zdCBUb2dnbGVNYXhpbWlzZU1ldGhvZCAgICAgICAgICAgICAgPSAzOTtcbmNvbnN0IFVuRnVsbHNjcmVlbk1ldGhvZCAgICAgICAgICAgICAgICA9IDQwO1xuY29uc3QgVW5NYXhpbWlzZU1ldGhvZCAgICAgICAgICAgICAgICAgID0gNDE7XG5jb25zdCBVbk1pbmltaXNlTWV0aG9kICAgICAgICAgICAgICAgICAgPSA0MjtcbmNvbnN0IFdpZHRoTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICA9IDQzO1xuY29uc3QgWm9vbU1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgID0gNDQ7XG5jb25zdCBab29tSW5NZXRob2QgICAgICAgICAgICAgICAgICAgICAgPSA0NTtcbmNvbnN0IFpvb21PdXRNZXRob2QgICAgICAgICAgICAgICAgICAgICA9IDQ2O1xuY29uc3QgWm9vbVJlc2V0TWV0aG9kICAgICAgICAgICAgICAgICAgID0gNDc7XG5cbi8qKlxuICogQSByZWNvcmQgZGVzY3JpYmluZyB0aGUgcG9zaXRpb24gb2YgYSB3aW5kb3cuXG4gKi9cbmludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgLyoqIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuICovXG4gICAgeDogbnVtYmVyO1xuICAgIC8qKiBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHdpbmRvdy4gKi9cbiAgICB5OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSByZWNvcmQgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiBhIHdpbmRvdy5cbiAqL1xuaW50ZXJmYWNlIFNpemUge1xuICAgIC8qKiBUaGUgd2lkdGggb2YgdGhlIHdpbmRvdy4gKi9cbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIC8qKiBUaGUgaGVpZ2h0IG9mIHRoZSB3aW5kb3cuICovXG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIFByaXZhdGUgZmllbGQgbmFtZXMuXG5jb25zdCBjYWxsZXJTeW0gPSBTeW1ib2woXCJjYWxsZXJcIik7XG5cbmNsYXNzIFdpbmRvdyB7XG4gICAgLy8gUHJpdmF0ZSBmaWVsZHMuXG4gICAgcHJpdmF0ZSBbY2FsbGVyU3ltXTogKG1lc3NhZ2U6IG51bWJlciwgYXJncz86IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGlzZXMgYSB3aW5kb3cgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgd2luZG93LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHRoaXNbY2FsbGVyU3ltXSA9IG5ld1J1bnRpbWVDYWxsZXIob2JqZWN0TmFtZXMuV2luZG93LCBuYW1lKVxuXG4gICAgICAgIC8vIGJpbmQgaW5zdGFuY2UgbWV0aG9kIHRvIG1ha2UgdGhlbSBlYXNpbHkgdXNhYmxlIGluIGV2ZW50IGhhbmRsZXJzXG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFdpbmRvdy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWV0aG9kICE9PSBcImNvbnN0cnVjdG9yXCJcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgKHRoaXMgYXMgYW55KVttZXRob2RdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSlbbWV0aG9kXSA9ICh0aGlzIGFzIGFueSlbbWV0aG9kXS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3BlY2lmaWVkIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHdpbmRvdyB0byBnZXQuXG4gICAgICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgd2luZG93IG9iamVjdC5cbiAgICAgKi9cbiAgICBHZXQobmFtZTogc3RyaW5nKTogV2luZG93IHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaW5kb3cobmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgUG9zaXRpb24oKTogUHJvbWlzZTxQb3NpdGlvbj4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFBvc2l0aW9uTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDZW50ZXJzIHRoZSB3aW5kb3cgb24gdGhlIHNjcmVlbi5cbiAgICAgKi9cbiAgICBDZW50ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oQ2VudGVyTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBDbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShDbG9zZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgbWluL21heCBzaXplIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIERpc2FibGVTaXplQ29uc3RyYWludHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oRGlzYWJsZVNpemVDb25zdHJhaW50c01ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBtaW4vbWF4IHNpemUgY29uc3RyYWludHMuXG4gICAgICovXG4gICAgRW5hYmxlU2l6ZUNvbnN0cmFpbnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEVuYWJsZVNpemVDb25zdHJhaW50c01ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEZvY3VzTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZXMgdGhlIHdpbmRvdyB0byByZWxvYWQgdGhlIHBhZ2UgYXNzZXRzLlxuICAgICAqL1xuICAgIEZvcmNlUmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEZvcmNlUmVsb2FkTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2l0Y2hlcyB0aGUgd2luZG93IHRvIGZ1bGxzY3JlZW4gbW9kZS5cbiAgICAgKi9cbiAgICBGdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEZ1bGxzY3JlZW5NZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNjcmVlbiB0aGF0IHRoZSB3aW5kb3cgaXMgb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc2NyZWVuIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IG9uLlxuICAgICAqL1xuICAgIEdldFNjcmVlbigpOiBQcm9taXNlPFNjcmVlbj4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEdldFNjcmVlbk1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqL1xuICAgIEdldFpvb20oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShHZXRab29tTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIEhlaWdodCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEhlaWdodE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBIaWRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKEhpZGVNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIGZvY3VzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IGZvY3VzZWQuXG4gICAgICovXG4gICAgSXNGb2N1c2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKElzRm9jdXNlZE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgZnVsbHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgZnVsbHNjcmVlbi5cbiAgICAgKi9cbiAgICBJc0Z1bGxzY3JlZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oSXNGdWxsc2NyZWVuTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpbmRvdyBpcyBtYXhpbWlzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IG1heGltaXNlZC5cbiAgICAgKi9cbiAgICBJc01heGltaXNlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShJc01heGltaXNlZE1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgbWluaW1pc2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgV2hldGhlciB0aGUgd2luZG93IGlzIGN1cnJlbnRseSBtaW5pbWlzZWQuXG4gICAgICovXG4gICAgSXNNaW5pbWlzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oSXNNaW5pbWlzZWRNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1heGltaXNlcyB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIE1heGltaXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKE1heGltaXNlTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNaW5pbWlzZXMgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBNaW5pbWlzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShNaW5pbWlzZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oTmFtZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIGRldmVsb3BtZW50IHRvb2xzIHBhbmUuXG4gICAgICovXG4gICAgT3BlbkRldlRvb2xzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKE9wZW5EZXZUb29sc01ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyB0byB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBSZWxhdGl2ZVBvc2l0aW9uKCk6IFByb21pc2U8UG9zaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShSZWxhdGl2ZVBvc2l0aW9uTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxvYWRzIHRoZSBwYWdlIGFzc2V0cy5cbiAgICAgKi9cbiAgICBSZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oUmVsb2FkTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpbmRvdyBpcyByZXNpemFibGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHJlc2l6YWJsZS5cbiAgICAgKi9cbiAgICBSZXNpemFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oUmVzaXphYmxlTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyB0aGUgd2luZG93IHRvIGl0cyBwcmV2aW91cyBzdGF0ZSBpZiBpdCB3YXMgcHJldmlvdXNseSBtaW5pbWlzZWQsIG1heGltaXNlZCBvciBmdWxsc2NyZWVuLlxuICAgICAqL1xuICAgIFJlc3RvcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oUmVzdG9yZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB4IC0gVGhlIGRlc2lyZWQgaG9yaXpvbnRhbCBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgd2luZG93LlxuICAgICAqIEBwYXJhbSB5IC0gVGhlIGRlc2lyZWQgdmVydGljYWwgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBTZXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFNldFBvc2l0aW9uTWV0aG9kLCB7IHgsIHkgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgd2luZG93IHRvIGJlIGFsd2F5cyBvbiB0b3AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWx3YXlzT25Ub3AgLSBXaGV0aGVyIHRoZSB3aW5kb3cgc2hvdWxkIHN0YXkgb24gdG9wLlxuICAgICAqL1xuICAgIFNldEFsd2F5c09uVG9wKGFsd2F5c09uVG9wOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2V0QWx3YXlzT25Ub3BNZXRob2QsIHsgYWx3YXlzT25Ub3AgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvdXIgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByIC0gVGhlIGRlc2lyZWQgcmVkIGNvbXBvbmVudCBvZiB0aGUgd2luZG93IGJhY2tncm91bmQuXG4gICAgICogQHBhcmFtIGcgLSBUaGUgZGVzaXJlZCBncmVlbiBjb21wb25lbnQgb2YgdGhlIHdpbmRvdyBiYWNrZ3JvdW5kLlxuICAgICAqIEBwYXJhbSBiIC0gVGhlIGRlc2lyZWQgYmx1ZSBjb21wb25lbnQgb2YgdGhlIHdpbmRvdyBiYWNrZ3JvdW5kLlxuICAgICAqIEBwYXJhbSBhIC0gVGhlIGRlc2lyZWQgYWxwaGEgY29tcG9uZW50IG9mIHRoZSB3aW5kb3cgYmFja2dyb3VuZC5cbiAgICAgKi9cbiAgICBTZXRCYWNrZ3JvdW5kQ29sb3VyKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFNldEJhY2tncm91bmRDb2xvdXJNZXRob2QsIHsgciwgZywgYiwgYSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB3aW5kb3cgZnJhbWUgYW5kIHRpdGxlIGJhci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmcmFtZWxlc3MgLSBXaGV0aGVyIHRoZSB3aW5kb3cgc2hvdWxkIGJlIGZyYW1lbGVzcy5cbiAgICAgKi9cbiAgICBTZXRGcmFtZWxlc3MoZnJhbWVsZXNzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2V0RnJhbWVsZXNzTWV0aG9kLCB7IGZyYW1lbGVzcyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgc3lzdGVtIGZ1bGxzY3JlZW4gYnV0dG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVuYWJsZWQgLSBXaGV0aGVyIHRoZSBmdWxsc2NyZWVuIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBTZXRGdWxsc2NyZWVuQnV0dG9uRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2V0RnVsbHNjcmVlbkJ1dHRvbkVuYWJsZWRNZXRob2QsIHsgZW5hYmxlZCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCAtIFRoZSBkZXNpcmVkIG1heGltdW0gd2lkdGggb2YgdGhlIHdpbmRvdy5cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IC0gVGhlIGRlc2lyZWQgbWF4aW11bSBoZWlnaHQgb2YgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBTZXRNYXhTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2V0TWF4U2l6ZU1ldGhvZCwgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIC0gVGhlIGRlc2lyZWQgbWluaW11bSB3aWR0aCBvZiB0aGUgd2luZG93LlxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgZGVzaXJlZCBtaW5pbXVtIGhlaWdodCBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFNldE1pblNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShTZXRNaW5TaXplTWV0aG9kLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyB0byB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHggLSBUaGUgZGVzaXJlZCBob3Jpem9udGFsIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuXG4gICAgICogQHBhcmFtIHkgLSBUaGUgZGVzaXJlZCB2ZXJ0aWNhbCByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFNldFJlbGF0aXZlUG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShTZXRSZWxhdGl2ZVBvc2l0aW9uTWV0aG9kLCB7IHgsIHkgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgcmVzaXphYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc2l6YWJsZSAtIFdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgYmUgcmVzaXphYmxlLlxuICAgICAqL1xuICAgIFNldFJlc2l6YWJsZShyZXNpemFibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShTZXRSZXNpemFibGVNZXRob2QsIHsgcmVzaXphYmxlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3aWR0aCAtIFRoZSBkZXNpcmVkIHdpZHRoIG9mIHRoZSB3aW5kb3cuXG4gICAgICogQHBhcmFtIGhlaWdodCAtIFRoZSBkZXNpcmVkIGhlaWdodCBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShTZXRTaXplTWV0aG9kLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSAtIFRoZSBkZXNpcmVkIHRpdGxlIG9mIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgU2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFNldFRpdGxlTWV0aG9kLCB7IHRpdGxlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB6b29tIC0gVGhlIGRlc2lyZWQgem9vbSBsZXZlbC5cbiAgICAgKi9cbiAgICBTZXRab29tKHpvb206IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFNldFpvb21NZXRob2QsIHsgem9vbSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFNob3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2hvd01ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgd2luZG93LlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFNpemUoKTogUHJvbWlzZTxTaXplPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oU2l6ZU1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gZnVsbHNjcmVlbiBhbmQgbm9ybWFsLlxuICAgICAqL1xuICAgIFRvZ2dsZUZ1bGxzY3JlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oVG9nZ2xlRnVsbHNjcmVlbk1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbWF4aW1pc2VkIGFuZCBub3JtYWwuXG4gICAgICovXG4gICAgVG9nZ2xlTWF4aW1pc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oVG9nZ2xlTWF4aW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuLWZ1bGxzY3JlZW5zIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgVW5GdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFVuRnVsbHNjcmVlbk1ldGhvZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW4tbWF4aW1pc2VzIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgVW5NYXhpbWlzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShVbk1heGltaXNlTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbi1taW5pbWlzZXMgdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBVbk1pbmltaXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFVuTWluaW1pc2VNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB3aWR0aCBvZiB0aGUgd2luZG93LlxuICAgICAqL1xuICAgIFdpZHRoKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oV2lkdGhNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFpvb21zIHRoZSB3aW5kb3cuXG4gICAgICovXG4gICAgWm9vbSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShab29tTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZWFzZXMgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIHdlYnZpZXcgY29udGVudC5cbiAgICAgKi9cbiAgICBab29tSW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzW2NhbGxlclN5bV0oWm9vbUluTWV0aG9kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZWFzZXMgdGhlIHpvb20gbGV2ZWwgb2YgdGhlIHdlYnZpZXcgY29udGVudC5cbiAgICAgKi9cbiAgICBab29tT3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsZXJTeW1dKFpvb21PdXRNZXRob2QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgem9vbSBsZXZlbCBvZiB0aGUgd2VidmlldyBjb250ZW50LlxuICAgICAqL1xuICAgIFpvb21SZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGVyU3ltXShab29tUmVzZXRNZXRob2QpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgd2luZG93IHdpdGhpbiB3aGljaCB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcuXG4gKi9cbmNvbnN0IHRoaXNXaW5kb3cgPSBuZXcgV2luZG93KCcnKTtcblxuZXhwb3J0IGRlZmF1bHQgdGhpc1dpbmRvdztcbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0ICogYXMgUnVudGltZSBmcm9tIFwiLi4vQHdhaWxzaW8vcnVudGltZS9zcmNcIjtcblxuLy8gTk9URTogdGhlIGZvbGxvd2luZyBtZXRob2RzIE1VU1QgYmUgaW1wb3J0ZWQgZXhwbGljaXRseSBiZWNhdXNlIG9mIGhvdyBlc2J1aWxkIGluamVjdGlvbiB3b3Jrc1xuaW1wb3J0IHsgRW5hYmxlIGFzIEVuYWJsZVdNTCB9IGZyb20gXCIuLi9Ad2FpbHNpby9ydW50aW1lL3NyYy93bWxcIjtcbmltcG9ydCB7IGRlYnVnTG9nIH0gZnJvbSBcIi4uL0B3YWlsc2lvL3J1bnRpbWUvc3JjL3V0aWxzXCI7XG5cbndpbmRvdy53YWlscyA9IFJ1bnRpbWU7XG5FbmFibGVXTUwoKTtcblxuaWYgKERFQlVHKSB7XG4gICAgZGVidWdMb2coXCJXYWlscyBSdW50aW1lIExvYWRlZFwiKVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQgeyBuZXdSdW50aW1lQ2FsbGVyLCBvYmplY3ROYW1lcyB9IGZyb20gXCIuL3J1bnRpbWUuanNcIjtcblxuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXIob2JqZWN0TmFtZXMuU3lzdGVtKTtcblxuY29uc3QgU3lzdGVtSXNEYXJrTW9kZSA9IDA7XG5jb25zdCBTeXN0ZW1FbnZpcm9ubWVudCA9IDE7XG5cbmNvbnN0IF9pbnZva2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICgod2luZG93IGFzIGFueSkuY2hyb21lPy53ZWJ2aWV3Py5wb3N0TWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS5jaHJvbWUud2Vidmlldy5wb3N0TWVzc2FnZS5iaW5kKCh3aW5kb3cgYXMgYW55KS5jaHJvbWUud2Vidmlldyk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHdpbmRvdyBhcyBhbnkpLndlYmtpdD8ubWVzc2FnZUhhbmRsZXJzPy5bJ2V4dGVybmFsJ10/LnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpLndlYmtpdC5tZXNzYWdlSGFuZGxlcnNbJ2V4dGVybmFsJ10ucG9zdE1lc3NhZ2UuYmluZCgod2luZG93IGFzIGFueSkud2Via2l0Lm1lc3NhZ2VIYW5kbGVyc1snZXh0ZXJuYWwnXSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICBjb25zb2xlLndhcm4oJ1xcbiVjXHUyNkEwXHVGRTBGIEJyb3dzZXIgRW52aXJvbm1lbnQgRGV0ZWN0ZWQgJWNcXG5cXG4lY09ubHkgVUkgcHJldmlld3MgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYnJvd3Nlci4gRm9yIGZ1bGwgZnVuY3Rpb25hbGl0eSwgcGxlYXNlIHJ1biB0aGUgYXBwbGljYXRpb24gaW4gZGVza3RvcCBtb2RlLlxcbk1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vdjMud2FpbHMuaW8vbGVhcm4vYnVpbGQvI3VzaW5nLWEtYnJvd3Nlci1mb3ItZGV2ZWxvcG1lbnRcXG4nLFxuICAgICAgICAnYmFja2dyb3VuZDogI2ZmZmZmZjsgY29sb3I6ICMwMDAwMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyBwYWRkaW5nOiA0cHggOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDAwMDA7JyxcbiAgICAgICAgJ2JhY2tncm91bmQ6IHRyYW5zcGFyZW50OycsXG4gICAgICAgICdjb2xvcjogI2ZmZmZmZjsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDsnKTtcbiAgICByZXR1cm4gbnVsbDtcbn0pKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2UobXNnOiBhbnkpOiB2b2lkIHtcbiAgICBfaW52b2tlPy4obXNnKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBkYXJrIG1vZGUgc3RhdHVzLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBzeXN0ZW0gaXMgaW4gZGFyayBtb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNEYXJrTW9kZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY2FsbChTeXN0ZW1Jc0RhcmtNb2RlKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGFwcGxpY2F0aW9uIGZyb20gdGhlIHNlcnZlci5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2FwYWJpbGl0aWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQ2FwYWJpbGl0aWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL3dhaWxzL2NhcGFiaWxpdGllc1wiKTtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmV0Y2ggY2FwYWJpbGl0aWVzOiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBPU0luZm8ge1xuICAgIC8qKiBUaGUgYnJhbmRpbmcgb2YgdGhlIE9TLiAqL1xuICAgIEJyYW5kaW5nOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBJRCBvZiB0aGUgT1MuICovXG4gICAgSUQ6IHN0cmluZztcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIE9TLiAqL1xuICAgIE5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHZlcnNpb24gb2YgdGhlIE9TLiAqL1xuICAgIFZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudEluZm8ge1xuICAgIC8qKiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBzeXN0ZW0uICovXG4gICAgQXJjaDogc3RyaW5nO1xuICAgIC8qKiBUcnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGRlYnVnIG1vZGUsIG90aGVyd2lzZSBmYWxzZS4gKi9cbiAgICBEZWJ1ZzogYm9vbGVhbjtcbiAgICAvKiogVGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gdXNlLiAqL1xuICAgIE9TOiBzdHJpbmc7XG4gICAgLyoqIERldGFpbHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICovXG4gICAgT1NJbmZvOiBPU0luZm87XG4gICAgLyoqIEFkZGl0aW9uYWwgcGxhdGZvcm0gaW5mb3JtYXRpb24uICovXG4gICAgUGxhdGZvcm1JbmZvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBlbnZpcm9ubWVudCBkZXRhaWxzLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIG9iamVjdCBjb250YWluaW5nIE9TIGFuZCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRW52aXJvbm1lbnQoKTogUHJvbWlzZTxFbnZpcm9ubWVudEluZm8+IHtcbiAgICByZXR1cm4gY2FsbChTeXN0ZW1FbnZpcm9ubWVudCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0gaXMgV2luZG93cy5cbiAqXG4gKiBAcmV0dXJuIFRydWUgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgV2luZG93cywgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNXaW5kb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aW5kb3cuX3dhaWxzLmVudmlyb25tZW50Lk9TID09PSBcIndpbmRvd3NcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBpcyBMaW51eC5cbiAqXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbSBpcyBMaW51eCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNMaW51eCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93Ll93YWlscy5lbnZpcm9ubWVudC5PUyA9PT0gXCJsaW51eFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hY09TIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgbWFjT1MsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzTWFjKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aW5kb3cuX3dhaWxzLmVudmlyb25tZW50Lk9TID09PSBcImRhcndpblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBhcmNoaXRlY3R1cmUgaXMgQU1ENjQuXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBhcmNoaXRlY3R1cmUgaXMgQU1ENjQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzQU1ENjQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuQXJjaCA9PT0gXCJhbWQ2NFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMgQVJNLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGlzIEFSTSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNBUk0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuQXJjaCA9PT0gXCJhcm1cIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgQVJNNjQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgQVJNNjQgYXJjaGl0ZWN0dXJlLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzQVJNNjQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdpbmRvdy5fd2FpbHMuZW52aXJvbm1lbnQuQXJjaCA9PT0gXCJhcm02NFwiO1xufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciB0aGUgYXBwIGlzIGJlaW5nIHJ1biBpbiBkZWJ1ZyBtb2RlLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGFwcCBpcyBiZWluZyBydW4gaW4gZGVidWcgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzRGVidWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Ll93YWlscy5lbnZpcm9ubWVudC5EZWJ1Zyk7XG59XG5cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0IHsgbmV3UnVudGltZUNhbGxlciwgb2JqZWN0TmFtZXMgfSBmcm9tIFwiLi9ydW50aW1lLmpzXCI7XG5pbXBvcnQgeyBJc0RlYnVnIH0gZnJvbSBcIi4vc3lzdGVtLmpzXCI7XG5pbXBvcnQgeyBldmVudFRhcmdldCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vIHNldHVwXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBjb250ZXh0TWVudUhhbmRsZXIpO1xuXG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcihvYmplY3ROYW1lcy5Db250ZXh0TWVudSk7XG5cbmNvbnN0IENvbnRleHRNZW51T3BlbiA9IDA7XG5cbmZ1bmN0aW9uIG9wZW5Db250ZXh0TWVudShpZDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgdm9pZCBjYWxsKENvbnRleHRNZW51T3Blbiwge2lkLCB4LCB5LCBkYXRhfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRleHRNZW51SGFuZGxlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50VGFyZ2V0KGV2ZW50KTtcblxuICAgIC8vIENoZWNrIGZvciBjdXN0b20gY29udGV4dCBtZW51XG4gICAgY29uc3QgY3VzdG9tQ29udGV4dE1lbnUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmdldFByb3BlcnR5VmFsdWUoXCItLWN1c3RvbS1jb250ZXh0bWVudVwiKS50cmltKCk7XG5cbiAgICBpZiAoY3VzdG9tQ29udGV4dE1lbnUpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tY3VzdG9tLWNvbnRleHRtZW51LWRhdGFcIik7XG4gICAgICAgIG9wZW5Db250ZXh0TWVudShjdXN0b21Db250ZXh0TWVudSwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudCwgdGFyZ2V0KTtcbiAgICB9XG59XG5cblxuLypcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogYXV0bzsgKGRlZmF1bHQpIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWUgT1IgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBPUiBlbGVtZW50IGlzIGlucHV0IG9yIHRleHRhcmVhXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IHNob3c7IHdpbGwgYWx3YXlzIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGhpZGU7IHdpbGwgYWx3YXlzIGhpZGUgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG5cblRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgbGlrZSBub3JtYWwgQ1NTIHJ1bGVzLCBzbyBuZXN0aW5nIHdvcmtzIGFzIGV4cGVjdGVkXG4qL1xuZnVuY3Rpb24gcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIC8vIERlYnVnIGJ1aWxkcyBhbHdheXMgc2hvdyB0aGUgbWVudVxuICAgIGlmIChJc0RlYnVnKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZGVmYXVsdCBjb250ZXh0IG1lbnVcbiAgICBzd2l0Y2ggKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tZGVmYXVsdC1jb250ZXh0bWVudVwiKS50cmltKCkpIHtcbiAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZVxuICAgIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRleHQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgaGFzU2VsZWN0aW9uID0gc2VsZWN0aW9uICYmIHNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc1NlbGVjdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5yYW5nZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoaSk7XG4gICAgICAgICAgICBjb25zdCByZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRhZyBpcyBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIGlmIChoYXNTZWxlY3Rpb24gfHwgKCF0YXJnZXQucmVhZE9ubHkgJiYgIXRhcmdldC5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhpZGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGZsYWcgbWFwLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmb3IuXG4gKiBAcmV0dXJuIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZXRGbGFnKGtleTogc3RyaW5nKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gd2luZG93Ll93YWlscy5mbGFnc1trZXldO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJldHJpZXZlIGZsYWcgJ1wiICsga2V5ICsgXCInOiBcIiArIGUsIHsgY2F1c2U6IGUgfSk7XG4gICAgfVxufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5pbXBvcnQgeyBpbnZva2UsIElzV2luZG93cyB9IGZyb20gXCIuL3N5c3RlbS5qc1wiO1xuaW1wb3J0IHsgR2V0RmxhZyB9IGZyb20gXCIuL2ZsYWdzLmpzXCI7XG5pbXBvcnQgeyBjYW5UcmFja0J1dHRvbnMsIGV2ZW50VGFyZ2V0IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuLy8gU2V0dXBcbmxldCBjYW5EcmFnID0gZmFsc2U7XG5sZXQgZHJhZ2dpbmcgPSBmYWxzZTtcblxubGV0IHJlc2l6YWJsZSA9IGZhbHNlO1xubGV0IGNhblJlc2l6ZSA9IGZhbHNlO1xubGV0IHJlc2l6aW5nID0gZmFsc2U7XG5sZXQgcmVzaXplRWRnZTogc3RyaW5nID0gXCJcIjtcbmxldCBkZWZhdWx0Q3Vyc29yID0gXCJhdXRvXCI7XG5cbmxldCBidXR0b25zID0gMDtcbmNvbnN0IGJ1dHRvbnNUcmFja2VkID0gY2FuVHJhY2tCdXR0b25zKCk7XG5cbndpbmRvdy5fd2FpbHMgPSB3aW5kb3cuX3dhaWxzIHx8IHt9O1xud2luZG93Ll93YWlscy5zZXRSZXNpemFibGUgPSAodmFsdWU6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICByZXNpemFibGUgPSB2YWx1ZTtcbiAgICBpZiAoIXJlc2l6YWJsZSkge1xuICAgICAgICAvLyBTdG9wIHJlc2l6aW5nIGlmIGluIHByb2dyZXNzLlxuICAgICAgICBjYW5SZXNpemUgPSByZXNpemluZyA9IGZhbHNlO1xuICAgICAgICBzZXRSZXNpemUoKTtcbiAgICB9XG59O1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdXBkYXRlLCB7IGNhcHR1cmU6IHRydWUgfSk7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdXBkYXRlLCB7IGNhcHR1cmU6IHRydWUgfSk7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwZGF0ZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuZm9yIChjb25zdCBldiBvZiBbJ2NsaWNrJywgJ2NvbnRleHRtZW51JywgJ2RibGNsaWNrJ10pIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldiwgc3VwcHJlc3NFdmVudCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBzdXBwcmVzc0V2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFN1cHByZXNzIGNsaWNrIGV2ZW50cyB3aGlsZSByZXNpemluZyBvciBkcmFnZ2luZy5cbiAgICBpZiAoZHJhZ2dpbmcgfHwgcmVzaXppbmcpIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn1cblxuLy8gVXNlIGNvbnN0YW50cyB0byBhdm9pZCBjb21wYXJpbmcgc3RyaW5ncyBtdWx0aXBsZSB0aW1lcy5cbmNvbnN0IE1vdXNlRG93biA9IDA7XG5jb25zdCBNb3VzZVVwICAgPSAxO1xuY29uc3QgTW91c2VNb3ZlID0gMjtcblxuZnVuY3Rpb24gdXBkYXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gV2luZG93cyBzdXBwcmVzc2VzIG1vdXNlIGV2ZW50cyBhdCB0aGUgZW5kIG9mIGRyYWdnaW5nIG9yIHJlc2l6aW5nLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gYmUgc21hcnQgYW5kIHN5bnRoZXNpemUgYnV0dG9uIGV2ZW50cy5cblxuICAgIGxldCBldmVudFR5cGU6IG51bWJlciwgZXZlbnRCdXR0b25zID0gZXZlbnQuYnV0dG9ucztcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IE1vdXNlRG93bjtcbiAgICAgICAgICAgIGlmICghYnV0dG9uc1RyYWNrZWQpIHsgZXZlbnRCdXR0b25zID0gYnV0dG9ucyB8ICgxIDw8IGV2ZW50LmJ1dHRvbik7IH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb3VzZXVwJzpcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IE1vdXNlVXA7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvbnNUcmFja2VkKSB7IGV2ZW50QnV0dG9ucyA9IGJ1dHRvbnMgJiB+KDEgPDwgZXZlbnQuYnV0dG9uKTsgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBldmVudFR5cGUgPSBNb3VzZU1vdmU7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvbnNUcmFja2VkKSB7IGV2ZW50QnV0dG9ucyA9IGJ1dHRvbnM7IH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCByZWxlYXNlZCA9IGJ1dHRvbnMgJiB+ZXZlbnRCdXR0b25zO1xuICAgIGxldCBwcmVzc2VkID0gZXZlbnRCdXR0b25zICYgfmJ1dHRvbnM7XG5cbiAgICBidXR0b25zID0gZXZlbnRCdXR0b25zO1xuXG4gICAgLy8gU3ludGhlc2l6ZSBhIHJlbGVhc2UtcHJlc3Mgc2VxdWVuY2UgaWYgd2UgZGV0ZWN0IGEgcHJlc3Mgb2YgYW4gYWxyZWFkeSBwcmVzc2VkIGJ1dHRvbi5cbiAgICBpZiAoZXZlbnRUeXBlID09PSBNb3VzZURvd24gJiYgIShwcmVzc2VkICYgZXZlbnQuYnV0dG9uKSkge1xuICAgICAgICByZWxlYXNlZCB8PSAoMSA8PCBldmVudC5idXR0b24pO1xuICAgICAgICBwcmVzc2VkIHw9ICgxIDw8IGV2ZW50LmJ1dHRvbik7XG4gICAgfVxuXG4gICAgLy8gU3VwcHJlc3MgYWxsIGJ1dHRvbiBldmVudHMgZHVyaW5nIGRyYWdnaW5nIGFuZCByZXNpemluZyxcbiAgICAvLyB1bmxlc3MgdGhpcyBpcyBhIG1vdXNldXAgZXZlbnQgdGhhdCBpcyBlbmRpbmcgYSBkcmFnIGFjdGlvbi5cbiAgICBpZiAoXG4gICAgICAgIGV2ZW50VHlwZSAhPT0gTW91c2VNb3ZlIC8vIEZhc3QgcGF0aCBmb3IgbW91c2Vtb3ZlXG4gICAgICAgICYmIHJlc2l6aW5nXG4gICAgICAgIHx8IChcbiAgICAgICAgICAgIGRyYWdnaW5nXG4gICAgICAgICAgICAmJiAoXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlID09PSBNb3VzZURvd25cbiAgICAgICAgICAgICAgICB8fCBldmVudC5idXR0b24gIT09IDBcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJlbGVhc2VzXG4gICAgaWYgKHJlbGVhc2VkICYgMSkgeyBwcmltYXJ5VXAoZXZlbnQpOyB9XG4gICAgLy8gSGFuZGxlIHByZXNzZXNcbiAgICBpZiAocHJlc3NlZCAmIDEpIHsgcHJpbWFyeURvd24oZXZlbnQpOyB9XG5cbiAgICAvLyBIYW5kbGUgbW91c2Vtb3ZlXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gTW91c2VNb3ZlKSB7IG9uTW91c2VNb3ZlKGV2ZW50KTsgfTtcbn1cblxuZnVuY3Rpb24gcHJpbWFyeURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBSZXNldCByZWFkaW5lc3Mgc3RhdGUuXG4gICAgY2FuRHJhZyA9IGZhbHNlO1xuICAgIGNhblJlc2l6ZSA9IGZhbHNlO1xuXG4gICAgLy8gSWdub3JlIHJlcGVhdGVkIGNsaWNrcyBvbiBtYWNPUyBhbmQgTGludXguXG4gICAgaWYgKCFJc1dpbmRvd3MoKSkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LmRldGFpbCAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZUVkZ2UpIHtcbiAgICAgICAgLy8gUmVhZHkgdG8gcmVzaXplIGlmIHRoZSBwcmltYXJ5IGJ1dHRvbiB3YXMgcHJlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAgICAgIGNhblJlc2l6ZSA9IHRydWU7XG4gICAgICAgIC8vIERvIG5vdCBzdGFydCBkcmFnIG9wZXJhdGlvbnMgd2hlbiBvbiByZXNpemUgZWRnZXMuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXRyaWV2ZSB0YXJnZXQgZWxlbWVudFxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50VGFyZ2V0KGV2ZW50KTtcblxuICAgIC8vIFJlYWR5IHRvIGRyYWcgaWYgdGhlIHByaW1hcnkgYnV0dG9uIHdhcyBwcmVzc2VkIGZvciB0aGUgZmlyc3QgdGltZSBvbiBhIGRyYWdnYWJsZSBlbGVtZW50LlxuICAgIC8vIElnbm9yZSBjbGlja3Mgb24gdGhlIHNjcm9sbGJhci5cbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCk7XG4gICAgY2FuRHJhZyA9IChcbiAgICAgICAgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0td2FpbHMtZHJhZ2dhYmxlXCIpLnRyaW0oKSA9PT0gXCJkcmFnXCJcbiAgICAgICAgJiYgKFxuICAgICAgICAgICAgZXZlbnQub2Zmc2V0WCAtIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpIDwgdGFyZ2V0LmNsaWVudFdpZHRoXG4gICAgICAgICAgICAmJiBldmVudC5vZmZzZXRZIC0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSA8IHRhcmdldC5jbGllbnRIZWlnaHRcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHByaW1hcnlVcChldmVudDogTW91c2VFdmVudCkge1xuICAgIC8vIFN0b3AgZHJhZ2dpbmcgYW5kIHJlc2l6aW5nLlxuICAgIGNhbkRyYWcgPSBmYWxzZTtcbiAgICBkcmFnZ2luZyA9IGZhbHNlO1xuICAgIGNhblJlc2l6ZSA9IGZhbHNlO1xuICAgIHJlc2l6aW5nID0gZmFsc2U7XG59XG5cbmNvbnN0IGN1cnNvckZvckVkZ2UgPSBPYmplY3QuZnJlZXplKHtcbiAgICBcInNlLXJlc2l6ZVwiOiBcIm53c2UtcmVzaXplXCIsXG4gICAgXCJzdy1yZXNpemVcIjogXCJuZXN3LXJlc2l6ZVwiLFxuICAgIFwibnctcmVzaXplXCI6IFwibndzZS1yZXNpemVcIixcbiAgICBcIm5lLXJlc2l6ZVwiOiBcIm5lc3ctcmVzaXplXCIsXG4gICAgXCJ3LXJlc2l6ZVwiOiBcImV3LXJlc2l6ZVwiLFxuICAgIFwibi1yZXNpemVcIjogXCJucy1yZXNpemVcIixcbiAgICBcInMtcmVzaXplXCI6IFwibnMtcmVzaXplXCIsXG4gICAgXCJlLXJlc2l6ZVwiOiBcImV3LXJlc2l6ZVwiLFxufSlcblxuZnVuY3Rpb24gc2V0UmVzaXplKGVkZ2U/OiBrZXlvZiB0eXBlb2YgY3Vyc29yRm9yRWRnZSk6IHZvaWQge1xuICAgIGlmIChlZGdlKSB7XG4gICAgICAgIGlmICghcmVzaXplRWRnZSkgeyBkZWZhdWx0Q3Vyc29yID0gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I7IH1cbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBjdXJzb3JGb3JFZGdlW2VkZ2VdO1xuICAgIH0gZWxzZSBpZiAoIWVkZ2UgJiYgcmVzaXplRWRnZSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGRlZmF1bHRDdXJzb3I7XG4gICAgfVxuXG4gICAgcmVzaXplRWRnZSA9IGVkZ2UgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY2FuUmVzaXplICYmIHJlc2l6ZUVkZ2UpIHtcbiAgICAgICAgLy8gU3RhcnQgcmVzaXppbmcuXG4gICAgICAgIHJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgaW52b2tlKFwid2FpbHM6cmVzaXplOlwiICsgcmVzaXplRWRnZSk7XG4gICAgfSBlbHNlIGlmIChjYW5EcmFnKSB7XG4gICAgICAgIC8vIFN0YXJ0IGRyYWdnaW5nLlxuICAgICAgICBkcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIGludm9rZShcIndhaWxzOmRyYWdcIik7XG4gICAgfVxuXG4gICAgaWYgKGRyYWdnaW5nIHx8IHJlc2l6aW5nKSB7XG4gICAgICAgIC8vIEVpdGhlciBkcmFnIG9yIHJlc2l6ZSBpcyBvbmdvaW5nLFxuICAgICAgICAvLyByZXNldCByZWFkaW5lc3MgYW5kIHN0b3AgcHJvY2Vzc2luZy5cbiAgICAgICAgY2FuRHJhZyA9IGNhblJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZXNpemFibGUgfHwgIUlzV2luZG93cygpKSB7XG4gICAgICAgIGlmIChyZXNpemVFZGdlKSB7IHNldFJlc2l6ZSgpOyB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNpemVIYW5kbGVIZWlnaHQgPSBHZXRGbGFnKFwic3lzdGVtLnJlc2l6ZUhhbmRsZUhlaWdodFwiKSB8fCA1O1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZVdpZHRoID0gR2V0RmxhZyhcInN5c3RlbS5yZXNpemVIYW5kbGVXaWR0aFwiKSB8fCA1O1xuXG4gICAgLy8gRXh0cmEgcGl4ZWxzIGZvciB0aGUgY29ybmVyIGFyZWFzLlxuICAgIGNvbnN0IGNvcm5lckV4dHJhID0gR2V0RmxhZyhcInJlc2l6ZUNvcm5lckV4dHJhXCIpIHx8IDEwO1xuXG4gICAgY29uc3QgcmlnaHRCb3JkZXIgPSAod2luZG93Lm91dGVyV2lkdGggLSBldmVudC5jbGllbnRYKSA8IHJlc2l6ZUhhbmRsZVdpZHRoO1xuICAgIGNvbnN0IGxlZnRCb3JkZXIgPSBldmVudC5jbGllbnRYIDwgcmVzaXplSGFuZGxlV2lkdGg7XG4gICAgY29uc3QgdG9wQm9yZGVyID0gZXZlbnQuY2xpZW50WSA8IHJlc2l6ZUhhbmRsZUhlaWdodDtcbiAgICBjb25zdCBib3R0b21Cb3JkZXIgPSAod2luZG93Lm91dGVySGVpZ2h0IC0gZXZlbnQuY2xpZW50WSkgPCByZXNpemVIYW5kbGVIZWlnaHQ7XG5cbiAgICAvLyBBZGp1c3QgZm9yIGNvcm5lciBhcmVhcy5cbiAgICBjb25zdCByaWdodENvcm5lciA9ICh3aW5kb3cub3V0ZXJXaWR0aCAtIGV2ZW50LmNsaWVudFgpIDwgKHJlc2l6ZUhhbmRsZVdpZHRoICsgY29ybmVyRXh0cmEpO1xuICAgIGNvbnN0IGxlZnRDb3JuZXIgPSBldmVudC5jbGllbnRYIDwgKHJlc2l6ZUhhbmRsZVdpZHRoICsgY29ybmVyRXh0cmEpO1xuICAgIGNvbnN0IHRvcENvcm5lciA9IGV2ZW50LmNsaWVudFkgPCAocmVzaXplSGFuZGxlSGVpZ2h0ICsgY29ybmVyRXh0cmEpO1xuICAgIGNvbnN0IGJvdHRvbUNvcm5lciA9ICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBldmVudC5jbGllbnRZKSA8IChyZXNpemVIYW5kbGVIZWlnaHQgKyBjb3JuZXJFeHRyYSk7XG5cbiAgICBpZiAoIWxlZnRDb3JuZXIgJiYgIXRvcENvcm5lciAmJiAhYm90dG9tQ29ybmVyICYmICFyaWdodENvcm5lcikge1xuICAgICAgICAvLyBPcHRpbWlzYXRpb246IG91dCBvZiBhbGwgY29ybmVyIGFyZWFzIGltcGxpZXMgb3V0IG9mIGJvcmRlcnMuXG4gICAgICAgIHNldFJlc2l6ZSgpO1xuICAgIH1cbiAgICAvLyBEZXRlY3QgY29ybmVycy5cbiAgICBlbHNlIGlmIChyaWdodENvcm5lciAmJiBib3R0b21Db3JuZXIpIHNldFJlc2l6ZShcInNlLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChsZWZ0Q29ybmVyICYmIGJvdHRvbUNvcm5lcikgc2V0UmVzaXplKFwic3ctcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGxlZnRDb3JuZXIgJiYgdG9wQ29ybmVyKSBzZXRSZXNpemUoXCJudy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAodG9wQ29ybmVyICYmIHJpZ2h0Q29ybmVyKSBzZXRSZXNpemUoXCJuZS1yZXNpemVcIik7XG4gICAgLy8gRGV0ZWN0IGJvcmRlcnMuXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlcikgc2V0UmVzaXplKFwidy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAodG9wQm9yZGVyKSBzZXRSZXNpemUoXCJuLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInMtcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJlLXJlc2l6ZVwiKTtcbiAgICAvLyBPdXQgb2YgYm9yZGVyIGFyZWEuXG4gICAgZWxzZSBzZXRSZXNpemUoKTtcbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0IHsgbmV3UnVudGltZUNhbGxlciwgb2JqZWN0TmFtZXMgfSBmcm9tIFwiLi9ydW50aW1lLmpzXCI7XG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcihvYmplY3ROYW1lcy5BcHBsaWNhdGlvbik7XG5cbmNvbnN0IEhpZGVNZXRob2QgPSAwO1xuY29uc3QgU2hvd01ldGhvZCA9IDE7XG5jb25zdCBRdWl0TWV0aG9kID0gMjtcblxuLyoqXG4gKiBIaWRlcyBhIGNlcnRhaW4gbWV0aG9kIGJ5IGNhbGxpbmcgdGhlIEhpZGVNZXRob2QgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBIaWRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBjYWxsKEhpZGVNZXRob2QpO1xufVxuXG4vKipcbiAqIENhbGxzIHRoZSBTaG93TWV0aG9kIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTaG93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBjYWxsKFNob3dNZXRob2QpO1xufVxuXG4vKipcbiAqIENhbGxzIHRoZSBRdWl0TWV0aG9kIHRvIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGNhbGwoUXVpdE1ldGhvZCk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbmltcG9ydCB7IENhbmNlbGxhYmxlUHJvbWlzZSwgdHlwZSBDYW5jZWxsYWJsZVByb21pc2VXaXRoUmVzb2x2ZXJzIH0gZnJvbSBcIi4vY2FuY2VsbGFibGUuanNcIjtcbmltcG9ydCB7IG5ld1J1bnRpbWVDYWxsZXIsIG9iamVjdE5hbWVzIH0gZnJvbSBcIi4vcnVudGltZS5qc1wiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSBcIi4vbmFub2lkLmpzXCI7XG5cbi8vIFNldHVwXG53aW5kb3cuX3dhaWxzID0gd2luZG93Ll93YWlscyB8fCB7fTtcbndpbmRvdy5fd2FpbHMuY2FsbFJlc3VsdEhhbmRsZXIgPSByZXN1bHRIYW5kbGVyO1xud2luZG93Ll93YWlscy5jYWxsRXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyO1xuXG50eXBlIFByb21pc2VSZXNvbHZlcnMgPSBPbWl0PENhbmNlbGxhYmxlUHJvbWlzZVdpdGhSZXNvbHZlcnM8YW55PiwgXCJwcm9taXNlXCIgfCBcIm9uY2FuY2VsbGVkXCI+XG5cbmNvbnN0IGNhbGwgPSBuZXdSdW50aW1lQ2FsbGVyKG9iamVjdE5hbWVzLkNhbGwpO1xuY29uc3QgY2FuY2VsQ2FsbCA9IG5ld1J1bnRpbWVDYWxsZXIob2JqZWN0TmFtZXMuQ2FuY2VsQ2FsbCk7XG5jb25zdCBjYWxsUmVzcG9uc2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2VSZXNvbHZlcnM+KCk7XG5cbmNvbnN0IENhbGxCaW5kaW5nID0gMDtcbmNvbnN0IENhbmNlbE1ldGhvZCA9IDBcblxuLyoqXG4gKiBIb2xkcyBhbGwgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIGEgYmluZGluZyBjYWxsLlxuICogTWF5IHByb3ZpZGUgZWl0aGVyIGEgbWV0aG9kIElEIG9yIGEgbWV0aG9kIG5hbWUsIGJ1dCBub3QgYm90aC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FsbE9wdGlvbnMgPSB7XG4gICAgLyoqIFRoZSBudW1lcmljIElEIG9mIHRoZSBib3VuZCBtZXRob2QgdG8gY2FsbC4gKi9cbiAgICBtZXRob2RJRDogbnVtYmVyO1xuICAgIC8qKiBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGJvdW5kIG1ldGhvZCB0byBjYWxsLiAqL1xuICAgIG1ldGhvZE5hbWU/OiBuZXZlcjtcbiAgICAvKiogQXJndW1lbnRzIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBib3VuZCBtZXRob2QuICovXG4gICAgYXJnczogYW55W107XG59IHwge1xuICAgIC8qKiBUaGUgbnVtZXJpYyBJRCBvZiB0aGUgYm91bmQgbWV0aG9kIHRvIGNhbGwuICovXG4gICAgbWV0aG9kSUQ/OiBuZXZlcjtcbiAgICAvKiogVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBib3VuZCBtZXRob2QgdG8gY2FsbC4gKi9cbiAgICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gICAgLyoqIEFyZ3VtZW50cyB0byBiZSBwYXNzZWQgaW50byB0aGUgYm91bmQgbWV0aG9kLiAqL1xuICAgIGFyZ3M6IGFueVtdO1xufTtcblxuLyoqXG4gKiBFeGNlcHRpb24gY2xhc3MgdGhhdCB3aWxsIGJlIHRocm93biBpbiBjYXNlIHRoZSBib3VuZCBtZXRob2QgcmV0dXJucyBhbiBlcnJvci5cbiAqIFRoZSB2YWx1ZSBvZiB0aGUge0BsaW5rIFJ1bnRpbWVFcnJvciNuYW1lfSBwcm9wZXJ0eSBpcyBcIlJ1bnRpbWVFcnJvclwiLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUnVudGltZUVycm9yIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgRXJyb3IgY29uc3RydWN0b3IuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZywgb3B0aW9ucz86IEVycm9yT3B0aW9ucykge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSdW50aW1lRXJyb3JcIjtcbiAgICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgcmVzdWx0IG9mIGEgY2FsbCByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgcmVxdWVzdCB0byBoYW5kbGUgdGhlIHJlc3VsdCBmb3IuXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSByZXN1bHQgZGF0YSBvZiB0aGUgcmVxdWVzdC5cbiAqIEBwYXJhbSBpc0pTT04gLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSBpcyBKU09OIG9yIG5vdC5cbiAqL1xuZnVuY3Rpb24gcmVzdWx0SGFuZGxlcihpZDogc3RyaW5nLCBkYXRhOiBzdHJpbmcsIGlzSlNPTjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJlc29sdmVycyA9IGdldEFuZERlbGV0ZVJlc3BvbnNlKGlkKTtcbiAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJlc29sdmVycy5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICghaXNKU09OKSB7XG4gICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZWplY3QobmV3IFR5cGVFcnJvcihcImNvdWxkIG5vdCBwYXJzZSByZXN1bHQ6IFwiICsgZXJyLm1lc3NhZ2UsIHsgY2F1c2U6IGVyciB9KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgZXJyb3IgZnJvbSBhIGNhbGwgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHByb21pc2UgaGFuZGxlci5cbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGVycm9yIGRhdGEgdG8gcmVqZWN0IHRoZSBwcm9taXNlIGhhbmRsZXIgd2l0aC5cbiAqIEBwYXJhbSBpc0pTT04gLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSBpcyBKU09OIG9yIG5vdC5cbiAqL1xuZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGlkOiBzdHJpbmcsIGRhdGE6IHN0cmluZywgaXNKU09OOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcmVzb2x2ZXJzID0gZ2V0QW5kRGVsZXRlUmVzcG9uc2UoaWQpO1xuICAgIGlmICghcmVzb2x2ZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzSlNPTikge1xuICAgICAgICByZXNvbHZlcnMucmVqZWN0KG5ldyBFcnJvcihkYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGVycm9yOiBhbnk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlcnJvciA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJjb3VsZCBub3QgcGFyc2UgZXJyb3I6IFwiICsgZXJyLm1lc3NhZ2UsIHsgY2F1c2U6IGVyciB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3B0aW9uczogRXJyb3JPcHRpb25zID0ge307XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5jYXVzZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4Y2VwdGlvbjtcbiAgICAgICAgc3dpdGNoIChlcnJvci5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwiUmVmZXJlbmNlRXJyb3JcIjpcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBuZXcgUmVmZXJlbmNlRXJyb3IoZXJyb3IubWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiVHlwZUVycm9yXCI6XG4gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gbmV3IFR5cGVFcnJvcihlcnJvci5tZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJSdW50aW1lRXJyb3JcIjpcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBuZXcgUnVudGltZUVycm9yKGVycm9yLm1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlcnMucmVqZWN0KGV4Y2VwdGlvbik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyB0aGUgcmVzcG9uc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBjYWxsUmVzcG9uc2VzIG1hcC5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlc3BvbnNlIHRvIGJlIHJldHJpZXZlZCBhbmQgcmVtb3ZlZC5cbiAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBJRCwgaWYgYW55LlxuICovXG5mdW5jdGlvbiBnZXRBbmREZWxldGVSZXNwb25zZShpZDogc3RyaW5nKTogUHJvbWlzZVJlc29sdmVycyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBjYWxsUmVzcG9uc2VzLmdldChpZCk7XG4gICAgY2FsbFJlc3BvbnNlcy5kZWxldGUoaWQpO1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQgdXNpbmcgdGhlIG5hbm9pZCBsaWJyYXJ5LlxuICpcbiAqIEByZXR1cm5zIEEgdW5pcXVlIElEIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNhbGxSZXNwb25zZXMgc2V0LlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBkbyB7XG4gICAgICAgIHJlc3VsdCA9IG5hbm9pZCgpO1xuICAgIH0gd2hpbGUgKGNhbGxSZXNwb25zZXMuaGFzKHJlc3VsdCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FsbCBhIGJvdW5kIG1ldGhvZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGNhbGwgb3B0aW9ucy5cbiAqXG4gKiBJbiBjYXNlIG9mIGZhaWx1cmUsIHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgcmVqZWN0IHdpdGggYW4gZXhjZXB0aW9uXG4gKiBhbW9uZyBSZWZlcmVuY2VFcnJvciAodW5rbm93biBtZXRob2QpLCBUeXBlRXJyb3IgKHdyb25nIGFyZ3VtZW50IGNvdW50IG9yIHR5cGUpLFxuICoge0BsaW5rIFJ1bnRpbWVFcnJvcn0gKG1ldGhvZCByZXR1cm5lZCBhbiBlcnJvciksIG9yIG90aGVyIChuZXR3b3JrIG9yIGludGVybmFsIGVycm9ycykuXG4gKiBUaGUgZXhjZXB0aW9uIG1pZ2h0IGhhdmUgYSBcImNhdXNlXCIgZmllbGQgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWRcbiAqIGJ5IHRoZSBhcHBsaWNhdGlvbi0gb3Igc2VydmljZS1sZXZlbCBlcnJvciBtYXJzaGFsaW5nIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEEgbWV0aG9kIGNhbGwgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDYWxsKG9wdGlvbnM6IENhbGxPcHRpb25zKTogQ2FuY2VsbGFibGVQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVJRCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gQ2FuY2VsbGFibGVQcm9taXNlLndpdGhSZXNvbHZlcnM8YW55PigpO1xuICAgIGNhbGxSZXNwb25zZXMuc2V0KGlkLCB7IHJlc29sdmU6IHJlc3VsdC5yZXNvbHZlLCByZWplY3Q6IHJlc3VsdC5yZWplY3QgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2FsbChDYWxsQmluZGluZywgT2JqZWN0LmFzc2lnbih7IFwiY2FsbC1pZFwiOiBpZCB9LCBvcHRpb25zKSk7XG4gICAgbGV0IHJ1bm5pbmcgPSBmYWxzZTtcblxuICAgIHJlcXVlc3QudGhlbigoKSA9PiB7XG4gICAgICAgIHJ1bm5pbmcgPSB0cnVlO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgY2FsbFJlc3BvbnNlcy5kZWxldGUoaWQpO1xuICAgICAgICByZXN1bHQucmVqZWN0KGVycik7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGNhbGxSZXNwb25zZXMuZGVsZXRlKGlkKTtcbiAgICAgICAgcmV0dXJuIGNhbmNlbENhbGwoQ2FuY2VsTWV0aG9kLCB7XCJjYWxsLWlkXCI6IGlkfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgYmluZGluZyBjYWxsIGNhbmNlbGxhdGlvbjpcIiwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJlc3VsdC5vbmNhbmNlbGxlZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjYW5jZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LnRoZW4oY2FuY2VsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBtZXRob2QgYnkgbmFtZSB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLlxuICogU2VlIHtAbGluayBDYWxsfSBmb3IgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgaW4gdGhlIGZvcm1hdCAncGFja2FnZS5zdHJ1Y3QubWV0aG9kJy5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2QgY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJ5TmFtZShtZXRob2ROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogQ2FuY2VsbGFibGVQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBDYWxsKHsgbWV0aG9kTmFtZSwgYXJncyB9KTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIG1ldGhvZCBieSBpdHMgbnVtZXJpYyBJRCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLlxuICogU2VlIHtAbGluayBDYWxsfSBmb3IgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kSUQgLSBUaGUgSUQgb2YgdGhlIG1ldGhvZCB0byBjYWxsLlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiB0aGUgbWV0aG9kIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCeUlEKG1ldGhvZElEOiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogQ2FuY2VsbGFibGVQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBDYWxsKHsgbWV0aG9kSUQsIGFyZ3MgfSk7XG59XG4iLCAiLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaW5zcGVjdC1qcy9pcy1jYWxsYWJsZVxuXG4vLyBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTUgSm9yZGFuIEhhcmJhbmRcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4vLyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbi8vIFNPRlRXQVJFLlxuXG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWZsZWN0QXBwbHk6IHR5cGVvZiBSZWZsZWN0LmFwcGx5IHwgZmFsc2UgfCBudWxsID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U6IGFueTtcbnZhciBpc0NhbGxhYmxlTWFya2VyOiBhbnk7XG5pZiAodHlwZW9mIHJlZmxlY3RBcHBseSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmFkQXJyYXlMaWtlID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnbGVuZ3RoJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlzQ2FsbGFibGVNYXJrZXIgPSB7fTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgcmVmbGVjdEFwcGx5KGZ1bmN0aW9uICgpIHsgdGhyb3cgNDI7IH0sIG51bGwsIGJhZEFycmF5TGlrZSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgICBpZiAoXyAhPT0gaXNDYWxsYWJsZU1hcmtlcikge1xuICAgICAgICAgICAgcmVmbGVjdEFwcGx5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn0gZWxzZSB7XG4gICAgcmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cbiAgICB9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAoaXNFUzZDbGFzc0ZuKHZhbHVlKSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgZm5Ub1N0ci5jYWxsKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgb2JqZWN0Q2xhc3MgPSAnW29iamVjdCBPYmplY3RdJztcbnZhciBmbkNsYXNzID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbnZhciBnZW5DbGFzcyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSc7XG52YXIgZGRhQ2xhc3MgPSAnW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0nOyAvLyBJRSAxMVxudmFyIGRkYUNsYXNzMiA9ICdbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSc7XG52YXIgZGRhQ2xhc3MzID0gJ1tvYmplY3QgSFRNTENvbGxlY3Rpb25dJzsgLy8gSUUgOS0xMFxudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZzsgLy8gYmV0dGVyOiB1c2UgYGhhcy10b3N0cmluZ3RhZ2BcblxudmFyIGlzSUU2OCA9ICEoMCBpbiBbLF0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNwYXJzZS1hcnJheXMsIGNvbW1hLXNwYWNpbmdcblxudmFyIGlzRERBOiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbiA9IGZ1bmN0aW9uIGlzRG9jdW1lbnREb3RBbGwoKSB7IHJldHVybiBmYWxzZTsgfTtcbmlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gRmlyZWZveCAzIGNhbm9uaWNhbGl6ZXMgRERBIHRvIHVuZGVmaW5lZCB3aGVuIGl0J3Mgbm90IGFjY2Vzc2VkIGRpcmVjdGx5XG4gICAgdmFyIGFsbCA9IGRvY3VtZW50LmFsbDtcbiAgICBpZiAodG9TdHIuY2FsbChhbGwpID09PSB0b1N0ci5jYWxsKGRvY3VtZW50LmFsbCkpIHtcbiAgICAgICAgaXNEREEgPSBmdW5jdGlvbiBpc0RvY3VtZW50RG90QWxsKHZhbHVlKSB7XG4gICAgICAgICAgICAvKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xuICAgICAgICAgICAgLy8gaW4gSUUgNi04LCB0eXBlb2YgZG9jdW1lbnQuYWxsIGlzIFwib2JqZWN0XCIgYW5kIGl0J3MgdHJ1dGh5XG4gICAgICAgICAgICBpZiAoKGlzSUU2OCB8fCAhdmFsdWUpICYmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSBkZGFDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RyID09PSBkZGFDbGFzczJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0ciA9PT0gZGRhQ2xhc3MzIC8vIG9wZXJhIDEyLjE2XG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBzdHIgPT09IG9iamVjdENsYXNzIC8vIElFIDYtOFxuICAgICAgICAgICAgICAgICAgICApICYmIHZhbHVlKCcnKSA9PSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLyoqLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0NhbGxhYmxlUmVmQXBwbHk8VD4odmFsdWU6IFQgfCB1bmtub3duKTogdmFsdWUgaXMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgIHtcbiAgICBpZiAoaXNEREEodmFsdWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgdHJ5IHtcbiAgICAgICAgKHJlZmxlY3RBcHBseSBhcyBhbnkpKHZhbHVlLCBudWxsLCBiYWRBcnJheUxpa2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUgIT09IGlzQ2FsbGFibGVNYXJrZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHJldHVybiAhaXNFUzZDbGFzc0ZuKHZhbHVlKSAmJiB0cnlGdW5jdGlvbk9iamVjdCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzQ2FsbGFibGVOb1JlZkFwcGx5PFQ+KHZhbHVlOiBUIHwgdW5rbm93bik6IHZhbHVlIGlzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55IHtcbiAgICBpZiAoaXNEREEodmFsdWUpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKGhhc1RvU3RyaW5nVGFnKSB7IHJldHVybiB0cnlGdW5jdGlvbk9iamVjdCh2YWx1ZSk7IH1cbiAgICBpZiAoaXNFUzZDbGFzc0ZuKHZhbHVlKSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcbiAgICBpZiAoc3RyQ2xhc3MgIT09IGZuQ2xhc3MgJiYgc3RyQ2xhc3MgIT09IGdlbkNsYXNzICYmICEoL15cXFtvYmplY3QgSFRNTC8pLnRlc3Qoc3RyQ2xhc3MpKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0cnlGdW5jdGlvbk9iamVjdCh2YWx1ZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZWZsZWN0QXBwbHkgPyBpc0NhbGxhYmxlUmVmQXBwbHkgOiBpc0NhbGxhYmxlTm9SZWZBcHBseTtcbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0IGlzQ2FsbGFibGUgZnJvbSBcIi4vY2FsbGFibGUuanNcIjtcblxuLyoqXG4gKiBFeGNlcHRpb24gY2xhc3MgdGhhdCB3aWxsIGJlIHVzZWQgYXMgcmVqZWN0aW9uIHJlYXNvblxuICogaW4gY2FzZSBhIHtAbGluayBDYW5jZWxsYWJsZVByb21pc2V9IGlzIGNhbmNlbGxlZCBzdWNjZXNzZnVsbHkuXG4gKlxuICogVGhlIHZhbHVlIG9mIHRoZSB7QGxpbmsgbmFtZX0gcHJvcGVydHkgaXMgdGhlIHN0cmluZyBgXCJDYW5jZWxFcnJvclwiYC5cbiAqIFRoZSB2YWx1ZSBvZiB0aGUge0BsaW5rIGNhdXNlfSBwcm9wZXJ0eSBpcyB0aGUgY2F1c2UgcGFzc2VkIHRvIHRoZSBjYW5jZWwgbWV0aG9kLCBpZiBhbnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYW5jZWxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBDYW5jZWxFcnJvcmAgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBFcnJvciBjb25zdHJ1Y3Rvci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBvcHRpb25zPzogRXJyb3JPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkNhbmNlbEVycm9yXCI7XG4gICAgfVxufVxuXG4vKipcbiAqIEV4Y2VwdGlvbiBjbGFzcyB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgYW4gdW5oYW5kbGVkIHJlamVjdGlvblxuICogaW4gY2FzZSBhIHtAbGluayBDYW5jZWxsYWJsZVByb21pc2V9IHJlamVjdHMgYWZ0ZXIgYmVpbmcgY2FuY2VsbGVkLFxuICogb3Igd2hlbiB0aGUgYG9uY2FuY2VsbGVkYCBjYWxsYmFjayB0aHJvd3Mgb3IgcmVqZWN0cy5cbiAqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIHtAbGluayBuYW1lfSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIGBcIkNhbmNlbGxlZFJlamVjdGlvbkVycm9yXCJgLlxuICogVGhlIHZhbHVlIG9mIHRoZSB7QGxpbmsgY2F1c2V9IHByb3BlcnR5IGlzIHRoZSByZWFzb24gdGhlIHByb21pc2UgcmVqZWN0ZWQgd2l0aC5cbiAqXG4gKiBCZWNhdXNlIHRoZSBvcmlnaW5hbCBwcm9taXNlIHdhcyBjYW5jZWxsZWQsXG4gKiBhIHdyYXBwZXIgcHJvbWlzZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdW5oYW5kbGVkIHJlamVjdGlvbiBsaXN0ZW5lciBpbnN0ZWFkLlxuICogVGhlIHtAbGluayBwcm9taXNlfSBwcm9wZXJ0eSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbmNlbGxlZFJlamVjdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIEhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBwcm9taXNlIHRoYXQgd2FzIGNhbmNlbGxlZCBhbmQgdGhlbiByZWplY3RlZC5cbiAgICAgKi9cbiAgICBwcm9taXNlOiBDYW5jZWxsYWJsZVByb21pc2U8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGBDYW5jZWxsZWRSZWplY3Rpb25FcnJvcmAgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0aGF0IGNhdXNlZCB0aGUgZXJyb3Igb3JpZ2luYWxseS5cbiAgICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlamVjdGlvbiByZWFzb24uXG4gICAgICogQHBhcmFtIGluZm8gLSBBbiBvcHRpb25hbCBpbmZvcm1hdGl2ZSBtZXNzYWdlIHNwZWNpZnlpbmcgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggdGhlIGVycm9yIHdhcyB0aHJvd24uXG4gICAgICogICAgICAgICAgICAgICBEZWZhdWx0cyB0byB0aGUgc3RyaW5nIGBcIlVuaGFuZGxlZCByZWplY3Rpb24gaW4gY2FuY2VsbGVkIHByb21pc2UuXCJgLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb21pc2U6IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPiwgcmVhc29uPzogYW55LCBpbmZvPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKChpbmZvID8/IFwiVW5oYW5kbGVkIHJlamVjdGlvbiBpbiBjYW5jZWxsZWQgcHJvbWlzZS5cIikgKyBcIiBSZWFzb246IFwiICsgZXJyb3JNZXNzYWdlKHJlYXNvbiksIHsgY2F1c2U6IHJlYXNvbiB9KTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJDYW5jZWxsZWRSZWplY3Rpb25FcnJvclwiO1xuICAgIH1cbn1cblxudHlwZSBDYW5jZWxsYWJsZVByb21pc2VSZXNvbHZlcjxUPiA9ICh2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+IHwgQ2FuY2VsbGFibGVQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcbnR5cGUgQ2FuY2VsbGFibGVQcm9taXNlUmVqZWN0b3IgPSAocmVhc29uPzogYW55KSA9PiB2b2lkO1xudHlwZSBDYW5jZWxsYWJsZVByb21pc2VDYW5jZWxsZXIgPSAoY2F1c2U/OiBhbnkpID0+IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbnR5cGUgQ2FuY2VsbGFibGVQcm9taXNlRXhlY3V0b3I8VD4gPSAocmVzb2x2ZTogQ2FuY2VsbGFibGVQcm9taXNlUmVzb2x2ZXI8VD4sIHJlamVjdDogQ2FuY2VsbGFibGVQcm9taXNlUmVqZWN0b3IpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsbGFibGVQcm9taXNlTGlrZTxUPiB7XG4gICAgdGhlbjxUUmVzdWx0MSA9IFQsIFRSZXN1bHQyID0gbmV2ZXI+KG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4gfCBDYW5jZWxsYWJsZVByb21pc2VMaWtlPFRSZXN1bHQxPikgfCB1bmRlZmluZWQgfCBudWxsLCBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4gfCBDYW5jZWxsYWJsZVByb21pc2VMaWtlPFRSZXN1bHQyPikgfCB1bmRlZmluZWQgfCBudWxsKTogQ2FuY2VsbGFibGVQcm9taXNlTGlrZTxUUmVzdWx0MSB8IFRSZXN1bHQyPjtcbiAgICBjYW5jZWwoY2F1c2U/OiBhbnkpOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbi8qKlxuICogV3JhcHMgYSBjYW5jZWxsYWJsZSBwcm9taXNlIGFsb25nIHdpdGggaXRzIHJlc29sdXRpb24gbWV0aG9kcy5cbiAqIFRoZSBgb25jYW5jZWxsZWRgIGZpZWxkIHdpbGwgYmUgbnVsbCBpbml0aWFsbHkgYnV0IG1heSBiZSBzZXQgdG8gcHJvdmlkZSBhIGN1c3RvbSBjYW5jZWxsYXRpb24gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsbGFibGVQcm9taXNlV2l0aFJlc29sdmVyczxUPiB7XG4gICAgcHJvbWlzZTogQ2FuY2VsbGFibGVQcm9taXNlPFQ+O1xuICAgIHJlc29sdmU6IENhbmNlbGxhYmxlUHJvbWlzZVJlc29sdmVyPFQ+O1xuICAgIHJlamVjdDogQ2FuY2VsbGFibGVQcm9taXNlUmVqZWN0b3I7XG4gICAgb25jYW5jZWxsZWQ6IENhbmNlbGxhYmxlUHJvbWlzZUNhbmNlbGxlciB8IG51bGw7XG59XG5cbmludGVyZmFjZSBDYW5jZWxsYWJsZVByb21pc2VTdGF0ZSB7XG4gICAgcmVhZG9ubHkgcm9vdDogQ2FuY2VsbGFibGVQcm9taXNlU3RhdGU7XG4gICAgcmVzb2x2aW5nOiBib29sZWFuO1xuICAgIHNldHRsZWQ6IGJvb2xlYW47XG4gICAgcmVhc29uPzogQ2FuY2VsRXJyb3I7XG59XG5cbi8vIFByaXZhdGUgZmllbGQgbmFtZXMuXG5jb25zdCBiYXJyaWVyU3ltID0gU3ltYm9sKFwiYmFycmllclwiKTtcbmNvbnN0IGNhbmNlbEltcGxTeW0gPSBTeW1ib2woXCJjYW5jZWxJbXBsXCIpO1xuY29uc3Qgc3BlY2llcyA9IFN5bWJvbC5zcGVjaWVzID8/IFN5bWJvbChcInNwZWNpZXNQb2x5ZmlsbFwiKTtcblxuLyoqXG4gKiBBIHByb21pc2Ugd2l0aCBhbiBhdHRhY2hlZCBtZXRob2QgZm9yIGNhbmNlbGxpbmcgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbnMgKHNlZSB7QGxpbmsgQ2FuY2VsbGFibGVQcm9taXNlI2NhbmNlbH0pLlxuICogQ2FuY2VsbGF0aW9uIGNhbiBvcHRpb25hbGx5IGJlIGJvdW5kIHRvIGFuIHtAbGluayBBYm9ydFNpZ25hbH1cbiAqIGZvciBiZXR0ZXIgY29tcG9zYWJpbGl0eSAoc2VlIHtAbGluayBDYW5jZWxsYWJsZVByb21pc2UjY2FuY2VsT259KS5cbiAqXG4gKiBDYW5jZWxsaW5nIGEgcGVuZGluZyBwcm9taXNlIHdpbGwgcmVzdWx0IGluIGFuIGltbWVkaWF0ZSByZWplY3Rpb25cbiAqIHdpdGggYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIENhbmNlbEVycm9yfSBhcyByZWFzb24sXG4gKiBidXQgd2hvZXZlciBzdGFydGVkIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVzcG9uc2libGVcbiAqIGZvciBhY3R1YWxseSBhYm9ydGluZyB0aGUgdW5kZXJseWluZyBvcGVyYXRpb24uXG4gKiBUbyB0aGlzIHB1cnBvc2UsIHRoZSBjb25zdHJ1Y3RvciBhbmQgYWxsIGNoYWluaW5nIG1ldGhvZHNcbiAqIGFjY2VwdCBvcHRpb25hbCBjYW5jZWxsYXRpb24gY2FsbGJhY2tzLlxuICpcbiAqIElmIGEgYENhbmNlbGxhYmxlUHJvbWlzZWAgc3RpbGwgcmVzb2x2ZXMgYWZ0ZXIgaGF2aW5nIGJlZW4gY2FuY2VsbGVkLFxuICogdGhlIHJlc3VsdCB3aWxsIGJlIGRpc2NhcmRlZC4gSWYgaXQgcmVqZWN0cywgdGhlIHJlYXNvblxuICogd2lsbCBiZSByZXBvcnRlZCBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLFxuICogd3JhcHBlZCBpbiBhIHtAbGluayBDYW5jZWxsZWRSZWplY3Rpb25FcnJvcn0gaW5zdGFuY2UuXG4gKiBUbyBmYWNpbGl0YXRlIHRoZSBoYW5kbGluZyBvZiBjYW5jZWxsYXRpb24gcmVxdWVzdHMsXG4gKiBjYW5jZWxsZWQgYENhbmNlbGxhYmxlUHJvbWlzZWBzIHdpbGwgX25vdF8gcmVwb3J0IHVuaGFuZGxlZCBgQ2FuY2VsRXJyb3Jgc1xuICogd2hvc2UgYGNhdXNlYCBmaWVsZCBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHdpdGggd2hpY2ggdGhlIGN1cnJlbnQgcHJvbWlzZSB3YXMgY2FuY2VsbGVkLlxuICpcbiAqIEFsbCB1c3VhbCBwcm9taXNlIG1ldGhvZHMgYXJlIGRlZmluZWQgYW5kIHJldHVybiBhIGBDYW5jZWxsYWJsZVByb21pc2VgXG4gKiB3aG9zZSBjYW5jZWwgbWV0aG9kIHdpbGwgY2FuY2VsIHRoZSBwYXJlbnQgb3BlcmF0aW9uIGFzIHdlbGwsIHByb3BhZ2F0aW5nIHRoZSBjYW5jZWxsYXRpb24gcmVhc29uXG4gKiB1cHdhcmRzIHRocm91Z2ggcHJvbWlzZSBjaGFpbnMuXG4gKiBDb252ZXJzZWx5LCBjYW5jZWxsaW5nIGEgcHJvbWlzZSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGNhbmNlbCBkZXBlbmRlbnQgcHJvbWlzZXMgZG93bnN0cmVhbTpcbiAqIGBgYHRzXG4gKiBsZXQgcm9vdCA9IG5ldyBDYW5jZWxsYWJsZVByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAuLi4gfSk7XG4gKiBsZXQgY2hpbGQxID0gcm9vdC50aGVuKCgpID0+IHsgLi4uIH0pO1xuICogbGV0IGNoaWxkMiA9IGNoaWxkMS50aGVuKCgpID0+IHsgLi4uIH0pO1xuICogbGV0IGNoaWxkMyA9IHJvb3QuY2F0Y2goKCkgPT4geyAuLi4gfSk7XG4gKiBjaGlsZDEuY2FuY2VsKCk7IC8vIENhbmNlbHMgY2hpbGQxIGFuZCByb290LCBidXQgbm90IGNoaWxkMiBvciBjaGlsZDNcbiAqIGBgYFxuICogQ2FuY2VsbGluZyBhIHByb21pc2UgdGhhdCBoYXMgYWxyZWFkeSBzZXR0bGVkIGlzIHNhZmUgYW5kIGhhcyBubyBjb25zZXF1ZW5jZS5cbiAqXG4gKiBUaGUgYGNhbmNlbGAgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgX2Fsd2F5cyBmdWxmaWxsc19cbiAqIGFmdGVyIHRoZSB3aG9sZSBjaGFpbiBoYXMgcHJvY2Vzc2VkIHRoZSBjYW5jZWwgcmVxdWVzdFxuICogYW5kIGFsbCBhdHRhY2hlZCBjYWxsYmFja3MgdXAgdG8gdGhhdCBtb21lbnQgaGF2ZSBydW4uXG4gKlxuICogQWxsIEVTMjAyNCBwcm9taXNlIG1ldGhvZHMgKHN0YXRpYyBhbmQgaW5zdGFuY2UpIGFyZSBkZWZpbmVkIG9uIENhbmNlbGxhYmxlUHJvbWlzZSxcbiAqIGJ1dCBhY3R1YWwgYXZhaWxhYmlsaXR5IG1heSB2YXJ5IHdpdGggT1Mvd2VidmlldyB2ZXJzaW9uLlxuICpcbiAqIEluIGxpbmUgd2l0aCB0aGUgcHJvcG9zYWwgYXQgaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcm0tYnVpbHRpbi1zdWJjbGFzc2luZyxcbiAqIGBDYW5jZWxsYWJsZVByb21pc2VgIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNwYXJlbnQgc3ViY2xhc3NpbmcuXG4gKiBFeHRlbmRlcnMgc2hvdWxkIHRha2UgY2FyZSB0byBwcm92aWRlIHRoZWlyIG93biBtZXRob2QgaW1wbGVtZW50YXRpb25zLlxuICogVGhpcyBtaWdodCBiZSByZWNvbnNpZGVyZWQgaW4gY2FzZSB0aGUgcHJvcG9zYWwgaXMgcmV0aXJlZC5cbiAqXG4gKiBDYW5jZWxsYWJsZVByb21pc2UgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgRE9NIFByb21pc2Ugb2JqZWN0XG4gKiBhbmQgaXMgY29tcGxpYW50IHdpdGggdGhlIFtQcm9taXNlcy9BKyBzcGVjaWZpY2F0aW9uXShodHRwczovL3Byb21pc2VzYXBsdXMuY29tLylcbiAqIChpdCBwYXNzZXMgdGhlIFtjb21wbGlhbmNlIHN1aXRlXShodHRwczovL2dpdGh1Yi5jb20vcHJvbWlzZXMtYXBsdXMvcHJvbWlzZXMtdGVzdHMpKVxuICogaWYgc28gaXMgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDYW5jZWxsYWJsZVByb21pc2U8VD4gZXh0ZW5kcyBQcm9taXNlPFQ+IGltcGxlbWVudHMgUHJvbWlzZUxpa2U8VD4sIENhbmNlbGxhYmxlUHJvbWlzZUxpa2U8VD4ge1xuICAgIC8vIFByaXZhdGUgZmllbGRzLlxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIFtiYXJyaWVyU3ltXSE6IFBhcnRpYWw8UHJvbWlzZVdpdGhSZXNvbHZlcnM8dm9pZD4+IHwgbnVsbDtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBbY2FuY2VsSW1wbFN5bV0hOiAocmVhc29uOiBDYW5jZWxFcnJvcikgPT4gdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBgQ2FuY2VsbGFibGVQcm9taXNlYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleGVjdXRvciAtIEEgY2FsbGJhY2sgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9taXNlLiBUaGlzIGNhbGxiYWNrIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzOlxuICAgICAqICAgICAgICAgICAgICAgICAgIGEgYHJlc29sdmVgIGNhbGxiYWNrIHVzZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIGEgdmFsdWVcbiAgICAgKiAgICAgICAgICAgICAgICAgICBvciB0aGUgcmVzdWx0IG9mIGFub3RoZXIgcHJvbWlzZSAocG9zc2libHkgY2FuY2VsbGFibGUpLFxuICAgICAqICAgICAgICAgICAgICAgICAgIGFuZCBhIGByZWplY3RgIGNhbGxiYWNrIHVzZWQgdG8gcmVqZWN0IHRoZSBwcm9taXNlIHdpdGggYSBwcm92aWRlZCByZWFzb24gb3IgZXJyb3IuXG4gICAgICogICAgICAgICAgICAgICAgICAgSWYgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSBgcmVzb2x2ZWAgY2FsbGJhY2sgaXMgYSB0aGVuYWJsZSBfYW5kXyBjYW5jZWxsYWJsZSBvYmplY3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAoaXQgaGFzIGEgYHRoZW5gIF9hbmRfIGEgYGNhbmNlbGAgbWV0aG9kKSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb24gcmVxdWVzdHMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhhdCBvYmplY3QgYW5kIHRoZSBvbmNhbmNlbGxlZCB3aWxsIG5vdCBiZSBpbnZva2VkIGFueW1vcmUuXG4gICAgICogICAgICAgICAgICAgICAgICAgSWYgYW55IG9uZSBvZiB0aGUgdHdvIGNhbGxiYWNrcyBpcyBjYWxsZWQgX2FmdGVyXyB0aGUgcHJvbWlzZSBoYXMgYmVlbiBjYW5jZWxsZWQsXG4gICAgICogICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIHZhbHVlcyB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgcmVzb2x2ZWQgYXMgdXN1YWwsXG4gICAgICogICAgICAgICAgICAgICAgICAgYnV0IHRoZWlyIHJlc3VsdHMgd2lsbCBiZSBkaXNjYXJkZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHJlc29sdXRpb24gcHJvY2VzcyB1bHRpbWF0ZWx5IGVuZHMgdXAgaW4gYSByZWplY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBkdWUgdG8gY2FuY2VsbGF0aW9uLCB0aGUgcmVqZWN0aW9uIHJlYXNvblxuICAgICAqICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgd3JhcHBlZCBpbiBhIHtAbGluayBDYW5jZWxsZWRSZWplY3Rpb25FcnJvcn1cbiAgICAgKiAgICAgICAgICAgICAgICAgICBhbmQgYnViYmxlZCB1cCBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgICAqIEBwYXJhbSBvbmNhbmNlbGxlZCAtIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbnkgb3BlcmF0aW9uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBieSB0aGUgZXhlY3V0b3IgaXMgcHJvcGVybHkgaGFsdGVkIHVwb24gY2FuY2VsbGF0aW9uLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgY2FuIGJlIHVzZWQgdG8gdGhhdCBwdXJwb3NlLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIEl0IHdpbGwgYmUgY2FsbGVkIF9zeW5jaHJvbm91c2x5XyB3aXRoIGEgY2FuY2VsbGF0aW9uIGNhdXNlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBjYW5jZWxsYXRpb24gaXMgcmVxdWVzdGVkLCBfYWZ0ZXJfIHRoZSBwcm9taXNlIGhhcyBhbHJlYWR5IHJlamVjdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIHtAbGluayBDYW5jZWxFcnJvcn0sIGJ1dCBfYmVmb3JlX1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgIGFueSB7QGxpbmsgdGhlbn0ve0BsaW5rIGNhdGNofS97QGxpbmsgZmluYWxseX0gY2FsbGJhY2sgcnVucy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRoZW5hYmxlLCB0aGUgcHJvbWlzZSByZXR1cm5lZCBmcm9tIHtAbGluayBjYW5jZWx9XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgd2lsbCBvbmx5IGZ1bGZpbGwgYWZ0ZXIgdGhlIGZvcm1lciBoYXMgc2V0dGxlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBVbmhhbmRsZWQgZXhjZXB0aW9ucyBvciByZWplY3Rpb25zIGZyb20gdGhlIGNhbGxiYWNrIHdpbGwgYmUgd3JhcHBlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIGluIGEge0BsaW5rIENhbmNlbGxlZFJlamVjdGlvbkVycm9yfSBhbmQgYnViYmxlZCB1cCBhcyB1bmhhbmRsZWQgcmVqZWN0aW9ucy5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYHJlc29sdmVgIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgY2FuY2VsbGF0aW9uIHdpdGggYSBjYW5jZWxsYWJsZSBwcm9taXNlLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxhdGlvbiByZXF1ZXN0cyBvbiB0aGlzIHByb21pc2Ugd2lsbCBiZSBkaXZlcnRlZCB0byB0aGF0IHByb21pc2UsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBvcmlnaW5hbCBgb25jYW5jZWxsZWRgIGNhbGxiYWNrIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yOiBDYW5jZWxsYWJsZVByb21pc2VFeGVjdXRvcjxUPiwgb25jYW5jZWxsZWQ/OiBDYW5jZWxsYWJsZVByb21pc2VDYW5jZWxsZXIpIHtcbiAgICAgICAgbGV0IHJlc29sdmUhOiAodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcbiAgICAgICAgbGV0IHJlamVjdCE6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gICAgICAgIHN1cGVyKChyZXMsIHJlaikgPT4geyByZXNvbHZlID0gcmVzOyByZWplY3QgPSByZWo7IH0pO1xuXG4gICAgICAgIGlmICgodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpW3NwZWNpZXNdICE9PSBQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2FuY2VsbGFibGVQcm9taXNlIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNwYXJlbnQgc3ViY2xhc3NpbmcuIFBsZWFzZSByZWZyYWluIGZyb20gb3ZlcnJpZGluZyB0aGUgW1N5bWJvbC5zcGVjaWVzXSBzdGF0aWMgcHJvcGVydHkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb21pc2U6IENhbmNlbGxhYmxlUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4gPSB7XG4gICAgICAgICAgICBwcm9taXNlOiB0aGlzLFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICAgIGdldCBvbmNhbmNlbGxlZCgpIHsgcmV0dXJuIG9uY2FuY2VsbGVkID8/IG51bGw7IH0sXG4gICAgICAgICAgICBzZXQgb25jYW5jZWxsZWQoY2IpIHsgb25jYW5jZWxsZWQgPSBjYiA/PyB1bmRlZmluZWQ7IH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogQ2FuY2VsbGFibGVQcm9taXNlU3RhdGUgPSB7XG4gICAgICAgICAgICBnZXQgcm9vdCgpIHsgcmV0dXJuIHN0YXRlOyB9LFxuICAgICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNldHRsZWQ6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU2V0dXAgY2FuY2VsbGF0aW9uIHN5c3RlbS5cbiAgICAgICAgdm9pZCBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG4gICAgICAgICAgICBbYmFycmllclN5bV06IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW2NhbmNlbEltcGxTeW1dOiB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNhbmNlbGxlckZvcihwcm9taXNlLCBzdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUnVuIHRoZSBhY3R1YWwgZXhlY3V0b3IuXG4gICAgICAgIGNvbnN0IHJlamVjdG9yID0gcmVqZWN0b3JGb3IocHJvbWlzZSwgc3RhdGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXhlY3V0b3IocmVzb2x2ZXJGb3IocHJvbWlzZSwgc3RhdGUpLCByZWplY3Rvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc29sdmluZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBDYW5jZWxsYWJsZVByb21pc2UgZXhlY3V0b3IuXCIsIGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdG9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIGltbWVkaWF0ZWx5IHRoZSBleGVjdXRpb24gb2YgdGhlIG9wZXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9taXNlLlxuICAgICAqIFRoZSBwcm9taXNlIHJlamVjdHMgd2l0aCBhIHtAbGluayBDYW5jZWxFcnJvcn0gaW5zdGFuY2UgYXMgcmVhc29uLFxuICAgICAqIHdpdGggdGhlIHtAbGluayBDYW5jZWxFcnJvciNjYXVzZX0gcHJvcGVydHkgc2V0IHRvIHRoZSBnaXZlbiBhcmd1bWVudCwgaWYgYW55LlxuICAgICAqXG4gICAgICogSGFzIG5vIGVmZmVjdCBpZiBjYWxsZWQgYWZ0ZXIgdGhlIHByb21pc2UgaGFzIGFscmVhZHkgc2V0dGxlZDtcbiAgICAgKiByZXBlYXRlZCBjYWxscyBpbiBwYXJ0aWN1bGFyIGFyZSBzYWZlLCBidXQgb25seSB0aGUgZmlyc3Qgb25lXG4gICAgICogd2lsbCBzZXQgdGhlIGNhbmNlbGxhdGlvbiBjYXVzZS5cbiAgICAgKlxuICAgICAqIFRoZSBgQ2FuY2VsRXJyb3JgIGV4Y2VwdGlvbiBfbmVlZCBub3RfIGJlIGhhbmRsZWQgZXhwbGljaXRseSBfb24gdGhlIHByb21pc2VzIHRoYXQgYXJlIGJlaW5nIGNhbmNlbGxlZDpfXG4gICAgICogY2FuY2VsbGluZyBhIHByb21pc2Ugd2l0aCBubyBhdHRhY2hlZCByZWplY3Rpb24gaGFuZGxlciBkb2VzIG5vdCB0cmlnZ2VyIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gZXZlbnQuXG4gICAgICogVGhlcmVmb3JlLCB0aGUgZm9sbG93aW5nIGlkaW9tcyBhcmUgYWxsIGVxdWFsbHkgY29ycmVjdDpcbiAgICAgKiBgYGB0c1xuICAgICAqIG5ldyBDYW5jZWxsYWJsZVByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAuLi4gfSkuY2FuY2VsKCk7XG4gICAgICogbmV3IENhbmNlbGxhYmxlUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7IC4uLiB9KS50aGVuKC4uLikuY2FuY2VsKCk7XG4gICAgICogbmV3IENhbmNlbGxhYmxlUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7IC4uLiB9KS50aGVuKC4uLikuY2F0Y2goLi4uKS5jYW5jZWwoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBXaGVuZXZlciBzb21lIGNhbmNlbGxlZCBwcm9taXNlIGluIGEgY2hhaW4gcmVqZWN0cyB3aXRoIGEgYENhbmNlbEVycm9yYFxuICAgICAqIHdpdGggdGhlIHNhbWUgY2FuY2VsbGF0aW9uIGNhdXNlIGFzIGl0c2VsZiwgdGhlIGVycm9yIHdpbGwgYmUgZGlzY2FyZGVkIHNpbGVudGx5LlxuICAgICAqIEhvd2V2ZXIsIHRoZSBgQ2FuY2VsRXJyb3JgIF93aWxsIHN0aWxsIGJlIGRlbGl2ZXJlZF8gdG8gYWxsIGF0dGFjaGVkIHJlamVjdGlvbiBoYW5kbGVyc1xuICAgICAqIGFkZGVkIGJ5IHtAbGluayB0aGVufSBhbmQgcmVsYXRlZCBtZXRob2RzOlxuICAgICAqIGBgYHRzXG4gICAgICogbGV0IGNhbmNlbGxhYmxlID0gbmV3IENhbmNlbGxhYmxlUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7IC4uLiB9KTtcbiAgICAgKiBjYW5jZWxsYWJsZS50aGVuKCgpID0+IHsgLi4uIH0pLmNhdGNoKGNvbnNvbGUubG9nKTtcbiAgICAgKiBjYW5jZWxsYWJsZS5jYW5jZWwoKTsgLy8gQSBDYW5jZWxFcnJvciBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICAgICAqIGBgYFxuICAgICAqIElmIHRoZSBgQ2FuY2VsRXJyb3JgIGlzIG5vdCBoYW5kbGVkIGRvd25zdHJlYW0gYnkgdGhlIHRpbWUgaXQgcmVhY2hlc1xuICAgICAqIGEgX25vbi1jYW5jZWxsZWRfIHByb21pc2UsIGl0IF93aWxsXyB0cmlnZ2VyIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gZXZlbnQsXG4gICAgICoganVzdCBsaWtlIG5vcm1hbCByZWplY3Rpb25zIHdvdWxkOlxuICAgICAqIGBgYHRzXG4gICAgICogbGV0IGNhbmNlbGxhYmxlID0gbmV3IENhbmNlbGxhYmxlUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7IC4uLiB9KTtcbiAgICAgKiBsZXQgY2hhaW5lZCA9IGNhbmNlbGxhYmxlLnRoZW4oKCkgPT4geyAuLi4gfSkudGhlbigoKSA9PiB7IC4uLiB9KTsgLy8gTm8gY2F0Y2guLi5cbiAgICAgKiBjYW5jZWxsYWJsZS5jYW5jZWwoKTsgLy8gVW5oYW5kbGVkIHJlamVjdGlvbiBldmVudCBvbiBjaGFpbmVkIVxuICAgICAqIGBgYFxuICAgICAqIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3J0YW50IHRvIGVpdGhlciBjYW5jZWwgd2hvbGUgcHJvbWlzZSBjaGFpbnMgZnJvbSB0aGVpciB0YWlsLFxuICAgICAqIGFzIHNob3duIGluIHRoZSBjb3JyZWN0IGlkaW9tcyBhYm92ZSwgb3IgdGFrZSBjYXJlIG9mIGhhbmRsaW5nIGVycm9ycyBldmVyeXdoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBjYW5jZWxsYWJsZSBwcm9taXNlIHRoYXQgX2Z1bGZpbGxzXyBhZnRlciB0aGUgY2FuY2VsIGNhbGxiYWNrIChpZiBhbnkpXG4gICAgICogYW5kIGFsbCBoYW5kbGVycyBhdHRhY2hlZCB1cCB0byB0aGUgY2FsbCB0byBjYW5jZWwgaGF2ZSBydW4uXG4gICAgICogSWYgdGhlIGNhbmNlbCBjYWxsYmFjayByZXR1cm5zIGEgdGhlbmFibGUsIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IGBjYW5jZWxgXG4gICAgICogd2lsbCBhbHNvIHdhaXQgZm9yIHRoYXQgdGhlbmFibGUgdG8gc2V0dGxlLlxuICAgICAqIFRoaXMgZW5hYmxlcyBjYWxsZXJzIHRvIHdhaXQgZm9yIHRoZSBjYW5jZWxsZWQgb3BlcmF0aW9uIHRvIHRlcm1pbmF0ZVxuICAgICAqIHdpdGhvdXQgYmVpbmcgZm9yY2VkIHRvIGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGF0IHRoZSBjYWxsIHNpdGUuXG4gICAgICogYGBgdHNcbiAgICAgKiBjYW5jZWxsYWJsZS5jYW5jZWwoKS50aGVuKCgpID0+IHtcbiAgICAgKiAgICAgLy8gQ2xlYW51cCBmaW5pc2hlZCwgaXQncyBzYWZlIHRvIGRvIHNvbWV0aGluZyBlbHNlLlxuICAgICAqIH0sIChlcnIpID0+IHtcbiAgICAgKiAgICAgLy8gVW5yZWFjaGFibGU6IHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gY2FuY2VsIHdpbGwgbmV2ZXIgcmVqZWN0LlxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIF9ub3RfIGhhbmRsZSBpbXBsaWNpdGx5IGFueSByZWplY3Rpb25cbiAgICAgKiB0aGF0IG1pZ2h0IGhhdmUgb2NjdXJyZWQgYWxyZWFkeSBpbiB0aGUgY2FuY2VsbGVkIGNoYWluLlxuICAgICAqIEl0IHdpbGwganVzdCB0cmFjayB3aGV0aGVyIHJlZ2lzdGVyZWQgaGFuZGxlcnMgaGF2ZSBiZWVuIGV4ZWN1dGVkIG9yIG5vdC5cbiAgICAgKiBUaGVyZWZvcmUsIHVuaGFuZGxlZCByZWplY3Rpb25zIHdpbGwgbmV2ZXIgYmUgc2lsZW50bHkgaGFuZGxlZCBieSBjYWxsaW5nIGNhbmNlbC5cbiAgICAgKi9cbiAgICBjYW5jZWwoY2F1c2U/OiBhbnkpOiBDYW5jZWxsYWJsZVByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IENhbmNlbGxhYmxlUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgLy8gSU5WQVJJQU5UOiB0aGUgcmVzdWx0IG9mIHRoaXNbY2FuY2VsSW1wbFN5bV0gYW5kIHRoZSBiYXJyaWVyIGRvIG5vdCBldmVyIHJlamVjdC5cbiAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgbWFjT1MgSGlnaCBTaWVycmEgZG9lcyBub3Qgc3VwcG9ydCBQcm9taXNlLmFsbFNldHRsZWQuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpc1tjYW5jZWxJbXBsU3ltXShuZXcgQ2FuY2VsRXJyb3IoXCJQcm9taXNlIGNhbmNlbGxlZC5cIiwgeyBjYXVzZSB9KSksXG4gICAgICAgICAgICAgICAgY3VycmVudEJhcnJpZXIodGhpcylcbiAgICAgICAgICAgIF0pLnRoZW4oKCkgPT4gcmVzb2x2ZSgpLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBwcm9taXNlIGNhbmNlbGxhdGlvbiB0byB0aGUgYWJvcnQgZXZlbnQgb2YgdGhlIGdpdmVuIHtAbGluayBBYm9ydFNpZ25hbH0uXG4gICAgICogSWYgdGhlIHNpZ25hbCBoYXMgYWxyZWFkeSBhYm9ydGVkLCB0aGUgcHJvbWlzZSB3aWxsIGJlIGNhbmNlbGxlZCBpbW1lZGlhdGVseS5cbiAgICAgKiBXaGVuIGVpdGhlciBjb25kaXRpb24gaXMgdmVyaWZpZWQsIHRoZSBjYW5jZWxsYXRpb24gY2F1c2Ugd2lsbCBiZSBzZXRcbiAgICAgKiB0byB0aGUgc2lnbmFsJ3MgYWJvcnQgcmVhc29uIChzZWUge0BsaW5rIEFib3J0U2lnbmFsI3JlYXNvbn0pLlxuICAgICAqXG4gICAgICogSGFzIG5vIGVmZmVjdCBpZiBjYWxsZWQgKG9yIGlmIHRoZSBzaWduYWwgYWJvcnRzKSBfYWZ0ZXJfIHRoZSBwcm9taXNlIGhhcyBhbHJlYWR5IHNldHRsZWQuXG4gICAgICogT25seSB0aGUgZmlyc3Qgc2lnbmFsIHRvIGFib3J0IHdpbGwgc2V0IHRoZSBjYW5jZWxsYXRpb24gY2F1c2UuXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjYW5jZWxsYXRpb24gcHJvY2VzcyxcbiAgICAgKiBzZWUge0BsaW5rIGNhbmNlbH0gYW5kIHRoZSBgQ2FuY2VsbGFibGVQcm9taXNlYCBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgYGF3YWl0YGluZyBjYW5jZWxsYWJsZSBwcm9taXNlcyB3aXRob3V0IGhhdmluZ1xuICAgICAqIHRvIHN0b3JlIHRoZW0gZm9yIGZ1dHVyZSBjYW5jZWxsYXRpb24sIGUuZy46XG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBsb25nUnVubmluZ09wZXJhdGlvbigpLmNhbmNlbE9uKHNpZ25hbCk7XG4gICAgICogYGBgXG4gICAgICogaW5zdGVhZCBvZjpcbiAgICAgKiBgYGB0c1xuICAgICAqIGxldCBwcm9taXNlVG9CZUNhbmNlbGxlZCA9IGxvbmdSdW5uaW5nT3BlcmF0aW9uKCk7XG4gICAgICogYXdhaXQgcHJvbWlzZVRvQmVDYW5jZWxsZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGlzIHByb21pc2UsIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgICovXG4gICAgY2FuY2VsT24oc2lnbmFsOiBBYm9ydFNpZ25hbCk6IENhbmNlbGxhYmxlUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgdm9pZCB0aGlzLmNhbmNlbChzaWduYWwucmVhc29uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gdm9pZCB0aGlzLmNhbmNlbChzaWduYWwucmVhc29uKSwge2NhcHR1cmU6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIGNhbGxiYWNrcyBmb3IgdGhlIHJlc29sdXRpb24gYW5kL29yIHJlamVjdGlvbiBvZiB0aGUgYENhbmNlbGxhYmxlUHJvbWlzZWAuXG4gICAgICpcbiAgICAgKiBUaGUgb3B0aW9uYWwgYG9uY2FuY2VsbGVkYCBhcmd1bWVudCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBjYW5jZWxsZWQsXG4gICAgICogd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGBvbmNhbmNlbGxlZGAgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIFdoZW4gdGhlIHBhcmVudCBwcm9taXNlIHJlamVjdHMgb3IgaXMgY2FuY2VsbGVkLCB0aGUgYG9ucmVqZWN0ZWRgIGNhbGxiYWNrIHdpbGwgcnVuLFxuICAgICAqIF9ldmVuIGFmdGVyIHRoZSByZXR1cm5lZCBwcm9taXNlIGhhcyBiZWVuIGNhbmNlbGxlZDpfXG4gICAgICogaW4gdGhhdCBjYXNlLCBzaG91bGQgaXQgcmVqZWN0IG9yIHRocm93LCB0aGUgcmVhc29uIHdpbGwgYmUgd3JhcHBlZFxuICAgICAqIGluIGEge0BsaW5rIENhbmNlbGxlZFJlamVjdGlvbkVycm9yfSBhbmQgYnViYmxlZCB1cCBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9uZnVsZmlsbGVkIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIFByb21pc2UgaXMgcmVzb2x2ZWQuXG4gICAgICogQHBhcmFtIG9ucmVqZWN0ZWQgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZC5cbiAgICAgKiBAcmV0dXJucyBBIGBDYW5jZWxsYWJsZVByb21pc2VgIGZvciB0aGUgY29tcGxldGlvbiBvZiB3aGljaGV2ZXIgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuXG4gICAgICogVGhlIHJldHVybmVkIHByb21pc2UgaXMgaG9va2VkIHVwIHRvIHByb3BhZ2F0ZSBjYW5jZWxsYXRpb24gcmVxdWVzdHMgdXAgdGhlIGNoYWluLCBidXQgbm90IGRvd246XG4gICAgICpcbiAgICAgKiAgIC0gaWYgdGhlIHBhcmVudCBwcm9taXNlIGlzIGNhbmNlbGxlZCwgdGhlIGBvbnJlamVjdGVkYCBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgYENhbmNlbEVycm9yYFxuICAgICAqICAgICBhbmQgdGhlIHJldHVybmVkIHByb21pc2UgX3dpbGwgcmVzb2x2ZSByZWd1bGFybHlfIHdpdGggaXRzIHJlc3VsdDtcbiAgICAgKiAgIC0gY29udmVyc2VseSwgaWYgdGhlIHJldHVybmVkIHByb21pc2UgaXMgY2FuY2VsbGVkLCBfdGhlIHBhcmVudCBwcm9taXNlIGlzIGNhbmNlbGxlZCB0b287X1xuICAgICAqICAgICB0aGUgYG9ucmVqZWN0ZWRgIGhhbmRsZXIgd2lsbCBzdGlsbCBiZSBpbnZva2VkIHdpdGggdGhlIHBhcmVudCdzIGBDYW5jZWxFcnJvcmAsXG4gICAgICogICAgIGJ1dCBpdHMgcmVzdWx0IHdpbGwgYmUgZGlzY2FyZGVkXG4gICAgICogICAgIGFuZCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIHJlamVjdCB3aXRoIGEgYENhbmNlbEVycm9yYCBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogVGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB7QGxpbmsgY2FuY2VsfSB3aWxsIGZ1bGZpbGwgb25seSBhZnRlciBhbGwgYXR0YWNoZWQgaGFuZGxlcnNcbiAgICAgKiB1cCB0aGUgZW50aXJlIHByb21pc2UgY2hhaW4gaGF2ZSBiZWVuIHJ1bi5cbiAgICAgKlxuICAgICAqIElmIGVpdGhlciBjYWxsYmFjayByZXR1cm5zIGEgY2FuY2VsbGFibGUgcHJvbWlzZSxcbiAgICAgKiBjYW5jZWxsYXRpb24gcmVxdWVzdHMgd2lsbCBiZSBkaXZlcnRlZCB0byBpdCxcbiAgICAgKiBhbmQgdGhlIHNwZWNpZmllZCBgb25jYW5jZWxsZWRgIGNhbGxiYWNrIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgICAqL1xuICAgIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+IHwgQ2FuY2VsbGFibGVQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgdW5kZWZpbmVkIHwgbnVsbCwgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+IHwgQ2FuY2VsbGFibGVQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgdW5kZWZpbmVkIHwgbnVsbCwgb25jYW5jZWxsZWQ/OiBDYW5jZWxsYWJsZVByb21pc2VDYW5jZWxsZXIpOiBDYW5jZWxsYWJsZVByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2FuY2VsbGFibGVQcm9taXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbmNlbGxhYmxlUHJvbWlzZS5wcm90b3R5cGUudGhlbiBjYWxsZWQgb24gYW4gaW52YWxpZCBvYmplY3QuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTk9URTogVHlwZVNjcmlwdCdzIGJ1aWx0LWluIHR5cGUgZm9yIHRoZW4gaXMgYnJva2VuLFxuICAgICAgICAvLyBhcyBpdCBhbGxvd3Mgc3BlY2lmeWluZyBhbiBhcmJpdHJhcnkgVFJlc3VsdDEgIT0gVCBldmVuIHdoZW4gb25mdWxmaWxsZWQgaXMgbm90IGEgZnVuY3Rpb24uXG4gICAgICAgIC8vIFdlIGNhbm5vdCBmaXggaXQgaWYgd2Ugd2FudCB0byBDYW5jZWxsYWJsZVByb21pc2UgdG8gaW1wbGVtZW50IFByb21pc2VMaWtlPFQ+LlxuXG4gICAgICAgIGlmICghaXNDYWxsYWJsZShvbmZ1bGZpbGxlZCkpIHsgb25mdWxmaWxsZWQgPSBpZGVudGl0eSBhcyBhbnk7IH1cbiAgICAgICAgaWYgKCFpc0NhbGxhYmxlKG9ucmVqZWN0ZWQpKSB7IG9ucmVqZWN0ZWQgPSB0aHJvd2VyOyB9XG5cbiAgICAgICAgaWYgKG9uZnVsZmlsbGVkID09PSBpZGVudGl0eSAmJiBvbnJlamVjdGVkID09IHRocm93ZXIpIHtcbiAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciB0cml2aWFsIGFyZ3VtZW50cy5cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FuY2VsbGFibGVQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKHRoaXMgYXMgYW55KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXJyaWVyOiBQYXJ0aWFsPFByb21pc2VXaXRoUmVzb2x2ZXJzPHZvaWQ+PiA9IHt9O1xuICAgICAgICB0aGlzW2JhcnJpZXJTeW1dID0gYmFycmllcjtcblxuICAgICAgICByZXR1cm4gbmV3IENhbmNlbGxhYmxlUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB2b2lkIHN1cGVyLnRoZW4oXG4gICAgICAgICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW2JhcnJpZXJTeW1dID09PSBiYXJyaWVyKSB7IHRoaXNbYmFycmllclN5bV0gPSBudWxsOyB9XG4gICAgICAgICAgICAgICAgICAgIGJhcnJpZXIucmVzb2x2ZT8uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob25mdWxmaWxsZWQhKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChyZWFzb24/KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW2JhcnJpZXJTeW1dID09PSBiYXJyaWVyKSB7IHRoaXNbYmFycmllclN5bV0gPSBudWxsOyB9XG4gICAgICAgICAgICAgICAgICAgIGJhcnJpZXIucmVzb2x2ZT8uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob25yZWplY3RlZCEocmVhc29uKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9LCBhc3luYyAoY2F1c2U/KSA9PiB7XG4gICAgICAgICAgICAvL2NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvbmNhbmNlbGxlZD8uKGNhdXNlKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jYW5jZWwoY2F1c2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIGNhbGxiYWNrIGZvciBvbmx5IHRoZSByZWplY3Rpb24gb2YgdGhlIFByb21pc2UuXG4gICAgICpcbiAgICAgKiBUaGUgb3B0aW9uYWwgYG9uY2FuY2VsbGVkYCBhcmd1bWVudCB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBjYW5jZWxsZWQsXG4gICAgICogd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGBvbmNhbmNlbGxlZGAgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIFdoZW4gdGhlIHBhcmVudCBwcm9taXNlIHJlamVjdHMgb3IgaXMgY2FuY2VsbGVkLCB0aGUgYG9ucmVqZWN0ZWRgIGNhbGxiYWNrIHdpbGwgcnVuLFxuICAgICAqIF9ldmVuIGFmdGVyIHRoZSByZXR1cm5lZCBwcm9taXNlIGhhcyBiZWVuIGNhbmNlbGxlZDpfXG4gICAgICogaW4gdGhhdCBjYXNlLCBzaG91bGQgaXQgcmVqZWN0IG9yIHRocm93LCB0aGUgcmVhc29uIHdpbGwgYmUgd3JhcHBlZFxuICAgICAqIGluIGEge0BsaW5rIENhbmNlbGxlZFJlamVjdGlvbkVycm9yfSBhbmQgYnViYmxlZCB1cCBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgICAqXG4gICAgICogSXQgaXMgZXF1aXZhbGVudCB0b1xuICAgICAqIGBgYHRzXG4gICAgICogY2FuY2VsbGFibGVQcm9taXNlLnRoZW4odW5kZWZpbmVkLCBvbnJlamVjdGVkLCBvbmNhbmNlbGxlZCk7XG4gICAgICogYGBgXG4gICAgICogYW5kIHRoZSBzYW1lIGNhdmVhdHMgYXBwbHkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjYWxsYmFjay5cbiAgICAgKiBDYW5jZWxsYXRpb24gcmVxdWVzdHMgb24gdGhlIHJldHVybmVkIHByb21pc2VcbiAgICAgKiB3aWxsIHByb3BhZ2F0ZSB1cCB0aGUgY2hhaW4gdG8gdGhlIHBhcmVudCBwcm9taXNlLFxuICAgICAqIGJ1dCBub3QgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBwcm9taXNlIHJldHVybmVkIGZyb20ge0BsaW5rIGNhbmNlbH0gd2lsbCBmdWxmaWxsIG9ubHkgYWZ0ZXIgYWxsIGF0dGFjaGVkIGhhbmRsZXJzXG4gICAgICogdXAgdGhlIGVudGlyZSBwcm9taXNlIGNoYWluIGhhdmUgYmVlbiBydW4uXG4gICAgICpcbiAgICAgKiBJZiBgb25yZWplY3RlZGAgcmV0dXJucyBhIGNhbmNlbGxhYmxlIHByb21pc2UsXG4gICAgICogY2FuY2VsbGF0aW9uIHJlcXVlc3RzIHdpbGwgYmUgZGl2ZXJ0ZWQgdG8gaXQsXG4gICAgICogYW5kIHRoZSBzcGVjaWZpZWQgYG9uY2FuY2VsbGVkYCBjYWxsYmFjayB3aWxsIGJlIGRpc2NhcmRlZC5cbiAgICAgKiBTZWUge0BsaW5rIHRoZW59IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICovXG4gICAgY2F0Y2g8VFJlc3VsdCA9IG5ldmVyPihvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gKFByb21pc2VMaWtlPFRSZXN1bHQ+IHwgVFJlc3VsdCkpIHwgdW5kZWZpbmVkIHwgbnVsbCwgb25jYW5jZWxsZWQ/OiBDYW5jZWxsYWJsZVByb21pc2VDYW5jZWxsZXIpOiBDYW5jZWxsYWJsZVByb21pc2U8VCB8IFRSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9ucmVqZWN0ZWQsIG9uY2FuY2VsbGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBDYW5jZWxsYWJsZVByb21pc2UgaXMgc2V0dGxlZCAoZnVsZmlsbGVkIG9yIHJlamVjdGVkKS4gVGhlXG4gICAgICogcmVzb2x2ZWQgdmFsdWUgY2Fubm90IGJlIGFjY2Vzc2VkIG9yIG1vZGlmaWVkIGZyb20gdGhlIGNhbGxiYWNrLlxuICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgc2V0dGxlIGluIHRoZSBzYW1lIHN0YXRlIGFzIHRoZSBvcmlnaW5hbCBvbmVcbiAgICAgKiBhZnRlciB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBleGVjdXRpb24sXG4gICAgICogdW5sZXNzIHRoZSBjYWxsYmFjayB0aHJvd3Mgb3IgcmV0dXJucyBhIHJlamVjdGluZyBwcm9taXNlLFxuICAgICAqIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCByZWplY3QgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIFRoZSBvcHRpb25hbCBgb25jYW5jZWxsZWRgIGFyZ3VtZW50IHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIGNhbmNlbGxlZCxcbiAgICAgKiB3aXRoIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYG9uY2FuY2VsbGVkYCBhcmd1bWVudCBvZiB0aGUgY29uc3RydWN0b3IuXG4gICAgICogT25jZSB0aGUgcGFyZW50IHByb21pc2Ugc2V0dGxlcywgdGhlIGBvbmZpbmFsbHlgIGNhbGxiYWNrIHdpbGwgcnVuLFxuICAgICAqIF9ldmVuIGFmdGVyIHRoZSByZXR1cm5lZCBwcm9taXNlIGhhcyBiZWVuIGNhbmNlbGxlZDpfXG4gICAgICogaW4gdGhhdCBjYXNlLCBzaG91bGQgaXQgcmVqZWN0IG9yIHRocm93LCB0aGUgcmVhc29uIHdpbGwgYmUgd3JhcHBlZFxuICAgICAqIGluIGEge0BsaW5rIENhbmNlbGxlZFJlamVjdGlvbkVycm9yfSBhbmQgYnViYmxlZCB1cCBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2Yge0BsaW5rIHRoZW59IGFuZCB0aGUgc2FtZSBjYXZlYXRzIGFwcGx5LlxuICAgICAqIEl0IGlzIHBvbHlmaWxsZWQsIGhlbmNlIGF2YWlsYWJsZSBpbiBldmVyeSBPUy93ZWJ2aWV3IHZlcnNpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2UgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjYWxsYmFjay5cbiAgICAgKiBDYW5jZWxsYXRpb24gcmVxdWVzdHMgb24gdGhlIHJldHVybmVkIHByb21pc2VcbiAgICAgKiB3aWxsIHByb3BhZ2F0ZSB1cCB0aGUgY2hhaW4gdG8gdGhlIHBhcmVudCBwcm9taXNlLFxuICAgICAqIGJ1dCBub3QgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBwcm9taXNlIHJldHVybmVkIGZyb20ge0BsaW5rIGNhbmNlbH0gd2lsbCBmdWxmaWxsIG9ubHkgYWZ0ZXIgYWxsIGF0dGFjaGVkIGhhbmRsZXJzXG4gICAgICogdXAgdGhlIGVudGlyZSBwcm9taXNlIGNoYWluIGhhdmUgYmVlbiBydW4uXG4gICAgICpcbiAgICAgKiBJZiBgb25maW5hbGx5YCByZXR1cm5zIGEgY2FuY2VsbGFibGUgcHJvbWlzZSxcbiAgICAgKiBjYW5jZWxsYXRpb24gcmVxdWVzdHMgd2lsbCBiZSBkaXZlcnRlZCB0byBpdCxcbiAgICAgKiBhbmQgdGhlIHNwZWNpZmllZCBgb25jYW5jZWxsZWRgIGNhbGxiYWNrIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgICAqIFNlZSB7QGxpbmsgdGhlbn0gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKi9cbiAgICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB8IG51bGwsIG9uY2FuY2VsbGVkPzogQ2FuY2VsbGFibGVQcm9taXNlQ2FuY2VsbGVyKTogQ2FuY2VsbGFibGVQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENhbmNlbGxhYmxlUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5jZWxsYWJsZVByb21pc2UucHJvdG90eXBlLmZpbmFsbHkgY2FsbGVkIG9uIGFuIGludmFsaWQgb2JqZWN0LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDYWxsYWJsZShvbmZpbmFsbHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKG9uZmluYWxseSwgb25maW5hbGx5LCBvbmNhbmNlbGxlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgICAgICAgKHZhbHVlKSA9PiBDYW5jZWxsYWJsZVByb21pc2UucmVzb2x2ZShvbmZpbmFsbHkoKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgICAgICAgICAocmVhc29uPykgPT4gQ2FuY2VsbGFibGVQcm9taXNlLnJlc29sdmUob25maW5hbGx5KCkpLnRoZW4oKCkgPT4geyB0aHJvdyByZWFzb247IH0pLFxuICAgICAgICAgICAgb25jYW5jZWxsZWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2UgdXNlIHRoZSBgW1N5bWJvbC5zcGVjaWVzXWAgc3RhdGljIHByb3BlcnR5LCBpZiBhdmFpbGFibGUsXG4gICAgICogdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gYXV0b21hdGljIHN1YmNsYXNzaW5nIGZlYXR1cmVzIGZyb20ge0BsaW5rIFByb21pc2V9LlxuICAgICAqIEl0IGlzIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoYXQgZXh0ZW5kZXJzIGRvIG5vdCBvdmVycmlkZSB0aGlzLlxuICAgICAqIE9uY2UgdGhlIHByb3Bvc2FsIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJtLWJ1aWx0aW4tc3ViY2xhc3NpbmdcbiAgICAgKiBpcyBlaXRoZXIgYWNjZXB0ZWQgb3IgcmV0aXJlZCwgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGhhdmUgdG8gYmUgcmV2aXNlZCBhY2NvcmRpbmdseS5cbiAgICAgKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFtzcGVjaWVzXSgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIENhbmNlbGxhYmxlUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggYW4gYXJyYXkgb2YgcmVzdWx0c1xuICAgICAqIHdoZW4gYWxsIG9mIHRoZSBwcm92aWRlZCBQcm9taXNlcyByZXNvbHZlLCBvciByZWplY3RlZCB3aGVuIGFueSBQcm9taXNlIGlzIHJlamVjdGVkLlxuICAgICAqXG4gICAgICogRXZlcnkgb25lIG9mIHRoZSBwcm92aWRlZCBvYmplY3RzIHRoYXQgaXMgYSB0aGVuYWJsZSBfYW5kXyBjYW5jZWxsYWJsZSBvYmplY3RcbiAgICAgKiB3aWxsIGJlIGNhbmNlbGxlZCB3aGVuIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIGNhbmNlbGxlZCwgd2l0aCB0aGUgc2FtZSBjYXVzZS5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyBhbGw8VD4odmFsdWVzOiBJdGVyYWJsZTxUIHwgUHJvbWlzZUxpa2U8VD4+KTogQ2FuY2VsbGFibGVQcm9taXNlPEF3YWl0ZWQ8VD5bXT47XG4gICAgc3RhdGljIGFsbDxUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdIHwgW10+KHZhbHVlczogVCk6IENhbmNlbGxhYmxlUHJvbWlzZTx7IC1yZWFkb25seSBbUCBpbiBrZXlvZiBUXTogQXdhaXRlZDxUW1BdPjsgfT47XG4gICAgc3RhdGljIGFsbDxUIGV4dGVuZHMgSXRlcmFibGU8dW5rbm93bj4gfCBBcnJheUxpa2U8dW5rbm93bj4+KHZhbHVlczogVCk6IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGxldCBjb2xsZWN0ZWQgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjb2xsZWN0ZWQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IENhbmNlbGxhYmxlUHJvbWlzZS5yZXNvbHZlKGNvbGxlY3RlZClcbiAgICAgICAgICAgIDogbmV3IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBQcm9taXNlLmFsbChjb2xsZWN0ZWQpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0sIChjYXVzZT8pOiBQcm9taXNlPHZvaWQ+ID0+IGNhbmNlbEFsbChwcm9taXNlLCBjb2xsZWN0ZWQsIGNhdXNlKSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBDYW5jZWxsYWJsZVByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIGFuIGFycmF5IG9mIHJlc3VsdHNcbiAgICAgKiB3aGVuIGFsbCBvZiB0aGUgcHJvdmlkZWQgUHJvbWlzZXMgcmVzb2x2ZSBvciByZWplY3QuXG4gICAgICpcbiAgICAgKiBFdmVyeSBvbmUgb2YgdGhlIHByb3ZpZGVkIG9iamVjdHMgdGhhdCBpcyBhIHRoZW5hYmxlIF9hbmRfIGNhbmNlbGxhYmxlIG9iamVjdFxuICAgICAqIHdpbGwgYmUgY2FuY2VsbGVkIHdoZW4gdGhlIHJldHVybmVkIHByb21pc2UgaXMgY2FuY2VsbGVkLCB3aXRoIHRoZSBzYW1lIGNhdXNlLlxuICAgICAqXG4gICAgICogQGdyb3VwIFN0YXRpYyBNZXRob2RzXG4gICAgICovXG4gICAgc3RhdGljIGFsbFNldHRsZWQ8VD4odmFsdWVzOiBJdGVyYWJsZTxUIHwgUHJvbWlzZUxpa2U8VD4+KTogQ2FuY2VsbGFibGVQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PEF3YWl0ZWQ8VD4+W10+O1xuICAgIHN0YXRpYyBhbGxTZXR0bGVkPFQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gfCBbXT4odmFsdWVzOiBUKTogQ2FuY2VsbGFibGVQcm9taXNlPHsgLXJlYWRvbmx5IFtQIGluIGtleW9mIFRdOiBQcm9taXNlU2V0dGxlZFJlc3VsdDxBd2FpdGVkPFRbUF0+PjsgfT47XG4gICAgc3RhdGljIGFsbFNldHRsZWQ8VCBleHRlbmRzIEl0ZXJhYmxlPHVua25vd24+IHwgQXJyYXlMaWtlPHVua25vd24+Pih2YWx1ZXM6IFQpOiBDYW5jZWxsYWJsZVByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBsZXQgY29sbGVjdGVkID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gY29sbGVjdGVkLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyBDYW5jZWxsYWJsZVByb21pc2UucmVzb2x2ZShjb2xsZWN0ZWQpXG4gICAgICAgICAgICA6IG5ldyBDYW5jZWxsYWJsZVByb21pc2U8dW5rbm93bj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKGNvbGxlY3RlZCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSwgKGNhdXNlPyk6IFByb21pc2U8dm9pZD4gPT4gY2FuY2VsQWxsKHByb21pc2UsIGNvbGxlY3RlZCwgY2F1c2UpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGFueSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCBieSB0aGUgZmlyc3QgZ2l2ZW4gcHJvbWlzZSB0byBiZSBmdWxmaWxsZWQsXG4gICAgICogb3IgcmVqZWN0ZWQgd2l0aCBhbiBBZ2dyZWdhdGVFcnJvciBjb250YWluaW5nIGFuIGFycmF5IG9mIHJlamVjdGlvbiByZWFzb25zXG4gICAgICogaWYgYWxsIG9mIHRoZSBnaXZlbiBwcm9taXNlcyBhcmUgcmVqZWN0ZWQuXG4gICAgICogSXQgcmVzb2x2ZXMgYWxsIGVsZW1lbnRzIG9mIHRoZSBwYXNzZWQgaXRlcmFibGUgdG8gcHJvbWlzZXMgYXMgaXQgcnVucyB0aGlzIGFsZ29yaXRobS5cbiAgICAgKlxuICAgICAqIEV2ZXJ5IG9uZSBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0cyB0aGF0IGlzIGEgdGhlbmFibGUgX2FuZF8gY2FuY2VsbGFibGUgb2JqZWN0XG4gICAgICogd2lsbCBiZSBjYW5jZWxsZWQgd2hlbiB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBjYW5jZWxsZWQsIHdpdGggdGhlIHNhbWUgY2F1c2UuXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgYW55PFQ+KHZhbHVlczogSXRlcmFibGU8VCB8IFByb21pc2VMaWtlPFQ+Pik6IENhbmNlbGxhYmxlUHJvbWlzZTxBd2FpdGVkPFQ+PjtcbiAgICBzdGF0aWMgYW55PFQgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gfCBbXT4odmFsdWVzOiBUKTogQ2FuY2VsbGFibGVQcm9taXNlPEF3YWl0ZWQ8VFtudW1iZXJdPj47XG4gICAgc3RhdGljIGFueTxUIGV4dGVuZHMgSXRlcmFibGU8dW5rbm93bj4gfCBBcnJheUxpa2U8dW5rbm93bj4+KHZhbHVlczogVCk6IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGxldCBjb2xsZWN0ZWQgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjb2xsZWN0ZWQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IENhbmNlbGxhYmxlUHJvbWlzZS5yZXNvbHZlKGNvbGxlY3RlZClcbiAgICAgICAgICAgIDogbmV3IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBQcm9taXNlLmFueShjb2xsZWN0ZWQpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0sIChjYXVzZT8pOiBQcm9taXNlPHZvaWQ+ID0+IGNhbmNlbEFsbChwcm9taXNlLCBjb2xsZWN0ZWQsIGNhdXNlKSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQgd2hlbiBhbnkgb2YgdGhlIHByb3ZpZGVkIFByb21pc2VzIGFyZSByZXNvbHZlZCBvciByZWplY3RlZC5cbiAgICAgKlxuICAgICAqIEV2ZXJ5IG9uZSBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0cyB0aGF0IGlzIGEgdGhlbmFibGUgX2FuZF8gY2FuY2VsbGFibGUgb2JqZWN0XG4gICAgICogd2lsbCBiZSBjYW5jZWxsZWQgd2hlbiB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBjYW5jZWxsZWQsIHdpdGggdGhlIHNhbWUgY2F1c2UuXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmFjZTxUPih2YWx1ZXM6IEl0ZXJhYmxlPFQgfCBQcm9taXNlTGlrZTxUPj4pOiBDYW5jZWxsYWJsZVByb21pc2U8QXdhaXRlZDxUPj47XG4gICAgc3RhdGljIHJhY2U8VCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSB8IFtdPih2YWx1ZXM6IFQpOiBDYW5jZWxsYWJsZVByb21pc2U8QXdhaXRlZDxUW251bWJlcl0+PjtcbiAgICBzdGF0aWMgcmFjZTxUIGV4dGVuZHMgSXRlcmFibGU8dW5rbm93bj4gfCBBcnJheUxpa2U8dW5rbm93bj4+KHZhbHVlczogVCk6IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGxldCBjb2xsZWN0ZWQgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgQ2FuY2VsbGFibGVQcm9taXNlPHVua25vd24+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZvaWQgUHJvbWlzZS5yYWNlKGNvbGxlY3RlZCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCAoY2F1c2U/KTogUHJvbWlzZTx2b2lkPiA9PiBjYW5jZWxBbGwocHJvbWlzZSwgY29sbGVjdGVkLCBjYXVzZSkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNhbmNlbGxlZCBDYW5jZWxsYWJsZVByb21pc2UgZm9yIHRoZSBwcm92aWRlZCBjYXVzZS5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyBjYW5jZWw8VCA9IG5ldmVyPihjYXVzZT86IGFueSk6IENhbmNlbGxhYmxlUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgQ2FuY2VsbGFibGVQcm9taXNlPFQ+KCgpID0+IHt9KTtcbiAgICAgICAgcC5jYW5jZWwoY2F1c2UpO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENhbmNlbGxhYmxlUHJvbWlzZSB0aGF0IGNhbmNlbHNcbiAgICAgKiBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQsIHdpdGggdGhlIHByb3ZpZGVkIGNhdXNlLlxuICAgICAqXG4gICAgICogSWYgdGhlIHtAbGluayBBYm9ydFNpZ25hbC50aW1lb3V0fSBmYWN0b3J5IG1ldGhvZCBpcyBhdmFpbGFibGUsXG4gICAgICogaXQgaXMgdXNlZCB0byBiYXNlIHRoZSB0aW1lb3V0IG9uIF9hY3RpdmVfIHRpbWUgcmF0aGVyIHRoYW4gX2VsYXBzZWRfIHRpbWUuXG4gICAgICogT3RoZXJ3aXNlLCBgdGltZW91dGAgZmFsbHMgYmFjayB0byB7QGxpbmsgc2V0VGltZW91dH0uXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgdGltZW91dDxUID0gbmV2ZXI+KG1pbGxpc2Vjb25kczogbnVtYmVyLCBjYXVzZT86IGFueSk6IENhbmNlbGxhYmxlUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgQ2FuY2VsbGFibGVQcm9taXNlPFQ+KCgpID0+IHt9KTtcbiAgICAgICAgaWYgKEFib3J0U2lnbmFsICYmIHR5cGVvZiBBYm9ydFNpZ25hbCA9PT0gJ2Z1bmN0aW9uJyAmJiBBYm9ydFNpZ25hbC50aW1lb3V0ICYmIHR5cGVvZiBBYm9ydFNpZ25hbC50aW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBBYm9ydFNpZ25hbC50aW1lb3V0KG1pbGxpc2Vjb25kcykuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB2b2lkIHByb21pc2UuY2FuY2VsKGNhdXNlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHZvaWQgcHJvbWlzZS5jYW5jZWwoY2F1c2UpLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ2FuY2VsbGFibGVQcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0LlxuICAgICAqIFRoZSByZXR1cm5lZCBwcm9taXNlIGNhbiBiZSBjYW5jZWxsZWQgd2l0aG91dCBjb25zZXF1ZW5jZXMuXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2xlZXAobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBDYW5jZWxsYWJsZVByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDYW5jZWxsYWJsZVByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlclxuICAgICAqIHRoZSBzcGVjaWZpZWQgdGltZW91dCwgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAgICogVGhlIHJldHVybmVkIHByb21pc2UgY2FuIGJlIGNhbmNlbGxlZCB3aXRob3V0IGNvbnNlcXVlbmNlcy5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyBzbGVlcDxUPihtaWxsaXNlY29uZHM6IG51bWJlciwgdmFsdWU6IFQpOiBDYW5jZWxsYWJsZVByb21pc2U8VD47XG4gICAgc3RhdGljIHNsZWVwPFQgPSB2b2lkPihtaWxsaXNlY29uZHM6IG51bWJlciwgdmFsdWU/OiBUKTogQ2FuY2VsbGFibGVQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW5jZWxsYWJsZVByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSh2YWx1ZSEpLCBtaWxsaXNlY29uZHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJlamVjdGVkIENhbmNlbGxhYmxlUHJvbWlzZSBmb3IgdGhlIHByb3ZpZGVkIHJlYXNvbi5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyByZWplY3Q8VCA9IG5ldmVyPihyZWFzb24/OiBhbnkpOiBDYW5jZWxsYWJsZVByb21pc2U8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IENhbmNlbGxhYmxlUHJvbWlzZTxUPigoXywgcmVqZWN0KSA9PiByZWplY3QocmVhc29uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByZXNvbHZlZCBDYW5jZWxsYWJsZVByb21pc2UuXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzb2x2ZSgpOiBDYW5jZWxsYWJsZVByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByZXNvbHZlZCBDYW5jZWxsYWJsZVByb21pc2UgZm9yIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlOiBUKTogQ2FuY2VsbGFibGVQcm9taXNlPEF3YWl0ZWQ8VD4+O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcmVzb2x2ZWQgQ2FuY2VsbGFibGVQcm9taXNlIGZvciB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZ3JvdXAgU3RhdGljIE1ldGhvZHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzb2x2ZTxUPih2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+KTogQ2FuY2VsbGFibGVQcm9taXNlPEF3YWl0ZWQ8VD4+O1xuICAgIHN0YXRpYyByZXNvbHZlPFQgPSB2b2lkPih2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPik6IENhbmNlbGxhYmxlUHJvbWlzZTxBd2FpdGVkPFQ+PiB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxhYmxlUHJvbWlzZSkge1xuICAgICAgICAgICAgLy8gT3B0aW1pc2UgZm9yIGNhbmNlbGxhYmxlIHByb21pc2VzLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ2FuY2VsbGFibGVQcm9taXNlPGFueT4oKHJlc29sdmUpID0+IHJlc29sdmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENhbmNlbGxhYmxlUHJvbWlzZSBhbmQgcmV0dXJucyBpdCBpbiBhbiBvYmplY3QsIGFsb25nIHdpdGggaXRzIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnNcbiAgICAgKiBhbmQgYSBnZXR0ZXIvc2V0dGVyIGZvciB0aGUgY2FuY2VsbGF0aW9uIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgcG9seWZpbGxlZCwgaGVuY2UgYXZhaWxhYmxlIGluIGV2ZXJ5IE9TL3dlYnZpZXcgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEBncm91cCBTdGF0aWMgTWV0aG9kc1xuICAgICAqL1xuICAgIHN0YXRpYyB3aXRoUmVzb2x2ZXJzPFQ+KCk6IENhbmNlbGxhYmxlUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBDYW5jZWxsYWJsZVByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+ID0geyBvbmNhbmNlbGxlZDogbnVsbCB9IGFzIGFueTtcbiAgICAgICAgcmVzdWx0LnByb21pc2UgPSBuZXcgQ2FuY2VsbGFibGVQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHJlc3VsdC5yZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0sIChjYXVzZT86IGFueSkgPT4geyByZXN1bHQub25jYW5jZWxsZWQ/LihjYXVzZSk7IH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpbXBsZW1lbnRzIHRoZSBjYW5jZWxsYXRpb24gYWxnb3JpdGhtIGZvciB0aGUgZ2l2ZW4gY2FuY2VsbGFibGUgcHJvbWlzZS5cbiAqIFRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIHJlc3VsdGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZWplY3QuXG4gKi9cbmZ1bmN0aW9uIGNhbmNlbGxlckZvcjxUPihwcm9taXNlOiBDYW5jZWxsYWJsZVByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+LCBzdGF0ZTogQ2FuY2VsbGFibGVQcm9taXNlU3RhdGUpIHtcbiAgICBsZXQgY2FuY2VsbGF0aW9uUHJvbWlzZTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+ID0gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIChyZWFzb246IENhbmNlbEVycm9yKTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKCFzdGF0ZS5zZXR0bGVkKSB7XG4gICAgICAgICAgICBzdGF0ZS5zZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgIC8vIEF0dGFjaCBhbiBlcnJvciBoYW5kbGVyIHRoYXQgaWdub3JlcyB0aGlzIHNwZWNpZmljIHJlamVjdGlvbiByZWFzb24gYW5kIG5vdGhpbmcgZWxzZS5cbiAgICAgICAgICAgIC8vIEluIHRoZW9yeSwgYSBzYW5lIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gYXQgdGhpcyBwb2ludFxuICAgICAgICAgICAgLy8gc2hvdWxkIGFsd2F5cyByZWplY3Qgd2l0aCBvdXIgY2FuY2VsbGF0aW9uIHJlYXNvbixcbiAgICAgICAgICAgIC8vIGhlbmNlIHRoZSBoYW5kbGVyIHdpbGwgbmV2ZXIgdGhyb3cuXG4gICAgICAgICAgICB2b2lkIFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbChwcm9taXNlLnByb21pc2UsIHVuZGVmaW5lZCwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIgIT09IHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiByZWFzb24gaXMgbm90IHNldCwgdGhlIHByb21pc2UgcmVzb2x2ZWQgcmVndWxhcmx5LCBoZW5jZSB3ZSBtdXN0IG5vdCBjYWxsIG9uY2FuY2VsbGVkLlxuICAgICAgICAvLyBJZiBvbmNhbmNlbGxlZCBpcyB1bnNldCwgbm8gbmVlZCB0byBnbyBhbnkgZnVydGhlci5cbiAgICAgICAgaWYgKCFzdGF0ZS5yZWFzb24gfHwgIXByb21pc2Uub25jYW5jZWxsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY2FuY2VsbGF0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvbWlzZS5vbmNhbmNlbGxlZCEoc3RhdGUucmVhc29uIS5jYXVzZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3IENhbmNlbGxlZFJlamVjdGlvbkVycm9yKHByb21pc2UucHJvbWlzZSwgZXJyLCBcIlVuaGFuZGxlZCBleGNlcHRpb24gaW4gb25jYW5jZWxsZWQgY2FsbGJhY2suXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbj8pID0+IHtcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBDYW5jZWxsZWRSZWplY3Rpb25FcnJvcihwcm9taXNlLnByb21pc2UsIHJlYXNvbiwgXCJVbmhhbmRsZWQgcmVqZWN0aW9uIGluIG9uY2FuY2VsbGVkIGNhbGxiYWNrLlwiKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFVuc2V0IG9uY2FuY2VsbGVkIHRvIHByZXZlbnQgcmVwZWF0ZWQgY2FsbHMuXG4gICAgICAgIHByb21pc2Uub25jYW5jZWxsZWQgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjYW5jZWxsYXRpb25Qcm9taXNlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpbXBsZW1lbnRzIHRoZSByZXNvbHV0aW9uIGFsZ29yaXRobSBmb3IgdGhlIGdpdmVuIGNhbmNlbGxhYmxlIHByb21pc2UuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVyRm9yPFQ+KHByb21pc2U6IENhbmNlbGxhYmxlUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4sIHN0YXRlOiBDYW5jZWxsYWJsZVByb21pc2VTdGF0ZSk6IENhbmNlbGxhYmxlUHJvbWlzZVJlc29sdmVyPFQ+IHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS5yZXNvbHZpbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN0YXRlLnJlc29sdmluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBwcm9taXNlLnByb21pc2UpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zZXR0bGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3RhdGUuc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICBwcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgbGV0IHRoZW46IGFueTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhlbiA9ICh2YWx1ZSBhcyBhbnkpLnRoZW47XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQ2FsbGFibGUodGhlbikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FuY2VsID0gKHZhbHVlIGFzIGFueSkuY2FuY2VsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDYWxsYWJsZShjYW5jZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbmNhbmNlbGxlZCA9IChjYXVzZT86IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmxlY3QuYXBwbHkoY2FuY2VsLCB2YWx1ZSwgW2NhdXNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFscmVhZHkgY2FuY2VsbGVkLCBwcm9wYWdhdGUgY2FuY2VsbGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIGNhbmNlbGxlciBhbGdvcml0aG0gZG9lcyBub3QgcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gaXQgY2FuIGJlIGRpc2NhcmRlZCBzYWZlbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBjYW5jZWxsZXJGb3IoeyAuLi5wcm9taXNlLCBvbmNhbmNlbGxlZCB9LCBzdGF0ZSkoc3RhdGUucmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5vbmNhbmNlbGxlZCA9IG9uY2FuY2VsbGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGU6IENhbmNlbGxhYmxlUHJvbWlzZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICByb290OiBzdGF0ZS5yb290LFxuICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBnZXQgc2V0dGxlZCgpIHsgcmV0dXJuIHRoaXMucm9vdC5zZXR0bGVkIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldCBzZXR0bGVkKHZhbHVlKSB7IHRoaXMucm9vdC5zZXR0bGVkID0gdmFsdWU7IH0sXG4gICAgICAgICAgICAgICAgICAgIGdldCByZWFzb24oKSB7IHJldHVybiB0aGlzLnJvb3QucmVhc29uIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0b3IgPSByZWplY3RvckZvcihwcm9taXNlLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgUmVmbGVjdC5hcHBseSh0aGVuLCB2YWx1ZSwgW3Jlc29sdmVyRm9yKHByb21pc2UsIG5ld1N0YXRlKSwgcmVqZWN0b3JdKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0b3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBJTVBPUlRBTlQhXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuc2V0dGxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3RhdGUuc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2FsbGJhY2sgdGhhdCBpbXBsZW1lbnRzIHRoZSByZWplY3Rpb24gYWxnb3JpdGhtIGZvciB0aGUgZ2l2ZW4gY2FuY2VsbGFibGUgcHJvbWlzZS5cbiAqL1xuZnVuY3Rpb24gcmVqZWN0b3JGb3I8VD4ocHJvbWlzZTogQ2FuY2VsbGFibGVQcm9taXNlV2l0aFJlc29sdmVyczxUPiwgc3RhdGU6IENhbmNlbGxhYmxlUHJvbWlzZVN0YXRlKTogQ2FuY2VsbGFibGVQcm9taXNlUmVqZWN0b3Ige1xuICAgIHJldHVybiAocmVhc29uPykgPT4ge1xuICAgICAgICBpZiAoc3RhdGUucmVzb2x2aW5nKSB7IHJldHVybjsgfVxuICAgICAgICBzdGF0ZS5yZXNvbHZpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdGF0ZS5zZXR0bGVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBDYW5jZWxFcnJvciAmJiBzdGF0ZS5yZWFzb24gaW5zdGFuY2VvZiBDYW5jZWxFcnJvciAmJiBPYmplY3QuaXMocmVhc29uLmNhdXNlLCBzdGF0ZS5yZWFzb24uY2F1c2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN3YWxsb3cgbGF0ZSByZWplY3Rpb25zIHRoYXQgYXJlIENhbmNlbEVycm9ycyB3aG9zZSBjYW5jZWxsYXRpb24gY2F1c2UgaXMgdGhlIHNhbWUgYXMgb3Vycy5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgICAgdm9pZCBQcm9taXNlLnJlamVjdChuZXcgQ2FuY2VsbGVkUmVqZWN0aW9uRXJyb3IocHJvbWlzZS5wcm9taXNlLCByZWFzb24pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYW5jZWxzIGFsbCB2YWx1ZXMgaW4gYW4gYXJyYXkgdGhhdCBsb29rIGxpa2UgY2FuY2VsbGFibGUgdGhlbmFibGVzLlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBvbmNlIGFsbCBjYW5jZWxsYXRpb24gcHJvY2VkdXJlcyBmb3IgdGhlIGdpdmVuIHZhbHVlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmZ1bmN0aW9uIGNhbmNlbEFsbChwYXJlbnQ6IENhbmNlbGxhYmxlUHJvbWlzZTx1bmtub3duPiwgdmFsdWVzOiBhbnlbXSwgY2F1c2U/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICBsZXQgY2FuY2VsOiBDYW5jZWxsYWJsZVByb21pc2VDYW5jZWxsZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWlzQ2FsbGFibGUodmFsdWUudGhlbikpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgIGNhbmNlbCA9IHZhbHVlLmNhbmNlbDtcbiAgICAgICAgICAgIGlmICghaXNDYWxsYWJsZShjYW5jZWwpKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgIH0gY2F0Y2ggeyBjb250aW51ZTsgfVxuXG4gICAgICAgIGxldCByZXN1bHQ6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuYXBwbHkoY2FuY2VsLCB2YWx1ZSwgW2NhdXNlXSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3IENhbmNlbGxlZFJlamVjdGlvbkVycm9yKHBhcmVudCwgZXJyLCBcIlVuaGFuZGxlZCBleGNlcHRpb24gaW4gY2FuY2VsIG1ldGhvZC5cIikpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3VsdCkgeyBjb250aW51ZTsgfVxuICAgICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgICAgICAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSAgPyByZXN1bHQgOiBQcm9taXNlLnJlc29sdmUocmVzdWx0KSkuY2F0Y2goKHJlYXNvbj8pID0+IHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgQ2FuY2VsbGVkUmVqZWN0aW9uRXJyb3IocGFyZW50LCByZWFzb24sIFwiVW5oYW5kbGVkIHJlamVjdGlvbiBpbiBjYW5jZWwgbWV0aG9kLlwiKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKSBhcyBhbnk7XG59XG5cbi8qKlxuICogUmV0dXJucyBpdHMgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5PFQ+KHg6IFQpOiBUIHtcbiAgICByZXR1cm4geDtcbn1cblxuLyoqXG4gKiBUaHJvd3MgaXRzIGFyZ3VtZW50LlxuICovXG5mdW5jdGlvbiB0aHJvd2VyKHJlYXNvbj86IGFueSk6IG5ldmVyIHtcbiAgICB0aHJvdyByZWFzb247XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdmFyaW91cyBzdHJhdGVnaWVzIHRvIGNvbnZlcnQgYW4gZXJyb3IgdG8gYSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnI6IGFueSk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnIgIT09ICdvYmplY3QnIHx8IGVyci50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBlcnI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZXJyKTtcbiAgICB9IGNhdGNoIHt9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycik7XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgcmV0dXJuIFwiPGNvdWxkIG5vdCBjb252ZXJ0IGVycm9yIHRvIHN0cmluZz5cIjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IGJhcnJpZXIgcHJvbWlzZSBmb3IgdGhlIGdpdmVuIGNhbmNlbGxhYmxlIHByb21pc2UuIElmIG5lY2Vzc2FyeSwgaW5pdGlhbGlzZXMgdGhlIGJhcnJpZXIuXG4gKi9cbmZ1bmN0aW9uIGN1cnJlbnRCYXJyaWVyPFQ+KHByb21pc2U6IENhbmNlbGxhYmxlUHJvbWlzZTxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwd3I6IFBhcnRpYWw8UHJvbWlzZVdpdGhSZXNvbHZlcnM8dm9pZD4+ID0gcHJvbWlzZVtiYXJyaWVyU3ltXSA/PyB7fTtcbiAgICBpZiAoISgncHJvbWlzZScgaW4gcHdyKSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHB3ciwgcHJvbWlzZVdpdGhSZXNvbHZlcnM8dm9pZD4oKSk7XG4gICAgfVxuICAgIGlmIChwcm9taXNlW2JhcnJpZXJTeW1dID09IG51bGwpIHtcbiAgICAgICAgcHdyLnJlc29sdmUhKCk7XG4gICAgICAgIHByb21pc2VbYmFycmllclN5bV0gPSBwd3I7XG4gICAgfVxuICAgIHJldHVybiBwd3IucHJvbWlzZSE7XG59XG5cbi8vIFBvbHlmaWxsIFByb21pc2Uud2l0aFJlc29sdmVycy5cbmxldCBwcm9taXNlV2l0aFJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVycztcbmlmIChwcm9taXNlV2l0aFJlc29sdmVycyAmJiB0eXBlb2YgcHJvbWlzZVdpdGhSZXNvbHZlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9taXNlV2l0aFJlc29sdmVycyA9IHByb21pc2VXaXRoUmVzb2x2ZXJzLmJpbmQoUHJvbWlzZSk7XG59IGVsc2Uge1xuICAgIHByb21pc2VXaXRoUmVzb2x2ZXJzID0gZnVuY3Rpb24gPFQ+KCk6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+IHtcbiAgICAgICAgbGV0IHJlc29sdmUhOiAodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcbiAgICAgICAgbGV0IHJlamVjdCE6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHsgcmVzb2x2ZSA9IHJlczsgcmVqZWN0ID0gcmVqOyB9KTtcbiAgICAgICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZSwgcmVqZWN0IH07XG4gICAgfVxufSIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuaW1wb3J0IHtuZXdSdW50aW1lQ2FsbGVyLCBvYmplY3ROYW1lc30gZnJvbSBcIi4vcnVudGltZS5qc1wiO1xuXG5jb25zdCBjYWxsID0gbmV3UnVudGltZUNhbGxlcihvYmplY3ROYW1lcy5DbGlwYm9hcmQpO1xuXG5jb25zdCBDbGlwYm9hcmRTZXRUZXh0ID0gMDtcbmNvbnN0IENsaXBib2FyZFRleHQgPSAxO1xuXG4vKipcbiAqIFNldHMgdGhlIHRleHQgdG8gdGhlIENsaXBib2FyZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIHNldCB0byB0aGUgQ2xpcGJvYXJkLlxuICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNldFRleHQodGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGNhbGwoQ2xpcGJvYXJkU2V0VGV4dCwge3RleHR9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIENsaXBib2FyZCB0ZXh0XG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGV4dCBmcm9tIHRoZSBDbGlwYm9hcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNhbGwoQ2xpcGJvYXJkVGV4dCk7XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG5cbi8qKlxuICogQW55IGlzIGEgZHVtbXkgY3JlYXRpb24gZnVuY3Rpb24gZm9yIHNpbXBsZSBvciB1bmtub3duIHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQW55PFQgPSBhbnk+KHNvdXJjZTogYW55KTogVCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cblxuLyoqXG4gKiBCeXRlU2xpY2UgaXMgYSBjcmVhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2VzXG4gKiBudWxsIHN0cmluZ3Mgd2l0aCBlbXB0eSBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQnl0ZVNsaWNlKHNvdXJjZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKChzb3VyY2UgPT0gbnVsbCkgPyBcIlwiIDogc291cmNlKTtcbn1cblxuLyoqXG4gKiBBcnJheSB0YWtlcyBhIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhbiBhcmJpdHJhcnkgdHlwZVxuICogYW5kIHJldHVybnMgYW4gaW4tcGxhY2UgY3JlYXRpb24gZnVuY3Rpb24gZm9yIGFuIGFycmF5XG4gKiB3aG9zZSBlbGVtZW50cyBhcmUgb2YgdGhhdCB0eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQXJyYXk8VCA9IGFueT4oZWxlbWVudDogKHNvdXJjZTogYW55KSA9PiBUKTogKHNvdXJjZTogYW55KSA9PiBUW10ge1xuICAgIGlmIChlbGVtZW50ID09PSBBbnkpIHtcbiAgICAgICAgcmV0dXJuIChzb3VyY2UpID0+IChzb3VyY2UgPT09IG51bGwgPyBbXSA6IHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2UpID0+IHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzb3VyY2VbaV0gPSBlbGVtZW50KHNvdXJjZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9O1xufVxuXG4vKipcbiAqIE1hcCB0YWtlcyBjcmVhdGlvbiBmdW5jdGlvbnMgZm9yIHR3byBhcmJpdHJhcnkgdHlwZXNcbiAqIGFuZCByZXR1cm5zIGFuIGluLXBsYWNlIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhbiBvYmplY3RcbiAqIHdob3NlIGtleXMgYW5kIHZhbHVlcyBhcmUgb2YgdGhvc2UgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNYXA8ViA9IGFueT4oa2V5OiAoc291cmNlOiBhbnkpID0+IHN0cmluZywgdmFsdWU6IChzb3VyY2U6IGFueSkgPT4gVik6IChzb3VyY2U6IGFueSkgPT4gUmVjb3JkPHN0cmluZywgVj4ge1xuICAgIGlmICh2YWx1ZSA9PT0gQW55KSB7XG4gICAgICAgIHJldHVybiAoc291cmNlKSA9PiAoc291cmNlID09PSBudWxsID8ge30gOiBzb3VyY2UpO1xuICAgIH1cblxuICAgIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIHNvdXJjZVtrZXldID0gdmFsdWUoc291cmNlW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBOdWxsYWJsZSB0YWtlcyBhIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhbiBhcmJpdHJhcnkgdHlwZVxuICogYW5kIHJldHVybnMgYSBjcmVhdGlvbiBmdW5jdGlvbiBmb3IgYSBudWxsYWJsZSB2YWx1ZSBvZiB0aGF0IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBOdWxsYWJsZTxUID0gYW55PihlbGVtZW50OiAoc291cmNlOiBhbnkpID0+IFQpOiAoc291cmNlOiBhbnkpID0+IChUIHwgbnVsbCkge1xuICAgIGlmIChlbGVtZW50ID09PSBBbnkpIHtcbiAgICAgICAgcmV0dXJuIEFueTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZSkgPT4gKHNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBlbGVtZW50KHNvdXJjZSkpO1xufVxuXG4vKipcbiAqIFN0cnVjdCB0YWtlcyBhbiBvYmplY3QgbWFwcGluZyBmaWVsZCBuYW1lcyB0byBjcmVhdGlvbiBmdW5jdGlvbnNcbiAqIGFuZCByZXR1cm5zIGFuIGluLXBsYWNlIGNyZWF0aW9uIGZ1bmN0aW9uIGZvciBhIHN0cnVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN0cnVjdChjcmVhdGVGaWVsZDogUmVjb3JkPHN0cmluZywgKHNvdXJjZTogYW55KSA9PiBhbnk+KTpcbiAgICA8VSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBhbnk+KHNvdXJjZTogYW55KSA9PiBVXG57XG4gICAgbGV0IGFsbEFueSA9IHRydWU7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIGNyZWF0ZUZpZWxkKSB7XG4gICAgICAgIGlmIChjcmVhdGVGaWVsZFtuYW1lXSAhPT0gQW55KSB7XG4gICAgICAgICAgICBhbGxBbnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxBbnkpIHtcbiAgICAgICAgcmV0dXJuIEFueTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gY3JlYXRlRmllbGQpIHtcbiAgICAgICAgICAgIGlmIChuYW1lIGluIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZVtuYW1lXSA9IGNyZWF0ZUZpZWxkW25hbWVdKHNvdXJjZVtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9O1xufVxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xuICAgIC8qKiBUaGUgd2lkdGggb2YgYSByZWN0YW5ndWxhciBhcmVhLiAqL1xuICAgIFdpZHRoOiBudW1iZXI7XG4gICAgLyoqIFRoZSBoZWlnaHQgb2YgYSByZWN0YW5ndWxhciBhcmVhLiAqL1xuICAgIEhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3Qge1xuICAgIC8qKiBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBvcmlnaW4uICovXG4gICAgWDogbnVtYmVyO1xuICAgIC8qKiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBvcmlnaW4uICovXG4gICAgWTogbnVtYmVyO1xuICAgIC8qKiBUaGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4gKi9cbiAgICBXaWR0aDogbnVtYmVyO1xuICAgIC8qKiBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuICovXG4gICAgSGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuIHtcbiAgICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY3JlZW4uICovXG4gICAgSUQ6IHN0cmluZztcbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUgc2NyZWVuLiAqL1xuICAgIE5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHNjYWxlIGZhY3RvciBvZiB0aGUgc2NyZWVuIChEUEkvOTYpLiAxID0gc3RhbmRhcmQgRFBJLCAyID0gSGlEUEkgKFJldGluYSksIGV0Yy4gKi9cbiAgICBTY2FsZUZhY3RvcjogbnVtYmVyO1xuICAgIC8qKiBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBzY3JlZW4uICovXG4gICAgWDogbnVtYmVyO1xuICAgIC8qKiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBzY3JlZW4uICovXG4gICAgWTogbnVtYmVyO1xuICAgIC8qKiBDb250YWlucyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgc2NyZWVuLiAqL1xuICAgIFNpemU6IFNpemU7XG4gICAgLyoqIENvbnRhaW5zIHRoZSBib3VuZHMgb2YgdGhlIHNjcmVlbiBpbiB0ZXJtcyBvZiBYLCBZLCBXaWR0aCwgYW5kIEhlaWdodC4gKi9cbiAgICBCb3VuZHM6IFJlY3Q7XG4gICAgLyoqIENvbnRhaW5zIHRoZSBwaHlzaWNhbCBib3VuZHMgb2YgdGhlIHNjcmVlbiBpbiB0ZXJtcyBvZiBYLCBZLCBXaWR0aCwgYW5kIEhlaWdodCAoYmVmb3JlIHNjYWxpbmcpLiAqL1xuICAgIFBoeXNpY2FsQm91bmRzOiBSZWN0O1xuICAgIC8qKiBDb250YWlucyB0aGUgYXJlYSBvZiB0aGUgc2NyZWVuIHRoYXQgaXMgYWN0dWFsbHkgdXNhYmxlIChleGNsdWRpbmcgdGFza2JhciBhbmQgb3RoZXIgc3lzdGVtIFVJKS4gKi9cbiAgICBXb3JrQXJlYTogUmVjdDtcbiAgICAvKiogQ29udGFpbnMgdGhlIHBoeXNpY2FsIFdvcmtBcmVhIG9mIHRoZSBzY3JlZW4gKGJlZm9yZSBzY2FsaW5nKS4gKi9cbiAgICBQaHlzaWNhbFdvcmtBcmVhOiBSZWN0O1xuICAgIC8qKiBUcnVlIGlmIHRoaXMgaXMgdGhlIHByaW1hcnkgbW9uaXRvciBzZWxlY3RlZCBieSB0aGUgdXNlciBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gKi9cbiAgICBJc1ByaW1hcnk6IGJvb2xlYW47XG4gICAgLyoqIFRoZSByb3RhdGlvbiBvZiB0aGUgc2NyZWVuLiAqL1xuICAgIFJvdGF0aW9uOiBudW1iZXI7XG59XG5cbmltcG9ydCB7IG5ld1J1bnRpbWVDYWxsZXIsIG9iamVjdE5hbWVzIH0gZnJvbSBcIi4vcnVudGltZS5qc1wiO1xuY29uc3QgY2FsbCA9IG5ld1J1bnRpbWVDYWxsZXIob2JqZWN0TmFtZXMuU2NyZWVucyk7XG5cbmNvbnN0IGdldEFsbCA9IDA7XG5jb25zdCBnZXRQcmltYXJ5ID0gMTtcbmNvbnN0IGdldEN1cnJlbnQgPSAyO1xuXG4vKipcbiAqIEdldHMgYWxsIHNjcmVlbnMuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgU2NyZWVuIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGwoKTogUHJvbWlzZTxTY3JlZW5bXT4ge1xuICAgIHJldHVybiBjYWxsKGdldEFsbCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcHJpbWFyeSBzY3JlZW4uXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHByaW1hcnkgc2NyZWVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gR2V0UHJpbWFyeSgpOiBQcm9taXNlPFNjcmVlbj4ge1xuICAgIHJldHVybiBjYWxsKGdldFByaW1hcnkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgYWN0aXZlIHNjcmVlbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjdXJyZW50IGFjdGl2ZSBzY3JlZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBHZXRDdXJyZW50KCk6IFByb21pc2U8U2NyZWVuPiB7XG4gICAgcmV0dXJuIGNhbGwoZ2V0Q3VycmVudCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQTtBQUFBO0FBQUE7QUFBQTs7O0FDNkJBLElBQU0sY0FDRjtBQUVHLFNBQVMsT0FBTyxPQUFlLElBQVk7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MkJBQTJCO0FBQUEsSUFDM0IsK0JBQStCO0FBQUEsSUFDL0Isb0JBQW9CO0FBQUEsSUFDcEIsNEJBQTRCO0FBQUEsSUFDNUIsc0JBQXNCO0FBQUEsSUFDdEIsc0JBQXNCO0FBQUEsSUFDdEIsK0JBQStCO0FBQUEsSUFDL0IsNkJBQTZCO0FBQUEsSUFDN0IsZ0NBQWdDO0FBQUEsSUFDaEMscUJBQXFCO0FBQUEsSUFDckIsNkJBQTZCO0FBQUEsSUFDN0IsMEJBQTBCO0FBQUEsSUFDMUIsdUJBQXVCO0FBQUEsSUFDdkIsdUJBQXVCO0FBQUEsSUFDdkIsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCO0FBQUEsSUFDdEIsY0FBYztBQUFBLElBQ2Qsb0JBQW9CO0FBQUEsSUFDcEIsb0JBQW9CO0FBQUEsSUFDcEIsc0JBQXNCO0FBQUEsSUFDdEIsYUFBYTtBQUFBLElBQ2IsY0FBYztBQUFBLElBQ2QsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIseUJBQXlCO0FBQUEsSUFDekIsZUFBZTtBQUFBLElBQ2YsaUJBQWlCO0FBQUEsSUFDakIsdUJBQXVCO0FBQUEsSUFDdkIscUJBQXFCO0FBQUEsSUFDckIscUJBQXFCO0FBQUEsSUFDckIsdUJBQXVCO0FBQUEsSUFDdkIsY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2Ysb0JBQW9CO0FBQUEsSUFDcEIsb0JBQW9CO0FBQUEsSUFDcEIsMEJBQTBCO0FBQUEsSUFDMUIsZ0JBQWdCO0FBQUEsSUFDaEIsNEJBQTRCO0FBQUEsSUFDNUIsNEJBQTRCO0FBQUEsSUFDNUIseURBQXlEO0FBQUEsSUFDekQsc0NBQXNDO0FBQUEsSUFDdEMsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIscUJBQXFCO0FBQUEsSUFDckIsc0JBQXNCO0FBQUEsSUFDdEIsZ0NBQWdDO0FBQUEsSUFDaEMsa0NBQWtDO0FBQUEsSUFDbEMsbUNBQW1DO0FBQUEsSUFDbkMsb0NBQW9DO0FBQUEsSUFDcEMsK0JBQStCO0FBQUEsSUFDL0IsNkJBQTZCO0FBQUEsSUFDN0IsdUJBQXVCO0FBQUEsSUFDdkIsaUNBQWlDO0FBQUEsSUFDakMsOEJBQThCO0FBQUEsSUFDOUIsNEJBQTRCO0FBQUEsSUFDNUIsc0NBQXNDO0FBQUEsSUFDdEMsNEJBQTRCO0FBQUEsSUFDNUIsc0JBQXNCO0FBQUEsSUFDdEIsa0NBQWtDO0FBQUEsSUFDbEMsc0JBQXNCO0FBQUEsSUFDdEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsbUJBQW1CO0FBQUEsSUFDbkIsMEJBQTBCO0FBQUEsSUFDMUIsOEJBQThCO0FBQUEsSUFDOUIseUJBQXlCO0FBQUEsSUFDekIsNkJBQTZCO0FBQUEsSUFDN0IsaUJBQWlCO0FBQUEsSUFDakIsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCO0FBQUEsSUFDdEIsZUFBZTtBQUFBLElBQ2YseUJBQXlCO0FBQUEsSUFDekIsd0JBQXdCO0FBQUEsSUFDeEIsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIsaUJBQWlCO0FBQUEsSUFDakIsaUJBQWlCO0FBQUEsSUFDakIsc0JBQXNCO0FBQUEsSUFDdEIsbUNBQW1DO0FBQUEsSUFDbkMscUNBQXFDO0FBQUEsSUFDckMsdUJBQXVCO0FBQUEsSUFDdkIsc0JBQXNCO0FBQUEsSUFDdEIsd0JBQXdCO0FBQUEsSUFDeEIsZUFBZTtBQUFBLElBQ2YsMkJBQTJCO0FBQUEsSUFDM0IsMEJBQTBCO0FBQUEsSUFDMUIsNkJBQTZCO0FBQUEsSUFDN0IsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsa0JBQWtCO0FBQUEsSUFDbEIsZ0JBQWdCO0FBQUEsSUFDaEIsa0JBQWtCO0FBQUEsSUFDbEIsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1oscUJBQXFCO0FBQUEsSUFDckIsc0JBQXNCO0FBQUEsSUFDdEIsc0JBQXNCO0FBQUEsSUFDdEIsOEJBQThCO0FBQUEsSUFDOUIsaUJBQWlCO0FBQUEsSUFDakIseUJBQXlCO0FBQUEsSUFDekIsMkJBQTJCO0FBQUEsSUFDM0IsK0JBQStCO0FBQUEs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O0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDSjs7O0FDekdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdEQSxJQUFNQyxRQUFPLGlCQUFpQixZQUFZLE9BQU87QUFFakQsSUFBTSxTQUFTO0FBQ2YsSUFBTSxhQUFhO0FBQ25CLElBQU0sYUFBYTtBQU9aLFNBQVMsU0FBNEI7QUFDeEMsU0FBT0EsTUFBSyxNQUFNO0FBQ3RCO0FBT08sU0FBUyxhQUE4QjtBQUMxQyxTQUFPQSxNQUFLLFVBQVU7QUFDMUI7QUFPTyxTQUFTLGFBQThCO0FBQzFDLFNBQU9BLE1BQUssVUFBVTtBQUMxQjs7O0F0QjVFQSxPQUFPLFNBQVMsT0FBTyxVQUFVLENBQUM7QUE0Q2xDLE9BQU8sT0FBTyxTQUFnQjtBQUN2QixPQUFPLHFCQUFxQjsiLAogICJuYW1lcyI6IFsiX2EiLCAiRXJyb3IiLCAiY2FsbCIsICJfYSIsICJFcnJvciIsICJjYWxsIiwgIl9hIiwgInJlc2l6YWJsZSIsICJjYWxsIiwgIl9hIiwgImNhbGwiLCAiY2FsbCIsICJIaWRlTWV0aG9kIiwgIlNob3dNZXRob2QiLCAiaXNEb2N1bWVudERvdEFsbCIsICJfYSIsICJyZWFzb24iLCAidmFsdWUiLCAiY2FsbCIsICJnZXRBbmREZWxldGVSZXNwb25zZSIsICJnZW5lcmF0ZUlEIiwgImNhbGwiLCAiQXJyYXkiLCAiTWFwIiwgIkFycmF5IiwgIk1hcCIsICJrZXkiLCAiY2FsbCJdCn0K diff --git a/v3/internal/assetserver/bundledassets/runtime.js b/v3/internal/assetserver/bundledassets/runtime.js index b4b88e141..25dea97a0 100644 --- a/v3/internal/assetserver/bundledassets/runtime.js +++ b/v3/internal/assetserver/bundledassets/runtime.js @@ -1 +1 @@ -var Ce=Object.defineProperty;var w=(e,n)=>{for(var i in n)Ce(e,i,{get:n[i],enumerable:!0})};var j={};w(j,{Application:()=>q,Browser:()=>I,Call:()=>ee,Clipboard:()=>ne,Create:()=>ie,Dialogs:()=>T,Events:()=>L,Flags:()=>X,Screens:()=>te,System:()=>Y,WML:()=>V,Window:()=>E,init:()=>Me});var V={};w(V,{Enable:()=>_,Reload:()=>ue});var I={};w(I,{OpenURL:()=>O});var Se="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",D=(e=21)=>{let n="",i=e|0;for(;i--;)n+=Se[Math.random()*64|0];return n};var xe=window.location.origin+"/wails/runtime",l={Call:0,Clipboard:1,Application:2,Events:3,ContextMenu:4,Dialog:5,Window:6,Screens:7,System:8,Browser:9,CancelCall:10},ve=D();function s(e,n){return function(i,o=null){return Ae(e,i,n,o)}}async function Ae(e,n,i,o){let r=new URL(xe);e!=null&&r.searchParams.append("object",e),n!=null&&r.searchParams.append("method",n);let d={headers:{}};i&&(d.headers["x-wails-window-name"]=i),o&&r.searchParams.append("args",JSON.stringify(o)),d.headers["x-wails-client-id"]=ve;let a=await fetch(r,d);if(!a.ok)throw new Error(await a.text());return a.headers.get("Content-Type")&&a.headers.get("Content-Type").indexOf("application/json")!==-1?a.json():a.text()}var be=s(l.Browser,""),Re=0;function O(e){return be(Re,{url:e})}var T={};w(T,{Error:()=>de,Info:()=>ke,OpenFile:()=>Ne,Question:()=>P,SaveFile:()=>He,Warning:()=>Le});window._wails=window._wails||{};window._wails.dialogErrorCallback=ze;window._wails.dialogResultCallback=Be;var Ee=0,ye=1,Ue=2,Fe=3,Oe=4,Ie=5,Pe=s(l.Dialog,""),W=new Map;function Te(){let e;do e=D();while(W.has(e));return e}function M(e,n={}){let i=Te();return n["dialog-id"]=i,new Promise((o,r)=>{W.set(i,{resolve:o,reject:r}),Pe(e,n).catch(d=>{r(d),W.delete(i)})})}function Be(e,n,i){let o=W.get(e);o&&(W.delete(e),i?o.resolve(JSON.parse(n)):o.resolve(n))}function ze(e,n){let i=W.get(e);i&&(W.delete(e),i.reject(new de(n)))}var ke=e=>M(Ee,e),Le=e=>M(ye,e),de=e=>M(Ue,e),P=e=>M(Fe,e),Ne=e=>M(Oe,e),He=e=>M(Ie,e);var L={};w(L,{Emit:()=>k,Off:()=>Qe,OffAll:()=>Je,On:()=>Ke,OnMultiple:()=>z,Once:()=>Ye,Types:()=>Ze,WailsEvent:()=>v,setup:()=>je});var ae={Windows:{APMPowerSettingChange:"windows:APMPowerSettingChange",APMPowerStatusChange:"windows:APMPowerStatusChange",APMResumeAutomatic:"windows:APMResumeAutomatic",APMResumeSuspend:"windows:APMResumeSuspend",APMSuspend:"windows:APMSuspend",ApplicationStarted:"windows:ApplicationStarted",SystemThemeChanged:"windows:SystemThemeChanged",WebViewNavigationCompleted:"windows:WebViewNavigationCompleted",WindowActive:"windows:WindowActive",WindowBackgroundErase:"windows:WindowBackgroundErase",WindowClickActive:"windows:WindowClickActive",WindowClosing:"windows:WindowClosing",WindowDidMove:"windows:WindowDidMove",WindowDidResize:"windows:WindowDidResize",WindowDPIChanged:"windows:WindowDPIChanged",WindowDragDrop:"windows:WindowDragDrop",WindowDragEnter:"windows:WindowDragEnter",WindowDragLeave:"windows:WindowDragLeave",WindowDragOver:"windows:WindowDragOver",WindowEndMove:"windows:WindowEndMove",WindowEndResize:"windows:WindowEndResize",WindowFullscreen:"windows:WindowFullscreen",WindowHide:"windows:WindowHide",WindowInactive:"windows:WindowInactive",WindowKeyDown:"windows:WindowKeyDown",WindowKeyUp:"windows:WindowKeyUp",WindowKillFocus:"windows:WindowKillFocus",WindowNonClientHit:"windows:WindowNonClientHit",WindowNonClientMouseDown:"windows:WindowNonClientMouseDown",WindowNonClientMouseLeave:"windows:WindowNonClientMouseLeave",WindowNonClientMouseMove:"windows:WindowNonClientMouseMove",WindowNonClientMouseUp:"windows:WindowNonClientMouseUp",WindowPaint:"windows:WindowPaint",WindowRestore:"windows:WindowRestore",WindowSetFocus:"windows:WindowSetFocus",WindowShow:"windows:WindowShow",WindowStartMove:"windows:WindowStartMove",WindowStartResize:"windows:WindowStartResize",WindowUnFullscreen:"windows:WindowUnFullscreen",WindowZOrderChanged:"windows:WindowZOrderChanged",WindowMinimise:"windows:WindowMinimise",WindowUnMinimise:"windows:WindowUnMinimise",WindowMaximise:"windows:WindowMaximise",WindowUnMaximise:"windows:WindowUnMaximise"},Mac:{ApplicationDidBecomeActive:"mac:ApplicationDidBecomeActive",ApplicationDidChangeBackingProperties:"mac:ApplicationDidChangeBackingProperties",ApplicationDidChangeEffectiveAppearance:"mac:ApplicationDidChangeEffectiveAppearance",ApplicationDidChangeIcon:"mac:ApplicationDidChangeIcon",ApplicationDidChangeOcclusionState:"mac:ApplicationDidChangeOcclusionState",ApplicationDidChangeScreenParameters:"mac:ApplicationDidChangeScreenParameters",ApplicationDidChangeStatusBarFrame:"mac:ApplicationDidChangeStatusBarFrame",ApplicationDidChangeStatusBarOrientation:"mac:ApplicationDidChangeStatusBarOrientation",ApplicationDidChangeTheme:"mac:ApplicationDidChangeTheme",ApplicationDidFinishLaunching:"mac:ApplicationDidFinishLaunching",ApplicationDidHide:"mac:ApplicationDidHide",ApplicationDidResignActive:"mac:ApplicationDidResignActive",ApplicationDidUnhide:"mac:ApplicationDidUnhide",ApplicationDidUpdate:"mac:ApplicationDidUpdate",ApplicationShouldHandleReopen:"mac:ApplicationShouldHandleReopen",ApplicationWillBecomeActive:"mac:ApplicationWillBecomeActive",ApplicationWillFinishLaunching:"mac:ApplicationWillFinishLaunching",ApplicationWillHide:"mac:ApplicationWillHide",ApplicationWillResignActive:"mac:ApplicationWillResignActive",ApplicationWillTerminate:"mac:ApplicationWillTerminate",ApplicationWillUnhide:"mac:ApplicationWillUnhide",ApplicationWillUpdate:"mac:ApplicationWillUpdate",MenuDidAddItem:"mac:MenuDidAddItem",MenuDidBeginTracking:"mac:MenuDidBeginTracking",MenuDidClose:"mac:MenuDidClose",MenuDidDisplayItem:"mac:MenuDidDisplayItem",MenuDidEndTracking:"mac:MenuDidEndTracking",MenuDidHighlightItem:"mac:MenuDidHighlightItem",MenuDidOpen:"mac:MenuDidOpen",MenuDidPopUp:"mac:MenuDidPopUp",MenuDidRemoveItem:"mac:MenuDidRemoveItem",MenuDidSendAction:"mac:MenuDidSendAction",MenuDidSendActionToItem:"mac:MenuDidSendActionToItem",MenuDidUpdate:"mac:MenuDidUpdate",MenuWillAddItem:"mac:MenuWillAddItem",MenuWillBeginTracking:"mac:MenuWillBeginTracking",MenuWillDisplayItem:"mac:MenuWillDisplayItem",MenuWillEndTracking:"mac:MenuWillEndTracking",MenuWillHighlightItem:"mac:MenuWillHighlightItem",MenuWillOpen:"mac:MenuWillOpen",MenuWillPopUp:"mac:MenuWillPopUp",MenuWillRemoveItem:"mac:MenuWillRemoveItem",MenuWillSendAction:"mac:MenuWillSendAction",MenuWillSendActionToItem:"mac:MenuWillSendActionToItem",MenuWillUpdate:"mac:MenuWillUpdate",WebViewDidCommitNavigation:"mac:WebViewDidCommitNavigation",WebViewDidFinishNavigation:"mac:WebViewDidFinishNavigation",WebViewDidReceiveServerRedirectForProvisionalNavigation:"mac:WebViewDidReceiveServerRedirectForProvisionalNavigation",WebViewDidStartProvisionalNavigation:"mac:WebViewDidStartProvisionalNavigation",WindowDidBecomeKey:"mac:WindowDidBecomeKey",WindowDidBecomeMain:"mac:WindowDidBecomeMain",WindowDidBeginSheet:"mac:WindowDidBeginSheet",WindowDidChangeAlpha:"mac:WindowDidChangeAlpha",WindowDidChangeBackingLocation:"mac:WindowDidChangeBackingLocation",WindowDidChangeBackingProperties:"mac:WindowDidChangeBackingProperties",WindowDidChangeCollectionBehavior:"mac:WindowDidChangeCollectionBehavior",WindowDidChangeEffectiveAppearance:"mac:WindowDidChangeEffectiveAppearance",WindowDidChangeOcclusionState:"mac:WindowDidChangeOcclusionState",WindowDidChangeOrderingMode:"mac:WindowDidChangeOrderingMode",WindowDidChangeScreen:"mac:WindowDidChangeScreen",WindowDidChangeScreenParameters:"mac:WindowDidChangeScreenParameters",WindowDidChangeScreenProfile:"mac:WindowDidChangeScreenProfile",WindowDidChangeScreenSpace:"mac:WindowDidChangeScreenSpace",WindowDidChangeScreenSpaceProperties:"mac:WindowDidChangeScreenSpaceProperties",WindowDidChangeSharingType:"mac:WindowDidChangeSharingType",WindowDidChangeSpace:"mac:WindowDidChangeSpace",WindowDidChangeSpaceOrderingMode:"mac:WindowDidChangeSpaceOrderingMode",WindowDidChangeTitle:"mac:WindowDidChangeTitle",WindowDidChangeToolbar:"mac:WindowDidChangeToolbar",WindowDidDeminiaturize:"mac:WindowDidDeminiaturize",WindowDidEndSheet:"mac:WindowDidEndSheet",WindowDidEnterFullScreen:"mac:WindowDidEnterFullScreen",WindowDidEnterVersionBrowser:"mac:WindowDidEnterVersionBrowser",WindowDidExitFullScreen:"mac:WindowDidExitFullScreen",WindowDidExitVersionBrowser:"mac:WindowDidExitVersionBrowser",WindowDidExpose:"mac:WindowDidExpose",WindowDidFocus:"mac:WindowDidFocus",WindowDidMiniaturize:"mac:WindowDidMiniaturize",WindowDidMove:"mac:WindowDidMove",WindowDidOrderOffScreen:"mac:WindowDidOrderOffScreen",WindowDidOrderOnScreen:"mac:WindowDidOrderOnScreen",WindowDidResignKey:"mac:WindowDidResignKey",WindowDidResignMain:"mac:WindowDidResignMain",WindowDidResize:"mac:WindowDidResize",WindowDidUpdate:"mac:WindowDidUpdate",WindowDidUpdateAlpha:"mac:WindowDidUpdateAlpha",WindowDidUpdateCollectionBehavior:"mac:WindowDidUpdateCollectionBehavior",WindowDidUpdateCollectionProperties:"mac:WindowDidUpdateCollectionProperties",WindowDidUpdateShadow:"mac:WindowDidUpdateShadow",WindowDidUpdateTitle:"mac:WindowDidUpdateTitle",WindowDidUpdateToolbar:"mac:WindowDidUpdateToolbar",WindowDidZoom:"mac:WindowDidZoom",WindowFileDraggingEntered:"mac:WindowFileDraggingEntered",WindowFileDraggingExited:"mac:WindowFileDraggingExited",WindowFileDraggingPerformed:"mac:WindowFileDraggingPerformed",WindowHide:"mac:WindowHide",WindowMaximise:"mac:WindowMaximise",WindowUnMaximise:"mac:WindowUnMaximise",WindowMinimise:"mac:WindowMinimise",WindowUnMinimise:"mac:WindowUnMinimise",WindowShouldClose:"mac:WindowShouldClose",WindowShow:"mac:WindowShow",WindowWillBecomeKey:"mac:WindowWillBecomeKey",WindowWillBecomeMain:"mac:WindowWillBecomeMain",WindowWillBeginSheet:"mac:WindowWillBeginSheet",WindowWillChangeOrderingMode:"mac:WindowWillChangeOrderingMode",WindowWillClose:"mac:WindowWillClose",WindowWillDeminiaturize:"mac:WindowWillDeminiaturize",WindowWillEnterFullScreen:"mac:WindowWillEnterFullScreen",WindowWillEnterVersionBrowser:"mac:WindowWillEnterVersionBrowser",WindowWillExitFullScreen:"mac:WindowWillExitFullScreen",WindowWillExitVersionBrowser:"mac:WindowWillExitVersionBrowser",WindowWillFocus:"mac:WindowWillFocus",WindowWillMiniaturize:"mac:WindowWillMiniaturize",WindowWillMove:"mac:WindowWillMove",WindowWillOrderOffScreen:"mac:WindowWillOrderOffScreen",WindowWillOrderOnScreen:"mac:WindowWillOrderOnScreen",WindowWillResignMain:"mac:WindowWillResignMain",WindowWillResize:"mac:WindowWillResize",WindowWillUnfocus:"mac:WindowWillUnfocus",WindowWillUpdate:"mac:WindowWillUpdate",WindowWillUpdateAlpha:"mac:WindowWillUpdateAlpha",WindowWillUpdateCollectionBehavior:"mac:WindowWillUpdateCollectionBehavior",WindowWillUpdateCollectionProperties:"mac:WindowWillUpdateCollectionProperties",WindowWillUpdateShadow:"mac:WindowWillUpdateShadow",WindowWillUpdateTitle:"mac:WindowWillUpdateTitle",WindowWillUpdateToolbar:"mac:WindowWillUpdateToolbar",WindowWillUpdateVisibility:"mac:WindowWillUpdateVisibility",WindowWillUseStandardFrame:"mac:WindowWillUseStandardFrame",WindowZoomIn:"mac:WindowZoomIn",WindowZoomOut:"mac:WindowZoomOut",WindowZoomReset:"mac:WindowZoomReset"},Linux:{ApplicationStartup:"linux:ApplicationStartup",SystemThemeChanged:"linux:SystemThemeChanged",WindowDeleteEvent:"linux:WindowDeleteEvent",WindowDidMove:"linux:WindowDidMove",WindowDidResize:"linux:WindowDidResize",WindowFocusIn:"linux:WindowFocusIn",WindowFocusOut:"linux:WindowFocusOut",WindowLoadChanged:"linux:WindowLoadChanged"},Common:{ApplicationOpenedWithFile:"common:ApplicationOpenedWithFile",ApplicationStarted:"common:ApplicationStarted",ThemeChanged:"common:ThemeChanged",WindowClosing:"common:WindowClosing",WindowDidMove:"common:WindowDidMove",WindowDidResize:"common:WindowDidResize",WindowDPIChanged:"common:WindowDPIChanged",WindowFilesDropped:"common:WindowFilesDropped",WindowFocus:"common:WindowFocus",WindowFullscreen:"common:WindowFullscreen",WindowHide:"common:WindowHide",WindowLostFocus:"common:WindowLostFocus",WindowMaximise:"common:WindowMaximise",WindowMinimise:"common:WindowMinimise",WindowRestore:"common:WindowRestore",WindowRuntimeReady:"common:WindowRuntimeReady",WindowShow:"common:WindowShow",WindowUnFullscreen:"common:WindowUnFullscreen",WindowUnMaximise:"common:WindowUnMaximise",WindowUnMinimise:"common:WindowUnMinimise",WindowZoom:"common:WindowZoom",WindowZoomIn:"common:WindowZoomIn",WindowZoomOut:"common:WindowZoomOut",WindowZoomReset:"common:WindowZoomReset"}};var Ze=ae;window._wails=window._wails||{};window._wails.dispatchWailsEvent=Ge;var _e=s(l.Events,""),Ve=0,u=new Map,B=class{constructor(n,i,o){this.eventName=n,this.maxCallbacks=o||-1,this.Callback=r=>(i(r),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},v=class{constructor(n,i=null){this.name=n,this.data=i}};function je(){}function Ge(e){let n=u.get(e.name);if(n){let i=n.filter(o=>{if(o.Callback(e))return!0});i.length>0&&(n=n.filter(o=>!i.includes(o)),n.length===0?u.delete(e.name):u.set(e.name,n))}}function z(e,n,i){let o=u.get(e)||[],r=new B(e,n,i);return o.push(r),u.set(e,o),()=>Xe(r)}function Ke(e,n){return z(e,n,-1)}function Ye(e,n){return z(e,n,1)}function Xe(e){let n=e.eventName,i=u.get(n).filter(o=>o!==e);i.length===0?u.delete(n):u.set(n,i)}function Qe(e,...n){[e,...n].forEach(o=>u.delete(o))}function Je(){u.clear()}function k(e){return _e(Ve,e)}function le(){if(!EventTarget||!AbortSignal||!AbortController)return!1;let e=!0,n=new EventTarget,i=new AbortController;return n.addEventListener("test",()=>{e=!1},{signal:i.signal}),i.abort(),n.dispatchEvent(new CustomEvent("test")),e}var se=!1;document.addEventListener("DOMContentLoaded",()=>se=!0);function ce(e){se||document.readyState==="complete"?e():document.addEventListener("DOMContentLoaded",e)}var qe=0,$e=1,en=2,nn=3,on=4,tn=5,rn=6,dn=7,an=8,ln=9,sn=10,cn=11,wn=12,mn=13,un=14,pn=15,Wn=16,hn=17,gn=18,fn=19,Dn=20,Mn=21,Cn=22,Sn=23,xn=24,vn=25,An=26,bn=27,Rn=28,En=29,yn=30,Un=31,Fn=32,On=33,In=34,Pn=35,Tn=36,Bn=37,zn=38,kn=39,Ln=40,Nn=41,Hn=42,Zn=43,_n=44,Vn=45,jn=46,Gn=47,t=Symbol(),N=class e{constructor(n=""){this[t]=s(l.Window,n);for(let i of Object.getOwnPropertyNames(e.prototype))i!=="constructor"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this))}Get(n){return new e(n)}Position(){return this[t](qe)}Center(){return this[t]($e)}Close(){return this[t](en)}DisableSizeConstraints(){return this[t](nn)}EnableSizeConstraints(){return this[t](on)}Focus(){return this[t](tn)}ForceReload(){return this[t](rn)}Fullscreen(){return this[t](dn)}GetScreen(){return this[t](an)}GetZoom(){return this[t](ln)}Height(){return this[t](sn)}Hide(){return this[t](cn)}IsFocused(){return this[t](wn)}IsFullscreen(){return this[t](mn)}IsMaximised(){return this[t](un)}IsMinimised(){return this[t](pn)}Maximise(){return this[t](Wn)}Minimise(){return this[t](hn)}Name(){return this[t](gn)}OpenDevTools(){return this[t](fn)}RelativePosition(){return this[t](Dn)}Reload(){return this[t](Mn)}Resizable(){return this[t](Cn)}Restore(){return this[t](Sn)}SetPosition(n,i){return this[t](xn,{x:n,y:i})}SetAlwaysOnTop(n){return this[t](vn,{alwaysOnTop:n})}SetBackgroundColour(n,i,o,r){return this[t](An,{r:n,g:i,b:o,a:r})}SetFrameless(n){return this[t](bn,{frameless:n})}SetFullscreenButtonEnabled(n){return this[t](Rn,{enabled:n})}SetMaxSize(n,i){return this[t](En,{width:n,height:i})}SetMinSize(n,i){return this[t](yn,{width:n,height:i})}SetRelativePosition(n,i){return this[t](Un,{x:n,y:i})}SetResizable(n){return this[t](Fn,{resizable:n})}SetSize(n,i){return this[t](On,{width:n,height:i})}SetTitle(n){return this[t](In,{title:n})}SetZoom(n){return this[t](Pn,{zoom:n})}Show(){return this[t](Tn)}Size(){return this[t](Bn)}ToggleFullscreen(){return this[t](zn)}ToggleMaximise(){return this[t](kn)}UnFullscreen(){return this[t](Ln)}UnMaximise(){return this[t](Nn)}UnMinimise(){return this[t](Hn)}Width(){return this[t](Zn)}Zoom(){return this[t](_n)}ZoomIn(){return this[t](Vn)}ZoomOut(){return this[t](jn)}ZoomReset(){return this[t](Gn)}},Kn=new N(""),E=Kn;function Yn(e,n=null){k(new v(e,n))}function Xn(e,n){let i=E.Get(e),o=i[n];if(typeof o=="function")try{o.call(i)}catch{}}function we(e){let n=e.currentTarget;function i(r="Yes"){if(r!=="Yes")return;let d=n.getAttribute("data-wml-event"),a=n.getAttribute("data-wml-target-window")||"",c=n.getAttribute("data-wml-window"),m=n.getAttribute("data-wml-openURL");d!==null&&Yn(d),c!==null&&Xn(a,c),m!==null&&O(m)}let o=n.getAttribute("data-wml-confirm");o?P({Title:"Confirm",Message:o,Detached:!1,Buttons:[{Label:"Yes"},{Label:"No",IsDefault:!0}]}).then(i):i()}var y=Symbol(),H=class{constructor(){this[y]=new AbortController}set(n,i){return{signal:this[y].signal}}reset(){this[y].abort(),this[y]=new AbortController}},A=Symbol(),C=Symbol(),Z=class{constructor(){this[A]=new WeakMap,this[C]=0}set(n,i){return this[C]+=!this[A].has(n),this[A].set(n,i),{}}reset(){if(!(this[C]<=0)){for(let n of document.body.querySelectorAll("*")){if(this[C]<=0)break;let i=this[A].get(n);this[C]-=typeof i<"u";for(let o of i||[])n.removeEventListener(o,we)}this[A]=new WeakMap,this[C]=0}}},me=le()?new H:new Z;function Qn(e){let n=/\S+/g,i=e.getAttribute("data-wml-trigger")||"click",o=[],r;for(;(r=n.exec(i))!==null;)o.push(r[0]);let d=me.set(e,o);for(let a of o)e.addEventListener(a,we,d)}function _(){ce(ue)}function ue(){me.reset(),document.body.querySelectorAll("[data-wml-event], [data-wml-window], [data-wml-openURL]").forEach(Qn)}window.wails=j;_();var Y={};w(Y,{Capabilities:()=>ei,Environment:()=>ni,IsAMD64:()=>ti,IsARM:()=>ri,IsARM64:()=>di,IsDarkMode:()=>$n,IsDebug:()=>K,IsLinux:()=>ii,IsMac:()=>oi,IsWindows:()=>G,invoke:()=>h});var We=s(l.System,""),Jn=0,qn=1,pe=(()=>{try{if(window?.chrome?.webview)return e=>window.chrome.webview.postMessage(e);if(window?.webkit?.messageHandlers?.external)return e=>window.webkit.messageHandlers.external.postMessage(e)}catch{}return null})();function h(e){if(pe)return pe(e)}function $n(){return We(Jn)}function ei(){return fetch("/wails/capabilities").json()}function ni(){return We(qn)}function G(){return window._wails.environment.OS==="windows"}function ii(){return window._wails.environment.OS==="linux"}function oi(){return window._wails.environment.OS==="darwin"}function ti(){return window._wails.environment.Arch==="amd64"}function ri(){return window._wails.environment.Arch==="arm"}function di(){return window._wails.environment.Arch==="arm64"}function K(){return window._wails.environment.Debug===!0}window.addEventListener("contextmenu",ci);var ai=s(l.ContextMenu,""),li=0;function si(e,n,i,o){ai(li,{id:e,x:n,y:i,data:o})}function ci(e){let n=e.target,i=window.getComputedStyle(n).getPropertyValue("--custom-contextmenu");if(i=i?i.trim():"",i){e.preventDefault();let o=window.getComputedStyle(n).getPropertyValue("--custom-contextmenu-data");si(i,e.clientX,e.clientY,o);return}wi(e)}function wi(e){if(K())return;let n=e.target;switch(window.getComputedStyle(n).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(n.isContentEditable)return;let r=window.getSelection(),d=r.toString().length>0;if(d)for(let a=0;ab});function b(e){try{return window._wails.flags[e]}catch(n){throw new Error("Unable to retrieve flag '"+e+"': "+n)}}var S=!1,he=!1,U=null,Q="auto";window._wails=window._wails||{};window._wails.setResizable=function(e){he=e};window._wails.endDrag=function(){document.body.style.cursor="default",S=!1};window.addEventListener("mousedown",ui);window.addEventListener("mousemove",Wi);window.addEventListener("mouseup",pi);function mi(e){let n=window.getComputedStyle(e.target).getPropertyValue("--wails-draggable"),i=e.buttons!==void 0?e.buttons:e.which;return!n||n===""||n.trim()!=="drag"||i===0?!1:e.detail===1}function ui(e){if(U){h("wails:resize:"+U),e.preventDefault();return}if(mi(e)){if(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight)return;S=!0}else S=!1}function pi(){S=!1}function p(e){document.documentElement.style.cursor=e||Q,U=e}function Wi(e){if(S&&(S=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){h("wails:drag");return}if(!he||!G())return;Q==null&&(Q=document.documentElement.style.cursor);let n=b("system.resizeHandleHeight")||5,i=b("system.resizeHandleWidth")||5,o=b("resizeCornerExtra")||10,r=window.outerWidth-e.clientXDi,Quit:()=>Ci,Show:()=>Mi});var J=s(l.Application,""),hi=0,gi=1,fi=2;function Di(){return J(hi)}function Mi(){return J(gi)}function Ci(){return J(fi)}var ee={};w(ee,{ByID:()=>yi,ByName:()=>Ei,Call:()=>$,RuntimeError:()=>F});window._wails=window._wails||{};window._wails.callResultHandler=bi;window._wails.callErrorHandler=Ri;var Si=0,xi=s(l.Call,""),vi=s(l.CancelCall,""),R=new Map;function Ai(){let e;do e=D();while(R.has(e));return e}function bi(e,n,i){let o=ge(e);if(o)if(!n)o.resolve();else if(!i)o.resolve(n);else try{o.resolve(JSON.parse(n))}catch(r){o.reject(new TypeError("could not parse result: "+r.message,{cause:r}))}}function Ri(e,n,i){let o=ge(e);if(o)if(!i)o.reject(new Error(n));else{let r;try{r=JSON.parse(n)}catch(c){o.reject(new TypeError("could not parse error: "+c.message,{cause:c}));return}let d={};r.cause&&(d.cause=r.cause);let a;switch(r.kind){case"ReferenceError":a=new ReferenceError(r.message,d);break;case"TypeError":a=new TypeError(r.message,d);break;case"RuntimeError":a=new F(r.message,d);break;default:a=new Error(r.message,d);break}o.reject(a)}}function ge(e){let n=R.get(e);return R.delete(e),n}var F=class extends Error{constructor(n,...i){super(n,...i),this.name="RuntimeError"}};function $(e){let n=Ai(),i=()=>vi(type,{"call-id":n}),o=!1,r=!1,d=new Promise((a,c)=>{e["call-id"]=n,R.set(n,{resolve:a,reject:c}),xi(Si,e).then(m=>{if(r=!0,o)return i()}).catch(m=>{c(m),R.delete(n)})});return d.cancel=()=>{if(r)return i();o=!0},d}function Ei(e,...n){return $({methodName:e,args:n})}function yi(e,...n){return $({methodID:e,args:n})}var ne={};w(ne,{SetText:()=>Oi,Text:()=>Ii});var fe=s(l.Clipboard,""),Ui=0,Fi=1;function Oi(e){return fe(Ui,{text:e})}function Ii(){return fe(Fi)}var ie={};w(ie,{Any:()=>g,Array:()=>Ti,ByteSlice:()=>Pi,Map:()=>Bi,Nullable:()=>zi,Struct:()=>ki});function g(e){return e}function Pi(e){return e??""}function Ti(e){return e===g?n=>n===null?[]:n:n=>{if(n===null)return[];for(let i=0;ii===null?{}:i:i=>{if(i===null)return{};for(let o in i)i[o]=n(i[o]);return i}}function zi(e){return e===g?g:n=>n===null?null:e(n)}function ki(e){let n=!0;for(let i in e)if(e[i]!==g){n=!1;break}return n?g:i=>{for(let o in e)o in i&&(i[o]=e[o](i[o]));return i}}var te={};w(te,{GetAll:()=>Zi,GetCurrent:()=>Vi,GetPrimary:()=>_i});var oe=s(l.Screens,""),Li=0,Ni=1,Hi=2;function Zi(){return oe(Li)}function _i(){return oe(Ni)}function Vi(){return oe(Hi)}window._wails=window._wails||{};var De=!1;function Me(){window._wails.invoke=h,h("wails:runtime:ready"),De=!0}window.addEventListener("load",()=>{De||Me()});export{q as Application,I as Browser,ee as Call,ne as Clipboard,ie as Create,T as Dialogs,L as Events,X as Flags,te as Screens,Y as System,V as WML,E as Window,Me as init}; +var Fe=Object.defineProperty,an=Object.defineProperties;var ln=Object.getOwnPropertyDescriptors;var ke=Object.getOwnPropertySymbols;var cn=Object.prototype.hasOwnProperty,dn=Object.prototype.propertyIsEnumerable;var Oe=(n,e,i)=>e in n?Fe(n,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[e]=i,Le=(n,e)=>{for(var i in e||(e={}))cn.call(e,i)&&Oe(n,i,e[i]);if(ke)for(var i of ke(e))dn.call(e,i)&&Oe(n,i,e[i]);return n},Ue=(n,e)=>an(n,ln(e));var u=(n,e)=>{for(var i in e)Fe(n,i,{get:e[i],enumerable:!0})};var ce={};u(ce,{Application:()=>ve,Browser:()=>_,Call:()=>Te,CancelError:()=>k,CancellablePromise:()=>j,CancelledRejectionError:()=>W,Clipboard:()=>xe,Create:()=>Ae,Dialogs:()=>ee,Events:()=>oe,Flags:()=>we,Screens:()=>Ee,System:()=>ue,WML:()=>le,Window:()=>Z});var le={};u(le,{Enable:()=>ae,Reload:()=>Ke});var _={};u(_,{OpenURL:()=>q});var mn="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";function P(n=21){let e="",i=n|0;for(;i--;)e+=mn[Math.random()*64|0];return e}var un=window.location.origin+"/wails/runtime",d=Object.freeze({Call:0,Clipboard:1,Application:2,Events:3,ContextMenu:4,Dialog:5,Window:6,Screens:7,System:8,Browser:9,CancelCall:10}),wn=P();function m(n,e=""){return function(i,o=null){return pn(n,i,e,o)}}async function pn(n,e,i,o){var l,c;let t=new URL(un);t.searchParams.append("object",n.toString()),t.searchParams.append("method",e.toString()),o&&t.searchParams.append("args",JSON.stringify(o));let r={"x-wails-client-id":wn};i&&(r["x-wails-window-name"]=i);let a=await fetch(t,{headers:r});if(!a.ok)throw new Error(await a.text());return((c=(l=a.headers.get("Content-Type"))==null?void 0:l.indexOf("application/json"))!=null?c:-1)!==-1?a.json():a.text()}var fn=m(d.Browser),gn=0;function q(n){return fn(gn,{url:n.toString()})}var ee={};u(ee,{Error:()=>An,Info:()=>Tn,OpenFile:()=>Rn,Question:()=>$,SaveFile:()=>En,Warning:()=>xn});window._wails=window._wails||{};window._wails.dialogErrorCallback=Mn;window._wails.dialogResultCallback=Dn;var hn=m(d.Dialog),F=new Map,Wn=0,bn=1,vn=2,yn=3,Cn=4,Pn=5;function Dn(n,e,i){let o=Ie(n);if(o)if(i)try{o.resolve(JSON.parse(e))}catch(t){o.reject(new TypeError("could not parse result: "+t.message,{cause:t}))}else o.resolve(e)}function Mn(n,e){var i;(i=Ie(n))==null||i.reject(new window.Error(e))}function Ie(n){let e=F.get(n);return F.delete(n),e}function Sn(){let n;do n=P();while(F.has(n));return n}function D(n,e={}){let i=Sn();return new Promise((o,t)=>{F.set(i,{resolve:o,reject:t}),hn(n,Object.assign({"dialog-id":i},e)).catch(r=>{F.delete(i),t(r)})})}function Tn(n){return D(Wn,n)}function xn(n){return D(bn,n)}function An(n){return D(vn,n)}function $(n){return D(yn,n)}function Rn(n){var e;return(e=D(Cn,n))!=null?e:[]}function En(n){return D(Pn,n)}var oe={};u(oe,{Emit:()=>ie,Off:()=>In,OffAll:()=>zn,On:()=>Ln,OnMultiple:()=>ne,Once:()=>Un,Types:()=>je,WailsEvent:()=>M});var p=new Map,B=class{constructor(e,i,o){this.eventName=e,this.callback=i,this.maxCallbacks=o||-1}dispatch(e){try{this.callback(e)}catch(i){}return this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0)}};function ze(n){let e=p.get(n.eventName);e&&(e=e.filter(i=>i!==n),e.length===0?p.delete(n.eventName):p.set(n.eventName,e))}var je=Object.freeze({Windows:Object.freeze({APMPowerSettingChange:"windows:APMPowerSettingChange",APMPowerStatusChange:"windows:APMPowerStatusChange",APMResumeAutomatic:"windows:APMResumeAutomatic",APMResumeSuspend:"windows:APMResumeSuspend",APMSuspend:"windows:APMSuspend",ApplicationStarted:"windows:ApplicationStarted",SystemThemeChanged:"windows:SystemThemeChanged",WebViewNavigationCompleted:"windows:WebViewNavigationCompleted",WindowActive:"windows:WindowActive",WindowBackgroundErase:"windows:WindowBackgroundErase",WindowClickActive:"windows:WindowClickActive",WindowClosing:"windows:WindowClosing",WindowDidMove:"windows:WindowDidMove",WindowDidResize:"windows:WindowDidResize",WindowDPIChanged:"windows:WindowDPIChanged",WindowDragDrop:"windows:WindowDragDrop",WindowDragEnter:"windows:WindowDragEnter",WindowDragLeave:"windows:WindowDragLeave",WindowDragOver:"windows:WindowDragOver",WindowEndMove:"windows:WindowEndMove",WindowEndResize:"windows:WindowEndResize",WindowFullscreen:"windows:WindowFullscreen",WindowHide:"windows:WindowHide",WindowInactive:"windows:WindowInactive",WindowKeyDown:"windows:WindowKeyDown",WindowKeyUp:"windows:WindowKeyUp",WindowKillFocus:"windows:WindowKillFocus",WindowNonClientHit:"windows:WindowNonClientHit",WindowNonClientMouseDown:"windows:WindowNonClientMouseDown",WindowNonClientMouseLeave:"windows:WindowNonClientMouseLeave",WindowNonClientMouseMove:"windows:WindowNonClientMouseMove",WindowNonClientMouseUp:"windows:WindowNonClientMouseUp",WindowPaint:"windows:WindowPaint",WindowRestore:"windows:WindowRestore",WindowSetFocus:"windows:WindowSetFocus",WindowShow:"windows:WindowShow",WindowStartMove:"windows:WindowStartMove",WindowStartResize:"windows:WindowStartResize",WindowUnFullscreen:"windows:WindowUnFullscreen",WindowZOrderChanged:"windows:WindowZOrderChanged",WindowMinimise:"windows:WindowMinimise",WindowUnMinimise:"windows:WindowUnMinimise",WindowMaximise:"windows:WindowMaximise",WindowUnMaximise:"windows:WindowUnMaximise"}),Mac:Object.freeze({ApplicationDidBecomeActive:"mac:ApplicationDidBecomeActive",ApplicationDidChangeBackingProperties:"mac:ApplicationDidChangeBackingProperties",ApplicationDidChangeEffectiveAppearance:"mac:ApplicationDidChangeEffectiveAppearance",ApplicationDidChangeIcon:"mac:ApplicationDidChangeIcon",ApplicationDidChangeOcclusionState:"mac:ApplicationDidChangeOcclusionState",ApplicationDidChangeScreenParameters:"mac:ApplicationDidChangeScreenParameters",ApplicationDidChangeStatusBarFrame:"mac:ApplicationDidChangeStatusBarFrame",ApplicationDidChangeStatusBarOrientation:"mac:ApplicationDidChangeStatusBarOrientation",ApplicationDidChangeTheme:"mac:ApplicationDidChangeTheme",ApplicationDidFinishLaunching:"mac:ApplicationDidFinishLaunching",ApplicationDidHide:"mac:ApplicationDidHide",ApplicationDidResignActive:"mac:ApplicationDidResignActive",ApplicationDidUnhide:"mac:ApplicationDidUnhide",ApplicationDidUpdate:"mac:ApplicationDidUpdate",ApplicationShouldHandleReopen:"mac:ApplicationShouldHandleReopen",ApplicationWillBecomeActive:"mac:ApplicationWillBecomeActive",ApplicationWillFinishLaunching:"mac:ApplicationWillFinishLaunching",ApplicationWillHide:"mac:ApplicationWillHide",ApplicationWillResignActive:"mac:ApplicationWillResignActive",ApplicationWillTerminate:"mac:ApplicationWillTerminate",ApplicationWillUnhide:"mac:ApplicationWillUnhide",ApplicationWillUpdate:"mac:ApplicationWillUpdate",MenuDidAddItem:"mac:MenuDidAddItem",MenuDidBeginTracking:"mac:MenuDidBeginTracking",MenuDidClose:"mac:MenuDidClose",MenuDidDisplayItem:"mac:MenuDidDisplayItem",MenuDidEndTracking:"mac:MenuDidEndTracking",MenuDidHighlightItem:"mac:MenuDidHighlightItem",MenuDidOpen:"mac:MenuDidOpen",MenuDidPopUp:"mac:MenuDidPopUp",MenuDidRemoveItem:"mac:MenuDidRemoveItem",MenuDidSendAction:"mac:MenuDidSendAction",MenuDidSendActionToItem:"mac:MenuDidSendActionToItem",MenuDidUpdate:"mac:MenuDidUpdate",MenuWillAddItem:"mac:MenuWillAddItem",MenuWillBeginTracking:"mac:MenuWillBeginTracking",MenuWillDisplayItem:"mac:MenuWillDisplayItem",MenuWillEndTracking:"mac:MenuWillEndTracking",MenuWillHighlightItem:"mac:MenuWillHighlightItem",MenuWillOpen:"mac:MenuWillOpen",MenuWillPopUp:"mac:MenuWillPopUp",MenuWillRemoveItem:"mac:MenuWillRemoveItem",MenuWillSendAction:"mac:MenuWillSendAction",MenuWillSendActionToItem:"mac:MenuWillSendActionToItem",MenuWillUpdate:"mac:MenuWillUpdate",WebViewDidCommitNavigation:"mac:WebViewDidCommitNavigation",WebViewDidFinishNavigation:"mac:WebViewDidFinishNavigation",WebViewDidReceiveServerRedirectForProvisionalNavigation:"mac:WebViewDidReceiveServerRedirectForProvisionalNavigation",WebViewDidStartProvisionalNavigation:"mac:WebViewDidStartProvisionalNavigation",WindowDidBecomeKey:"mac:WindowDidBecomeKey",WindowDidBecomeMain:"mac:WindowDidBecomeMain",WindowDidBeginSheet:"mac:WindowDidBeginSheet",WindowDidChangeAlpha:"mac:WindowDidChangeAlpha",WindowDidChangeBackingLocation:"mac:WindowDidChangeBackingLocation",WindowDidChangeBackingProperties:"mac:WindowDidChangeBackingProperties",WindowDidChangeCollectionBehavior:"mac:WindowDidChangeCollectionBehavior",WindowDidChangeEffectiveAppearance:"mac:WindowDidChangeEffectiveAppearance",WindowDidChangeOcclusionState:"mac:WindowDidChangeOcclusionState",WindowDidChangeOrderingMode:"mac:WindowDidChangeOrderingMode",WindowDidChangeScreen:"mac:WindowDidChangeScreen",WindowDidChangeScreenParameters:"mac:WindowDidChangeScreenParameters",WindowDidChangeScreenProfile:"mac:WindowDidChangeScreenProfile",WindowDidChangeScreenSpace:"mac:WindowDidChangeScreenSpace",WindowDidChangeScreenSpaceProperties:"mac:WindowDidChangeScreenSpaceProperties",WindowDidChangeSharingType:"mac:WindowDidChangeSharingType",WindowDidChangeSpace:"mac:WindowDidChangeSpace",WindowDidChangeSpaceOrderingMode:"mac:WindowDidChangeSpaceOrderingMode",WindowDidChangeTitle:"mac:WindowDidChangeTitle",WindowDidChangeToolbar:"mac:WindowDidChangeToolbar",WindowDidDeminiaturize:"mac:WindowDidDeminiaturize",WindowDidEndSheet:"mac:WindowDidEndSheet",WindowDidEnterFullScreen:"mac:WindowDidEnterFullScreen",WindowDidEnterVersionBrowser:"mac:WindowDidEnterVersionBrowser",WindowDidExitFullScreen:"mac:WindowDidExitFullScreen",WindowDidExitVersionBrowser:"mac:WindowDidExitVersionBrowser",WindowDidExpose:"mac:WindowDidExpose",WindowDidFocus:"mac:WindowDidFocus",WindowDidMiniaturize:"mac:WindowDidMiniaturize",WindowDidMove:"mac:WindowDidMove",WindowDidOrderOffScreen:"mac:WindowDidOrderOffScreen",WindowDidOrderOnScreen:"mac:WindowDidOrderOnScreen",WindowDidResignKey:"mac:WindowDidResignKey",WindowDidResignMain:"mac:WindowDidResignMain",WindowDidResize:"mac:WindowDidResize",WindowDidUpdate:"mac:WindowDidUpdate",WindowDidUpdateAlpha:"mac:WindowDidUpdateAlpha",WindowDidUpdateCollectionBehavior:"mac:WindowDidUpdateCollectionBehavior",WindowDidUpdateCollectionProperties:"mac:WindowDidUpdateCollectionProperties",WindowDidUpdateShadow:"mac:WindowDidUpdateShadow",WindowDidUpdateTitle:"mac:WindowDidUpdateTitle",WindowDidUpdateToolbar:"mac:WindowDidUpdateToolbar",WindowDidZoom:"mac:WindowDidZoom",WindowFileDraggingEntered:"mac:WindowFileDraggingEntered",WindowFileDraggingExited:"mac:WindowFileDraggingExited",WindowFileDraggingPerformed:"mac:WindowFileDraggingPerformed",WindowHide:"mac:WindowHide",WindowMaximise:"mac:WindowMaximise",WindowUnMaximise:"mac:WindowUnMaximise",WindowMinimise:"mac:WindowMinimise",WindowUnMinimise:"mac:WindowUnMinimise",WindowShouldClose:"mac:WindowShouldClose",WindowShow:"mac:WindowShow",WindowWillBecomeKey:"mac:WindowWillBecomeKey",WindowWillBecomeMain:"mac:WindowWillBecomeMain",WindowWillBeginSheet:"mac:WindowWillBeginSheet",WindowWillChangeOrderingMode:"mac:WindowWillChangeOrderingMode",WindowWillClose:"mac:WindowWillClose",WindowWillDeminiaturize:"mac:WindowWillDeminiaturize",WindowWillEnterFullScreen:"mac:WindowWillEnterFullScreen",WindowWillEnterVersionBrowser:"mac:WindowWillEnterVersionBrowser",WindowWillExitFullScreen:"mac:WindowWillExitFullScreen",WindowWillExitVersionBrowser:"mac:WindowWillExitVersionBrowser",WindowWillFocus:"mac:WindowWillFocus",WindowWillMiniaturize:"mac:WindowWillMiniaturize",WindowWillMove:"mac:WindowWillMove",WindowWillOrderOffScreen:"mac:WindowWillOrderOffScreen",WindowWillOrderOnScreen:"mac:WindowWillOrderOnScreen",WindowWillResignMain:"mac:WindowWillResignMain",WindowWillResize:"mac:WindowWillResize",WindowWillUnfocus:"mac:WindowWillUnfocus",WindowWillUpdate:"mac:WindowWillUpdate",WindowWillUpdateAlpha:"mac:WindowWillUpdateAlpha",WindowWillUpdateCollectionBehavior:"mac:WindowWillUpdateCollectionBehavior",WindowWillUpdateCollectionProperties:"mac:WindowWillUpdateCollectionProperties",WindowWillUpdateShadow:"mac:WindowWillUpdateShadow",WindowWillUpdateTitle:"mac:WindowWillUpdateTitle",WindowWillUpdateToolbar:"mac:WindowWillUpdateToolbar",WindowWillUpdateVisibility:"mac:WindowWillUpdateVisibility",WindowWillUseStandardFrame:"mac:WindowWillUseStandardFrame",WindowZoomIn:"mac:WindowZoomIn",WindowZoomOut:"mac:WindowZoomOut",WindowZoomReset:"mac:WindowZoomReset"}),Linux:Object.freeze({ApplicationStartup:"linux:ApplicationStartup",SystemThemeChanged:"linux:SystemThemeChanged",WindowDeleteEvent:"linux:WindowDeleteEvent",WindowDidMove:"linux:WindowDidMove",WindowDidResize:"linux:WindowDidResize",WindowFocusIn:"linux:WindowFocusIn",WindowFocusOut:"linux:WindowFocusOut",WindowLoadChanged:"linux:WindowLoadChanged"}),Common:Object.freeze({ApplicationOpenedWithFile:"common:ApplicationOpenedWithFile",ApplicationStarted:"common:ApplicationStarted",ThemeChanged:"common:ThemeChanged",WindowClosing:"common:WindowClosing",WindowDidMove:"common:WindowDidMove",WindowDidResize:"common:WindowDidResize",WindowDPIChanged:"common:WindowDPIChanged",WindowFilesDropped:"common:WindowFilesDropped",WindowFocus:"common:WindowFocus",WindowFullscreen:"common:WindowFullscreen",WindowHide:"common:WindowHide",WindowLostFocus:"common:WindowLostFocus",WindowMaximise:"common:WindowMaximise",WindowMinimise:"common:WindowMinimise",WindowRestore:"common:WindowRestore",WindowRuntimeReady:"common:WindowRuntimeReady",WindowShow:"common:WindowShow",WindowUnFullscreen:"common:WindowUnFullscreen",WindowUnMaximise:"common:WindowUnMaximise",WindowUnMinimise:"common:WindowUnMinimise",WindowZoom:"common:WindowZoom",WindowZoomIn:"common:WindowZoomIn",WindowZoomOut:"common:WindowZoomOut",WindowZoomReset:"common:WindowZoomReset"})});window._wails=window._wails||{};window._wails.dispatchWailsEvent=Fn;var kn=m(d.Events),On=0,M=class{constructor(e,i=null){this.name=e,this.data=i}};function Fn(n){let e=p.get(n.name);if(!e)return;let i=new M(n.name,n.data);"sender"in n&&(i.sender=n.sender),e=e.filter(o=>!o.dispatch(i)),e.length===0?p.delete(n.name):p.set(n.name,e)}function ne(n,e,i){let o=p.get(n)||[],t=new B(n,e,i);return o.push(t),p.set(n,o),()=>ze(t)}function Ln(n,e){return ne(n,e,-1)}function Un(n,e){return ne(n,e,1)}function In(...n){n.forEach(e=>p.delete(e))}function zn(){p.clear()}function ie(n){return kn(On,n)}function Be(){return new MouseEvent("mousedown").buttons===0}function He(){if(!EventTarget||!AbortSignal||!AbortController)return!1;let n=!0,e=new EventTarget,i=new AbortController;return e.addEventListener("test",()=>{n=!1},{signal:i.signal}),i.abort(),e.dispatchEvent(new CustomEvent("test")),n}function H(n){var e;return n.target instanceof HTMLElement?n.target:!(n.target instanceof HTMLElement)&&n.target instanceof Node&&(e=n.target.parentElement)!=null?e:document.body}var Ne=!1;document.addEventListener("DOMContentLoaded",()=>{Ne=!0});function Ze(n){Ne||document.readyState==="complete"?n():document.addEventListener("DOMContentLoaded",n)}var jn=0,Bn=1,Hn=2,Nn=3,Zn=4,Vn=5,Gn=6,Kn=7,Yn=8,Xn=9,Jn=10,Qn=11,qn=12,_n=13,$n=14,ei=15,ni=16,ii=17,oi=18,ti=19,ri=20,si=21,ai=22,li=23,ci=24,di=25,mi=26,ui=27,wi=28,pi=29,fi=30,gi=31,hi=32,Wi=33,bi=34,vi=35,yi=36,Ci=37,Pi=38,Di=39,Mi=40,Si=41,Ti=42,xi=43,Ai=44,Ri=45,Ei=46,ki=47,s=Symbol("caller");s;var N=class N{constructor(e=""){this[s]=m(d.Window,e);for(let i of Object.getOwnPropertyNames(N.prototype))i!=="constructor"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this))}Get(e){return new N(e)}Position(){return this[s](jn)}Center(){return this[s](Bn)}Close(){return this[s](Hn)}DisableSizeConstraints(){return this[s](Nn)}EnableSizeConstraints(){return this[s](Zn)}Focus(){return this[s](Vn)}ForceReload(){return this[s](Gn)}Fullscreen(){return this[s](Kn)}GetScreen(){return this[s](Yn)}GetZoom(){return this[s](Xn)}Height(){return this[s](Jn)}Hide(){return this[s](Qn)}IsFocused(){return this[s](qn)}IsFullscreen(){return this[s](_n)}IsMaximised(){return this[s]($n)}IsMinimised(){return this[s](ei)}Maximise(){return this[s](ni)}Minimise(){return this[s](ii)}Name(){return this[s](oi)}OpenDevTools(){return this[s](ti)}RelativePosition(){return this[s](ri)}Reload(){return this[s](si)}Resizable(){return this[s](ai)}Restore(){return this[s](li)}SetPosition(e,i){return this[s](ci,{x:e,y:i})}SetAlwaysOnTop(e){return this[s](di,{alwaysOnTop:e})}SetBackgroundColour(e,i,o,t){return this[s](mi,{r:e,g:i,b:o,a:t})}SetFrameless(e){return this[s](ui,{frameless:e})}SetFullscreenButtonEnabled(e){return this[s](wi,{enabled:e})}SetMaxSize(e,i){return this[s](pi,{width:e,height:i})}SetMinSize(e,i){return this[s](fi,{width:e,height:i})}SetRelativePosition(e,i){return this[s](gi,{x:e,y:i})}SetResizable(e){return this[s](hi,{resizable:e})}SetSize(e,i){return this[s](Wi,{width:e,height:i})}SetTitle(e){return this[s](bi,{title:e})}SetZoom(e){return this[s](vi,{zoom:e})}Show(){return this[s](yi)}Size(){return this[s](Ci)}ToggleFullscreen(){return this[s](Pi)}ToggleMaximise(){return this[s](Di)}UnFullscreen(){return this[s](Mi)}UnMaximise(){return this[s](Si)}UnMinimise(){return this[s](Ti)}Width(){return this[s](xi)}Zoom(){return this[s](Ai)}ZoomIn(){return this[s](Ri)}ZoomOut(){return this[s](Ei)}ZoomReset(){return this[s](ki)}},te=N,Oi=new te(""),Z=Oi;function Fi(n,e=null){ie(new M(n,e))}function Li(n,e){let i=Z.Get(n),o=i[e];if(typeof o=="function")try{o.call(i)}catch(t){}}function Ve(n){let e=n.currentTarget;function i(t="Yes"){if(t!=="Yes")return;let r=e.getAttribute("wml-event")||e.getAttribute("data-wml-event"),a=e.getAttribute("wml-target-window")||e.getAttribute("data-wml-target-window")||"",l=e.getAttribute("wml-window")||e.getAttribute("data-wml-window"),c=e.getAttribute("wml-openurl")||e.getAttribute("data-wml-openurl");r!==null&&Fi(r),l!==null&&Li(a,l),c!==null&&q(c)}let o=e.getAttribute("wml-confirm")||e.getAttribute("data-wml-confirm");o?$({Title:"Confirm",Message:o,Detached:!1,Buttons:[{Label:"Yes"},{Label:"No",IsDefault:!0}]}).then(i):i()}var L=Symbol("controller"),S=Symbol("triggerMap"),b=Symbol("elementCount");L;var re=class{constructor(){this[L]=new AbortController}set(e,i){return{signal:this[L].signal}}reset(){this[L].abort(),this[L]=new AbortController}};S,b;var se=class{constructor(){this[S]=new WeakMap,this[b]=0}set(e,i){return this[S].has(e)||this[b]++,this[S].set(e,i),{}}reset(){if(!(this[b]<=0)){for(let e of document.body.querySelectorAll("*")){if(this[b]<=0)break;let i=this[S].get(e);i!=null&&this[b]--;for(let o of i||[])e.removeEventListener(o,Ve)}this[S]=new WeakMap,this[b]=0}}},Ge=He()?new re:new se;function Ui(n){let e=/\S+/g,i=n.getAttribute("wml-trigger")||n.getAttribute("data-wml-trigger")||"click",o=[],t;for(;(t=e.exec(i))!==null;)o.push(t[0]);let r=Ge.set(n,o);for(let a of o)n.addEventListener(a,Ve,r)}function ae(){Ze(Ke)}function Ke(){Ge.reset(),document.body.querySelectorAll("[wml-event], [wml-window], [wml-openurl], [data-wml-event], [data-wml-window], [data-wml-openurl]").forEach(Ui)}window.wails=ce;ae();var ue={};u(ue,{Capabilities:()=>Bi,Environment:()=>Hi,IsAMD64:()=>Vi,IsARM:()=>Gi,IsARM64:()=>Ki,IsDarkMode:()=>ji,IsDebug:()=>me,IsLinux:()=>Ni,IsMac:()=>Zi,IsWindows:()=>V,invoke:()=>v});var Ye=m(d.System),Ii=0,zi=1,de=function(){var n,e,i,o,t;try{if((e=(n=window.chrome)==null?void 0:n.webview)!=null&&e.postMessage)return window.chrome.webview.postMessage.bind(window.chrome.webview);if((t=(o=(i=window.webkit)==null?void 0:i.messageHandlers)==null?void 0:o.external)!=null&&t.postMessage)return window.webkit.messageHandlers.external.postMessage.bind(window.webkit.messageHandlers.external)}catch(r){}return null}();function v(n){de==null||de(n)}function ji(){return Ye(Ii)}async function Bi(){let n=await fetch("/wails/capabilities");if(n.ok)return n.json();throw new Error("could not fetch capabilities: "+n.statusText)}function Hi(){return Ye(zi)}function V(){return window._wails.environment.OS==="windows"}function Ni(){return window._wails.environment.OS==="linux"}function Zi(){return window._wails.environment.OS==="darwin"}function Vi(){return window._wails.environment.Arch==="amd64"}function Gi(){return window._wails.environment.Arch==="arm"}function Ki(){return window._wails.environment.Arch==="arm64"}function me(){return!!window._wails.environment.Debug}window.addEventListener("contextmenu",Qi);var Yi=m(d.ContextMenu),Xi=0;function Ji(n,e,i,o){Yi(Xi,{id:n,x:e,y:i,data:o})}function Qi(n){let e=H(n),i=window.getComputedStyle(e).getPropertyValue("--custom-contextmenu").trim();if(i){n.preventDefault();let o=window.getComputedStyle(e).getPropertyValue("--custom-contextmenu-data");Ji(i,n.clientX,n.clientY,o)}else qi(n,e)}function qi(n,e){if(me())return;switch(window.getComputedStyle(e).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":n.preventDefault();return}if(e.isContentEditable)return;let i=window.getSelection(),o=i&&i.toString().length>0;if(o)for(let t=0;tU});function U(n){try{return window._wails.flags[n]}catch(e){throw new Error("Unable to retrieve flag '"+n+"': "+e,{cause:e})}}var I=!1,z=!1,he=!1,x=!1,A=!1,y="",Xe="auto",T=0,pe=Be();window._wails=window._wails||{};window._wails.setResizable=n=>{he=n,he||(x=A=!1,w())};window.addEventListener("mousedown",We,{capture:!0});window.addEventListener("mousemove",We,{capture:!0});window.addEventListener("mouseup",We,{capture:!0});for(let n of["click","contextmenu","dblclick"])window.addEventListener(n,_i,{capture:!0});function _i(n){(z||A)&&(n.stopImmediatePropagation(),n.stopPropagation(),n.preventDefault())}var fe=0,$i=1,ge=2;function We(n){let e,i=n.buttons;switch(n.type){case"mousedown":e=fe,pe||(i=T|1<ao,Quit:()=>co,Show:()=>lo});var be=m(d.Application),to=0,ro=1,so=2;function ao(){return be(to)}function lo(){return be(ro)}function co(){return be(so)}var Te={};u(Te,{ByID:()=>ko,ByName:()=>Eo,Call:()=>Se,RuntimeError:()=>X});var Qe=Function.prototype.toString,R=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,ye,G;if(typeof R=="function"&&typeof Object.defineProperty=="function")try{ye=Object.defineProperty({},"length",{get:function(){throw G}}),G={},R(function(){throw 42},null,ye)}catch(n){n!==G&&(R=null)}else R=null;var mo=/^\s*class\b/,Pe=function(e){try{var i=Qe.call(e);return mo.test(i)}catch(o){return!1}},Ce=function(e){try{return Pe(e)?!1:(Qe.call(e),!0)}catch(i){return!1}},K=Object.prototype.toString,uo="[object Object]",wo="[object Function]",po="[object GeneratorFunction]",fo="[object HTMLAllCollection]",go="[object HTML document.all class]",ho="[object HTMLCollection]",Wo=typeof Symbol=="function"&&!!Symbol.toStringTag,bo=!(0 in[,]),De=function(){return!1};typeof document=="object"&&(Je=document.all,K.call(Je)===K.call(document.all)&&(De=function(e){if((bo||!e)&&(typeof e>"u"||typeof e=="object"))try{var i=K.call(e);return(i===fo||i===go||i===ho||i===uo)&&e("")==null}catch(o){}return!1}));var Je;function vo(n){if(De(n))return!0;if(!n||typeof n!="function"&&typeof n!="object")return!1;try{R(n,null,ye)}catch(e){if(e!==G)return!1}return!Pe(n)&&Ce(n)}function yo(n){if(De(n))return!0;if(!n||typeof n!="function"&&typeof n!="object")return!1;if(Wo)return Ce(n);if(Pe(n))return!1;var e=K.call(n);return e!==wo&&e!==po&&!/^\[object HTML/.test(e)?!1:Ce(n)}var h=R?vo:yo;var k=class extends Error{constructor(e,i){super(e,i),this.name="CancelError"}},W=class extends Error{constructor(e,i,o){super((o!=null?o:"Unhandled rejection in cancelled promise.")+" Reason: "+Co(i),{cause:i}),this.promise=e,this.name="CancelledRejectionError"}},f=Symbol("barrier"),Me=Symbol("cancelImpl"),en,qe=(en=Symbol.species)!=null?en:Symbol("speciesPolyfill"),j=class n extends Promise{constructor(e,i){let o,t;if(super((c,g)=>{o=c,t=g}),this.constructor[qe]!==Promise)throw new TypeError("CancellablePromise does not support transparent subclassing. Please refrain from overriding the [Symbol.species] static property.");let r={promise:this,resolve:o,reject:t,get oncancelled(){return i!=null?i:null},set oncancelled(c){i=c!=null?c:void 0}},a={get root(){return a},resolving:!1,settled:!1};Object.defineProperties(this,{[f]:{configurable:!1,enumerable:!1,writable:!0,value:null},[Me]:{configurable:!1,enumerable:!1,writable:!1,value:nn(r,a)}});let l=tn(r,a);try{e(on(r,a),l)}catch(c){a.resolving||l(c)}}cancel(e){return new n(i=>{Promise.all([this[Me](new k("Promise cancelled.",{cause:e})),Po(this)]).then(()=>i(),()=>i())})}cancelOn(e){return e.aborted?this.cancel(e.reason):e.addEventListener("abort",()=>void this.cancel(e.reason),{capture:!0}),this}then(e,i,o){if(!(this instanceof n))throw new TypeError("CancellablePromise.prototype.then called on an invalid object.");if(h(e)||(e=_e),h(i)||(i=$e),e===_e&&i==$e)return new n(r=>r(this));let t={};return this[f]=t,new n((r,a)=>{super.then(l=>{var c;this[f]===t&&(this[f]=null),(c=t.resolve)==null||c.call(t);try{r(e(l))}catch(g){a(g)}},l=>{var c;this[f]===t&&(this[f]=null),(c=t.resolve)==null||c.call(t);try{r(i(l))}catch(g){a(g)}})},async r=>{try{return o==null?void 0:o(r)}finally{await this.cancel(r)}})}catch(e,i){return this.then(void 0,e,i)}finally(e,i){if(!(this instanceof n))throw new TypeError("CancellablePromise.prototype.finally called on an invalid object.");return h(e)?this.then(o=>n.resolve(e()).then(()=>o),o=>n.resolve(e()).then(()=>{throw o}),i):this.then(e,e,i)}static get[(f,Me,qe)](){return Promise}static all(e){let i=Array.from(e),o=i.length===0?n.resolve(i):new n((t,r)=>{Promise.all(i).then(t,r)},t=>Y(o,i,t));return o}static allSettled(e){let i=Array.from(e),o=i.length===0?n.resolve(i):new n((t,r)=>{Promise.allSettled(i).then(t,r)},t=>Y(o,i,t));return o}static any(e){let i=Array.from(e),o=i.length===0?n.resolve(i):new n((t,r)=>{Promise.any(i).then(t,r)},t=>Y(o,i,t));return o}static race(e){let i=Array.from(e),o=new n((t,r)=>{Promise.race(i).then(t,r)},t=>Y(o,i,t));return o}static cancel(e){let i=new n(()=>{});return i.cancel(e),i}static timeout(e,i){let o=new n(()=>{});return AbortSignal&&typeof AbortSignal=="function"&&AbortSignal.timeout&&typeof AbortSignal.timeout=="function"?AbortSignal.timeout(e).addEventListener("abort",()=>void o.cancel(i)):setTimeout(()=>void o.cancel(i),e),o}static sleep(e,i){return new n(o=>{setTimeout(()=>o(i),e)})}static reject(e){return new n((i,o)=>o(e))}static resolve(e){return e instanceof n?e:new n(i=>i(e))}static withResolvers(){let e={oncancelled:null};return e.promise=new n((i,o)=>{e.resolve=i,e.reject=o},i=>{var o;(o=e.oncancelled)==null||o.call(e,i)}),e}};function nn(n,e){let i;return o=>{if(e.settled||(e.settled=!0,e.reason=o,n.reject(o),Promise.prototype.then.call(n.promise,void 0,t=>{if(t!==o)throw t})),!(!e.reason||!n.oncancelled))return i=new Promise(t=>{try{t(n.oncancelled(e.reason.cause))}catch(r){Promise.reject(new W(n.promise,r,"Unhandled exception in oncancelled callback."))}}).catch(t=>{Promise.reject(new W(n.promise,t,"Unhandled rejection in oncancelled callback."))}),n.oncancelled=null,i}}function on(n,e){return i=>{if(!e.resolving){if(e.resolving=!0,i===n.promise){if(e.settled)return;e.settled=!0,n.reject(new TypeError("A promise cannot be resolved with itself."));return}if(i!=null&&(typeof i=="object"||typeof i=="function")){let o;try{o=i.then}catch(t){e.settled=!0,n.reject(t);return}if(h(o)){try{let a=i.cancel;if(h(a)){let l=c=>{Reflect.apply(a,i,[c])};e.reason?nn(Ue(Le({},n),{oncancelled:l}),e)(e.reason):n.oncancelled=l}}catch(a){}let t={root:e.root,resolving:!1,get settled(){return this.root.settled},set settled(a){this.root.settled=a},get reason(){return this.root.reason}},r=tn(n,t);try{Reflect.apply(o,i,[on(n,t),r])}catch(a){r(a)}return}}e.settled||(e.settled=!0,n.resolve(i))}}}function tn(n,e){return i=>{if(!e.resolving)if(e.resolving=!0,e.settled){try{if(i instanceof k&&e.reason instanceof k&&Object.is(i.cause,e.reason.cause))return}catch(o){}Promise.reject(new W(n.promise,i))}else e.settled=!0,n.reject(i)}}function Y(n,e,i){let o=[];for(let t of e){let r;try{if(!h(t.then)||(r=t.cancel,!h(r)))continue}catch(l){continue}let a;try{a=Reflect.apply(r,t,[i])}catch(l){Promise.reject(new W(n,l,"Unhandled exception in cancel method."));continue}a&&o.push((a instanceof Promise?a:Promise.resolve(a)).catch(l=>{Promise.reject(new W(n,l,"Unhandled rejection in cancel method."))}))}return Promise.all(o)}function _e(n){return n}function $e(n){throw n}function Co(n){try{if(n instanceof Error||typeof n!="object"||n.toString!==Object.prototype.toString)return""+n}catch(e){}try{return JSON.stringify(n)}catch(e){}try{return Object.prototype.toString.call(n)}catch(e){}return""}function Po(n){var i;let e=(i=n[f])!=null?i:{};return"promise"in e||Object.assign(e,E()),n[f]==null&&(e.resolve(),n[f]=e),e.promise}var E=Promise.withResolvers;E&&typeof E=="function"?E=E.bind(Promise):E=function(){let n,e;return{promise:new Promise((o,t)=>{n=o,e=t}),resolve:n,reject:e}};window._wails=window._wails||{};window._wails.callResultHandler=xo;window._wails.callErrorHandler=Ao;var Do=m(d.Call),Mo=m(d.CancelCall),O=new Map,So=0,To=0,X=class extends Error{constructor(e,i){super(e,i),this.name="RuntimeError"}};function xo(n,e,i){let o=rn(n);if(o)if(!e)o.resolve(void 0);else if(!i)o.resolve(e);else try{o.resolve(JSON.parse(e))}catch(t){o.reject(new TypeError("could not parse result: "+t.message,{cause:t}))}}function Ao(n,e,i){let o=rn(n);if(o)if(!i)o.reject(new Error(e));else{let t;try{t=JSON.parse(e)}catch(l){o.reject(new TypeError("could not parse error: "+l.message,{cause:l}));return}let r={};t.cause&&(r.cause=t.cause);let a;switch(t.kind){case"ReferenceError":a=new ReferenceError(t.message,r);break;case"TypeError":a=new TypeError(t.message,r);break;case"RuntimeError":a=new X(t.message,r);break;default:a=new Error(t.message,r);break}o.reject(a)}}function rn(n){let e=O.get(n);return O.delete(n),e}function Ro(){let n;do n=P();while(O.has(n));return n}function Se(n){let e=Ro(),i=j.withResolvers();O.set(e,{resolve:i.resolve,reject:i.reject});let o=Do(So,Object.assign({"call-id":e},n)),t=!1;o.then(()=>{t=!0},a=>{O.delete(e),i.reject(a)});let r=()=>(O.delete(e),Mo(To,{"call-id":e}).catch(a=>{}));return i.oncancelled=()=>t?r():o.then(r),i.promise}function Eo(n,...e){return Se({methodName:n,args:e})}function ko(n,...e){return Se({methodID:n,args:e})}var xe={};u(xe,{SetText:()=>Lo,Text:()=>Uo});var sn=m(d.Clipboard),Oo=0,Fo=1;function Lo(n){return sn(Oo,{text:n})}function Uo(){return sn(Fo)}var Ae={};u(Ae,{Any:()=>C,Array:()=>zo,ByteSlice:()=>Io,Map:()=>jo,Nullable:()=>Bo,Struct:()=>Ho});function C(n){return n}function Io(n){return n==null?"":n}function zo(n){return n===C?e=>e===null?[]:e:e=>{if(e===null)return[];for(let i=0;ii===null?{}:i:i=>{if(i===null)return{};for(let o in i)i[o]=e(i[o]);return i}}function Bo(n){return n===C?C:e=>e===null?null:n(e)}function Ho(n){let e=!0;for(let i in n)if(n[i]!==C){e=!1;break}return e?C:i=>{for(let o in n)o in i&&(i[o]=n[o](i[o]));return i}}var Ee={};u(Ee,{GetAll:()=>Go,GetCurrent:()=>Yo,GetPrimary:()=>Ko});var Re=m(d.Screens),No=0,Zo=1,Vo=2;function Go(){return Re(No)}function Ko(){return Re(Zo)}function Yo(){return Re(Vo)}window._wails=window._wails||{};window._wails.invoke=v;v("wails:runtime:ready");export{ve as Application,_ as Browser,Te as Call,k as CancelError,j as CancellablePromise,W as CancelledRejectionError,xe as Clipboard,Ae as Create,ee as Dialogs,oe as Events,we as Flags,Ee as Screens,ue as System,le as WML,Z as Window}; diff --git a/v3/internal/generator/render/create.go b/v3/internal/generator/render/create.go index 8a7880390..1332345d1 100644 --- a/v3/internal/generator/render/create.go +++ b/v3/internal/generator/render/create.go @@ -213,17 +213,22 @@ func (m *module) PostponedCreates() []string { m.postponedCreates.Iterate(func(key types.Type, value any) { pp := value.(*postponed) - pre := "" + pre, post := "", "" if pp.params != "" { - pre = pp.params + " => " + if m.TS { + pre = createParamRegex.ReplaceAllString(pp.params, "${0}: any") + " => " + } else { + pre = "/** @type {(...args: any[]) => any} */(" + pp.params + " => " + post = ")" + } } switch t := key.(type) { case *types.Array, *types.Slice: - result[pp.index] = fmt.Sprintf("%s$Create.Array(%s)", pre, m.JSCreateWithParams(t.(interface{ Elem() types.Type }).Elem(), pp.params)) + result[pp.index] = fmt.Sprintf("%s$Create.Array(%s)%s", pre, m.JSCreateWithParams(t.(interface{ Elem() types.Type }).Elem(), pp.params), post) case *types.Map: - result[pp.index] = fmt.Sprintf("%s$Create.Map($Create.Any, %s)", pre, m.JSCreateWithParams(t.Elem(), pp.params)) + result[pp.index] = fmt.Sprintf("%s$Create.Map($Create.Any, %s)%s", pre, m.JSCreateWithParams(t.Elem(), pp.params), post) case *types.Named: if !collect.IsClass(key) { @@ -231,23 +236,24 @@ func (m *module) PostponedCreates() []string { // require an indirect assignment to break cycles. // Typescript cannot infer the return type on its own: add hints. - cast, returnType := "", "" + cast, argType, returnType := "", "", "" if m.TS { + argType = ": any[]" returnType = ": any" } else { cast = "/** @type {(...args: any[]) => any} */" } result[pp.index] = fmt.Sprintf(` -%s(function $$initCreateType%d(...args)%s { +%s(function $$initCreateType%d(...args%s)%s { if ($$createType%d === $$initCreateType%d) { - $$createType%d = %s%s; + $$createType%d = %s%s%s; } return $$createType%d(...args); })`, - cast, pp.index, returnType, + cast, pp.index, argType, returnType, pp.index, pp.index, - pp.index, pre, m.JSCreateWithParams(t.Underlying(), pp.params), + pp.index, pre, m.JSCreateWithParams(t.Underlying(), pp.params), post, pp.index, )[1:] // Remove initial newline. @@ -280,11 +286,12 @@ func (m *module) PostponedCreates() []string { } builder.WriteString(")") } + builder.WriteString(post) result[pp.index] = builder.String() case *types.Pointer: - result[pp.index] = fmt.Sprintf("%s$Create.Nullable(%s)", pre, m.JSCreateWithParams(t.Elem(), pp.params)) + result[pp.index] = fmt.Sprintf("%s$Create.Nullable(%s)%s", pre, m.JSCreateWithParams(t.Elem(), pp.params), post) case *types.Struct: info := m.collector.Struct(t) @@ -311,11 +318,12 @@ func (m *module) PostponedCreates() []string { builder.WriteRune('\n') } builder.WriteString("})") + builder.WriteString(post) result[pp.index] = builder.String() default: - result[pp.index] = pre + "$Create.Any" + result[pp.index] = pre + "$Create.Any" + post } }) diff --git a/v3/internal/generator/render/info.go b/v3/internal/generator/render/info.go index 7cd95a3f6..3947f117a 100644 --- a/v3/internal/generator/render/info.go +++ b/v3/internal/generator/render/info.go @@ -1,6 +1,7 @@ package render import ( + "regexp" "strings" "github.com/wailsapp/wails/v3/internal/generator/collect" @@ -26,6 +27,9 @@ type modelInfo struct { } } +// createParamRegex must match type parameter creation strings as generated by [modelinfo]. +var createParamRegex = regexp.MustCompile(`\$\$createParam[^\s,)]*`) + // modelinfo gathers and returns useful information about the given model. func modelinfo(model *collect.ModelInfo, useInterfaces bool) (info modelInfo) { info.HasValues = len(model.Values) > 0 @@ -46,11 +50,14 @@ func modelinfo(model *collect.ModelInfo, useInterfaces bool) (info modelInfo) { createList.WriteRune('(') for i, param := range model.TypeParams { + param = typeparam(i, param) + if i > 0 { params.WriteRune(',') paramList.WriteString(", ") createList.WriteString(", ") } + params.WriteString(param) paramList.WriteString(param) diff --git a/v3/internal/generator/render/templates/models.js.tmpl b/v3/internal/generator/render/templates/models.js.tmpl index 4d12429d0..6c0e98b8b 100644 --- a/v3/internal/generator/render/templates/models.js.tmpl +++ b/v3/internal/generator/render/templates/models.js.tmpl @@ -9,7 +9,7 @@ {{if not $useInterfaces}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "{{js $runtime}}"; +import { Create as $Create } from "{{js $runtime}}"; {{end -}} {{range $imports.External}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -147,7 +147,10 @@ export class {{jsid $model.Name}} { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class {{jsid $model.Name}}. - * @template {{$template.Params}} + {{- range $i, $param := $model.TypeParams}} + {{- $param = (typeparam $i $param)}} + * @template [{{$param}}=any] + {{- end}} {{- range $i, $param := $model.TypeParams}} {{- $param = (typeparam $i $param)}} * @param {(source: any) => {{$param -}} } $$createParam{{$param}} diff --git a/v3/internal/generator/render/templates/models.ts.tmpl b/v3/internal/generator/render/templates/models.ts.tmpl index e82e7311a..a6073af08 100644 --- a/v3/internal/generator/render/templates/models.ts.tmpl +++ b/v3/internal/generator/render/templates/models.ts.tmpl @@ -8,7 +8,7 @@ {{if not $useInterfaces}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "{{js $runtime}}"; +import { Create as $Create } from "{{js $runtime}}"; {{end -}} {{range $imports.External}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -139,7 +139,12 @@ export {{if $info.IsInterface}}interface{{else}}class{{end}} {{jsid $model.Name} * Creates a new {{jsid $model.Name}} instance from a string or object. {{- end}} */ - static createFrom{{$template.ParamList}}({{if $template.ParamList}} + static createFrom{{if $template.ParamList}}< + {{- range $i, $param := $model.TypeParams}} + {{- $param = (typeparam $i $param)}} + {{- if gt $i 0}}, {{end -}} + {{$param}} = any + {{- end}}>{{end}}({{if $template.ParamList}} {{- range $i, $param := $model.TypeParams}} {{- $param = (typeparam $i $param)}} {{- if gt $i 0}}, {{end -}} diff --git a/v3/internal/generator/render/templates/service.js.tmpl b/v3/internal/generator/render/templates/service.js.tmpl index bde8ad188..f71e055bf 100644 --- a/v3/internal/generator/render/templates/service.js.tmpl +++ b/v3/internal/generator/render/templates/service.js.tmpl @@ -22,7 +22,7 @@ {{end}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call{{if not $useInterfaces}}, Create as $Create{{end -}} } from "{{js $runtime}}"; +import { Call as $Call, CancellablePromise as $CancellablePromise{{if not $useInterfaces}}, Create as $Create{{end}} } from "{{js $runtime}}"; {{range $imports.External}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -46,7 +46,7 @@ import * as $models from "./{{js $models}}"; {{- range $i, $param := .Params}} * @param { {{- $module.JSType .Type}}{{if .Variadic}}[]{{end -}} } {{jsparam $i .}} {{- end}} - * @returns {Promise< + * @returns {$CancellablePromise< {{- if eq 0 (len .Results) -}} void {{- else if eq 1 (len .Results)}} @@ -56,7 +56,7 @@ import * as $models from "./{{js $models}}"; {{- if gt $i 0}}, {{end}} {{- $module.JSType $result}} {{- end}}] - {{- end}}> & { cancel(): void }} + {{- end}}>} */ {{if not .Internal}}export {{end}}function {{.Name}}({{range $i, $param := .Params -}} {{- if gt $i 0}}, {{end}} @@ -64,14 +64,14 @@ import * as $models from "./{{js $models}}"; {{- jsparam $i .}} {{- end}}) { {{- if $useNames}} - let $resultPromise = /** @type {any} */($Call.ByName("{{js .FQN}}" + return $Call.ByName("{{js .FQN}}" {{- else}} - let $resultPromise = /** @type {any} */($Call.ByID({{.ID}} - {{- end}}{{range $i, $param := .Params}}, {{jsparam $i .}}{{end}})); - {{- if or $useInterfaces (not .Results) ($module.SkipCreate .Results)}} - return $resultPromise; - {{- else}} - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID({{.ID}} + {{- end}}{{range $i, $param := .Params}}, {{jsparam $i .}}{{end}}) + {{- if or $useInterfaces (not .Results) ($module.SkipCreate .Results) -}} + ; + {{- else -}} + .then(/** @type {($result: any) => any} */(($result) => { {{- if eq 1 (len .Results)}} return {{$module.JSCreate (index .Results 0)}}($result); {{- else}} @@ -83,8 +83,6 @@ import * as $models from "./{{js $models}}"; return $result; {{- end}} })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; {{- end}} } {{end}} diff --git a/v3/internal/generator/render/templates/service.ts.tmpl b/v3/internal/generator/render/templates/service.ts.tmpl index 9a2f0cd31..4db90fe60 100644 --- a/v3/internal/generator/render/templates/service.ts.tmpl +++ b/v3/internal/generator/render/templates/service.ts.tmpl @@ -21,7 +21,7 @@ {{end}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call{{if not $useInterfaces}}, Create as $Create{{end -}} } from "{{js $runtime}}"; +import { Call as $Call, CancellablePromise as $CancellablePromise{{if not $useInterfaces}}, Create as $Create{{end}} } from "{{js $runtime}}"; {{range $imports.External}} // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -49,7 +49,7 @@ import * as $models from "./{{js $models}}"; {{- if gt $i 0}}, {{end}} {{- if .Variadic}}...{{end}} {{- jsparam $i .}}: {{$module.JSType .Type}}{{if .Variadic}}[]{{end}} -{{- end}}): Promise< +{{- end}}): $CancellablePromise< {{- if eq 0 (len .Results) -}} void {{- else if eq 1 (len .Results)}} @@ -59,16 +59,16 @@ import * as $models from "./{{js $models}}"; {{- if gt $i 0}}, {{end}} {{- $module.JSType $result}} {{- end}}] - {{- end}}> & { cancel(): void } { + {{- end}}> { {{- if $useNames}} - let $resultPromise = $Call.ByName("{{js .FQN}}" + return $Call.ByName("{{js .FQN}}" {{- else}} - let $resultPromise = $Call.ByID({{.ID}} - {{- end}}{{range $i, $param := .Params}}, {{jsparam $i .}}{{end}}) as any; - {{- if or $useInterfaces (not .Results) ($module.SkipCreate .Results)}} - return $resultPromise; - {{- else}} - let $typingPromise = $resultPromise.then(($result: any) => { + return $Call.ByID({{.ID}} + {{- end}}{{range $i, $param := .Params}}, {{jsparam $i .}}{{end}}) + {{- if or $useInterfaces (not .Results) ($module.SkipCreate .Results) -}} + ; + {{- else -}} + .then(($result: any) => { {{- if eq 1 (len .Results)}} return {{$module.JSCreate (index .Results 0)}}($result); {{- else}} @@ -79,9 +79,7 @@ import * as $models from "./{{js $models}}"; {{- end}}{{end}} return $result; {{- end}} - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); {{- end}} } {{end}} diff --git a/v3/internal/generator/testcases/aliases/main.go b/v3/internal/generator/testcases/aliases/main.go index 7695d625c..8655425e9 100644 --- a/v3/internal/generator/testcases/aliases/main.go +++ b/v3/internal/generator/testcases/aliases/main.go @@ -2,6 +2,7 @@ package main import ( _ "embed" + "encoding" "log" nobindingshere "github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here" @@ -54,37 +55,37 @@ type GenericPerson[T any] struct { type StrangelyAliasedPerson = Person // A generic alias that forwards to a type parameter. -// type GenericAlias[T any] = T +type GenericAlias[T any] = T // A generic alias that wraps a pointer type. -// type GenericPtrAlias[T any] = *GenericAlias[T] +type GenericPtrAlias[T any] = *GenericAlias[T] // A generic alias that wraps a map. -// type GenericMapAlias[T interface { -// comparable -// encoding.TextMarshaler -// }, U any] = map[T]U +type GenericMapAlias[T interface { + comparable + encoding.TextMarshaler +}, U any] = map[T]U // A generic alias that wraps a generic struct. -// type GenericPersonAlias[T any] = GenericPerson[[]GenericPtrAlias[T]] +type GenericPersonAlias[T any] = GenericPerson[[]GenericPtrAlias[T]] // An alias that wraps a class through a non-typeparam alias. -// type IndirectPersonAlias = GenericPersonAlias[bool] +type IndirectPersonAlias = GenericPersonAlias[bool] // An alias that wraps a class through a typeparam alias. -// type TPIndirectPersonAlias = GenericAlias[GenericPerson[bool]] +type TPIndirectPersonAlias = GenericAlias[GenericPerson[bool]] // A class whose fields have various aliased types. -// type AliasGroup struct { -// GAi GenericAlias[int] -// GAP GenericAlias[GenericPerson[bool]] -// GPAs GenericPtrAlias[[]string] -// GPAP GenericPtrAlias[GenericPerson[[]int]] -// GMA GenericMapAlias[struct{ encoding.TextMarshaler }, float32] -// GPA GenericPersonAlias[bool] -// IPA IndirectPersonAlias -// TPIPA TPIndirectPersonAlias -// } +type AliasGroup struct { + GAi GenericAlias[int] + GAP GenericAlias[GenericPerson[bool]] + GPAs GenericPtrAlias[[]string] + GPAP GenericPtrAlias[GenericPerson[[]int]] + GMA GenericMapAlias[struct{ encoding.TextMarshaler }, float32] + GPA GenericPersonAlias[bool] + IPA IndirectPersonAlias + TPIPA TPIndirectPersonAlias +} // Get someone. func (GreetService) Get(aliasValue Alias) Person { @@ -105,9 +106,9 @@ func (GreetService) GetButForeignPrivateAlias() (_ nobindingshere.PrivatePerson) return } -// func (GreetService) GetButGenericAliases() (_ AliasGroup) { -// return -// } +func (GreetService) GetButGenericAliases() (_ AliasGroup) { + return +} // Greet a lot of unusual things. func (GreetService) Greet(EmptyAliasStruct, EmptyStruct) AliasStruct { diff --git a/v3/internal/generator/testcases/complex_instantiations/bound_types.json b/v3/internal/generator/testcases/complex_instantiations/bound_types.json index 442ec1501..663519c0c 100644 --- a/v3/internal/generator/testcases/complex_instantiations/bound_types.json +++ b/v3/internal/generator/testcases/complex_instantiations/bound_types.json @@ -12,5 +12,7 @@ ".Service11", ".Service12", ".Service13", + ".Service14", + ".Service15", "/other.Service16" ] diff --git a/v3/internal/generator/testcases/complex_instantiations/main.go b/v3/internal/generator/testcases/complex_instantiations/main.go index a934421c1..02e63e21c 100644 --- a/v3/internal/generator/testcases/complex_instantiations/main.go +++ b/v3/internal/generator/testcases/complex_instantiations/main.go @@ -24,7 +24,7 @@ type Service13 struct{} type Service14 struct{} type Service15 struct{} -// type SimplifiedFactory[T any] = Factory[T, Service15] +type SimplifiedFactory[T any] = Factory[T, Service15] func main() { factory := NewFactory[Service1, Service2]() @@ -42,7 +42,7 @@ func main() { other.CustomNewService(Service7{}), other.ServiceInitialiser[Service8]()(&Service8{}), application.NewServiceWithOptions(&Service13{}, application.ServiceOptions{Name: "custom name"}), - // SimplifiedFactory[Service14]{}.Get(), + SimplifiedFactory[Service14]{}.Get(), other.LocalService, }, CustomNewServices[Service9, Service10]()...), diff --git a/v3/internal/generator/testcases/complex_json/main.go b/v3/internal/generator/testcases/complex_json/main.go index 18ee6720f..2eac2eba7 100644 --- a/v3/internal/generator/testcases/complex_json/main.go +++ b/v3/internal/generator/testcases/complex_json/main.go @@ -52,7 +52,7 @@ type Embedded3 string // Person represents a person type Person struct { // Titles is optional in JSON - Titles []Title `json:",omitempty"` + Titles []Title `json:",omitzero"` // Names has a // multiline comment diff --git a/v3/internal/generator/testcases/map_keys/main.go b/v3/internal/generator/testcases/map_keys/main.go index 1ed2608a3..833630100 100644 --- a/v3/internal/generator/testcases/map_keys/main.go +++ b/v3/internal/generator/testcases/map_keys/main.go @@ -106,24 +106,24 @@ type InterfacePtrType *encoding.TextMarshaler type InterfaceAlias = encoding.TextMarshaler type InterfacePtrAlias = *encoding.TextMarshaler -// type ComparableCstrAlias[R comparable] = R -// type ComparableCstrPtrAlias[R comparable] = *R -// type BasicCstrAlias[S BasicConstraint] = S -// type BasicCstrPtrAlias[S BasicConstraint] = *S -// type BadTildeCstrAlias[T BadTildeConstraint] = T -// type BadTildeCstrPtrAlias[T BadTildeConstraint] = *T -// type GoodTildeCstrAlias[U GoodTildeConstraint] = U -// type GoodTildeCstrPtrAlias[U GoodTildeConstraint] = *U -// type NonBasicCstrAlias[V NonBasicConstraint] = V -// type NonBasicCstrPtrAlias[V NonBasicConstraint] = *V -// type PointableCstrAlias[W PointableConstraint] = W -// type PointableCstrPtrAlias[W PointableConstraint] = *W -// type MixedCstrAlias[X MixedConstraint] = X -// type MixedCstrPtrAlias[X MixedConstraint] = *X -// type InterfaceCstrAlias[Y InterfaceConstraint] = Y -// type InterfaceCstrPtrAlias[Y InterfaceConstraint] = *Y -// type PointerCstrAlias[R comparable, Z PointerConstraint[R]] = Z -// type PointerCstrPtrAlias[R comparable, Z PointerConstraint[R]] = *Z +type ComparableCstrAlias[R comparable] = R +type ComparableCstrPtrAlias[R comparable] = *R +type BasicCstrAlias[S BasicConstraint] = S +type BasicCstrPtrAlias[S BasicConstraint] = *S +type BadTildeCstrAlias[T BadTildeConstraint] = T +type BadTildeCstrPtrAlias[T BadTildeConstraint] = *T +type GoodTildeCstrAlias[U GoodTildeConstraint] = U +type GoodTildeCstrPtrAlias[U GoodTildeConstraint] = *U +type NonBasicCstrAlias[V NonBasicConstraint] = V +type NonBasicCstrPtrAlias[V NonBasicConstraint] = *V +type PointableCstrAlias[W PointableConstraint] = W +type PointableCstrPtrAlias[W PointableConstraint] = *W +type MixedCstrAlias[X MixedConstraint] = X +type MixedCstrPtrAlias[X MixedConstraint] = *X +type InterfaceCstrAlias[Y InterfaceConstraint] = Y +type InterfaceCstrPtrAlias[Y InterfaceConstraint] = *Y +type PointerCstrAlias[R comparable, Z PointerConstraint[R]] = Z +type PointerCstrPtrAlias[R comparable, Z PointerConstraint[R]] = *Z type Maps[R comparable, S BasicConstraint, T BadTildeConstraint, U GoodTildeConstraint, V NonBasicConstraint, W PointableConstraint, X MixedConstraint, Y InterfaceConstraint, Z PointerConstraint[R]] struct { Bool map[bool]int // Reject @@ -226,63 +226,63 @@ type Maps[R comparable, S BasicConstraint, T BadTildeConstraint, U GoodTildeCons TPZ map[Z]int // Accept, hide TPZPtr map[*Z]int // Soft reject - // GAR map[ComparableCstrAlias[R]]int // Soft reject - // GARPtr map[ComparableCstrPtrAlias[R]]int // Soft reject - // GAS map[BasicCstrAlias[S]]int // Accept, hide - // GASPtr map[BasicCstrPtrAlias[S]]int // Soft reject - // GAT map[BadTildeCstrAlias[T]]int // Soft reject - // GATPtr map[BadTildeCstrPtrAlias[T]]int // Soft reject - // GAU map[GoodTildeCstrAlias[U]]int // Accept, hide - // GAUPtr map[GoodTildeCstrPtrAlias[U]]int // Soft reject - // GAV map[NonBasicCstrAlias[V]]int // Accept, hide - // GAVPtr map[NonBasicCstrPtrAlias[V]]int // Soft reject - // GAW map[PointableCstrAlias[W]]int // Soft reject - // GAWPtr map[PointableCstrPtrAlias[W]]int // Accept, hide - // GAX map[MixedCstrAlias[X]]int // Accept, hide - // GAXPtr map[MixedCstrPtrAlias[X]]int // Soft reject - // GAY map[InterfaceCstrAlias[Y]]int // Accept, hide - // GAYPtr map[InterfaceCstrPtrAlias[Y]]int // Soft reject - // GAZ map[PointerCstrAlias[R, Z]]int // Accept, hide - // GAZPtr map[PointerCstrPtrAlias[R, Z]]int // Soft reject + GAR map[ComparableCstrAlias[R]]int // Soft reject + GARPtr map[ComparableCstrPtrAlias[R]]int // Soft reject + GAS map[BasicCstrAlias[S]]int // Accept, hide + GASPtr map[BasicCstrPtrAlias[S]]int // Soft reject + GAT map[BadTildeCstrAlias[T]]int // Soft reject + GATPtr map[BadTildeCstrPtrAlias[T]]int // Soft reject + GAU map[GoodTildeCstrAlias[U]]int // Accept, hide + GAUPtr map[GoodTildeCstrPtrAlias[U]]int // Soft reject + GAV map[NonBasicCstrAlias[V]]int // Accept, hide + GAVPtr map[NonBasicCstrPtrAlias[V]]int // Soft reject + GAW map[PointableCstrAlias[W]]int // Soft reject + GAWPtr map[PointableCstrPtrAlias[W]]int // Accept, hide + GAX map[MixedCstrAlias[X]]int // Accept, hide + GAXPtr map[MixedCstrPtrAlias[X]]int // Soft reject + GAY map[InterfaceCstrAlias[Y]]int // Accept, hide + GAYPtr map[InterfaceCstrPtrAlias[Y]]int // Soft reject + GAZ map[PointerCstrAlias[R, Z]]int // Accept, hide + GAZPtr map[PointerCstrPtrAlias[R, Z]]int // Soft reject - // GACi map[ComparableCstrAlias[int]]int // Accept, hide - // GACV map[ComparableCstrAlias[ValueTextMarshaler]]int // Accept - // GACP map[ComparableCstrAlias[PointerTextMarshaler]]int // Reject - // GACiPtr map[ComparableCstrPtrAlias[int]]int // Reject - // GACVPtr map[ComparableCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GACPPtr map[ComparableCstrPtrAlias[PointerTextMarshaler]]int // Accept, hide - // GABi map[BasicCstrAlias[int]]int // Accept, hide - // GABs map[BasicCstrAlias[string]]int // Accept - // GABiPtr map[BasicCstrPtrAlias[int]]int // Reject - // GABT map[BadTildeCstrAlias[struct{}]]int // Reject - // GABTPtr map[BadTildeCstrPtrAlias[struct{}]]int // Reject - // GAGT map[GoodTildeCstrAlias[ValueTextMarshaler]]int // Accept - // GAGTPtr map[GoodTildeCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GANBV map[NonBasicCstrAlias[ValueTextMarshaler]]int // Accept - // GANBP map[NonBasicCstrAlias[*PointerTextMarshaler]]int // Accept, hide - // GANBVPtr map[NonBasicCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GANBPPtr map[NonBasicCstrPtrAlias[*PointerTextMarshaler]]int // Reject - // GAPlV1 map[PointableCstrAlias[ValueTextMarshaler]]int // Accept - // GAPlV2 map[*PointableCstrAlias[ValueTextMarshaler]]int // Accept - // GAPlP1 map[PointableCstrAlias[PointerTextMarshaler]]int // Reject - // GAPlP2 map[*PointableCstrAlias[PointerTextMarshaler]]int // Accept - // GAPlVPtr map[PointableCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GAPlPPtr map[PointableCstrPtrAlias[PointerTextMarshaler]]int // Accept, hide - // GAMi map[MixedCstrAlias[uint]]int // Accept, hide - // GAMS map[MixedCstrAlias[StringType]]int // Accept - // GAMV map[MixedCstrAlias[ValueTextMarshaler]]int // Accept - // GAMSPtr map[MixedCstrPtrAlias[StringType]]int // Reject - // GAMVPtr map[MixedCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GAII map[InterfaceCstrAlias[encoding.TextMarshaler]]int // Accept, hide - // GAIV map[InterfaceCstrAlias[ValueTextMarshaler]]int // Accept - // GAIP map[InterfaceCstrAlias[*PointerTextMarshaler]]int // Accept, hide - // GAIIPtr map[InterfaceCstrPtrAlias[encoding.TextMarshaler]]int // Reject - // GAIVPtr map[InterfaceCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide - // GAIPPtr map[InterfaceCstrPtrAlias[*PointerTextMarshaler]]int // Reject - // GAPrV map[PointerCstrAlias[ValueTextMarshaler, *ValueTextMarshaler]]int // Accept, hide - // GAPrP map[PointerCstrAlias[PointerTextMarshaler, *PointerTextMarshaler]]int // Accept, hide - // GAPrVPtr map[PointerCstrPtrAlias[ValueTextMarshaler, *ValueTextMarshaler]]int // Reject - // GAPrPPtr map[PointerCstrPtrAlias[PointerTextMarshaler, *PointerTextMarshaler]]int // Reject + GACi map[ComparableCstrAlias[int]]int // Accept, hide + GACV map[ComparableCstrAlias[ValueTextMarshaler]]int // Accept + GACP map[ComparableCstrAlias[PointerTextMarshaler]]int // Reject + GACiPtr map[ComparableCstrPtrAlias[int]]int // Reject + GACVPtr map[ComparableCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GACPPtr map[ComparableCstrPtrAlias[PointerTextMarshaler]]int // Accept, hide + GABi map[BasicCstrAlias[int]]int // Accept, hide + GABs map[BasicCstrAlias[string]]int // Accept + GABiPtr map[BasicCstrPtrAlias[int]]int // Reject + GABT map[BadTildeCstrAlias[struct{}]]int // Reject + GABTPtr map[BadTildeCstrPtrAlias[struct{}]]int // Reject + GAGT map[GoodTildeCstrAlias[ValueTextMarshaler]]int // Accept + GAGTPtr map[GoodTildeCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GANBV map[NonBasicCstrAlias[ValueTextMarshaler]]int // Accept + GANBP map[NonBasicCstrAlias[*PointerTextMarshaler]]int // Accept, hide + GANBVPtr map[NonBasicCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GANBPPtr map[NonBasicCstrPtrAlias[*PointerTextMarshaler]]int // Reject + GAPlV1 map[PointableCstrAlias[ValueTextMarshaler]]int // Accept + GAPlV2 map[*PointableCstrAlias[ValueTextMarshaler]]int // Accept + GAPlP1 map[PointableCstrAlias[PointerTextMarshaler]]int // Reject + GAPlP2 map[*PointableCstrAlias[PointerTextMarshaler]]int // Accept + GAPlVPtr map[PointableCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GAPlPPtr map[PointableCstrPtrAlias[PointerTextMarshaler]]int // Accept, hide + GAMi map[MixedCstrAlias[uint]]int // Accept, hide + GAMS map[MixedCstrAlias[StringType]]int // Accept + GAMV map[MixedCstrAlias[ValueTextMarshaler]]int // Accept + GAMSPtr map[MixedCstrPtrAlias[StringType]]int // Reject + GAMVPtr map[MixedCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GAII map[InterfaceCstrAlias[encoding.TextMarshaler]]int // Accept, hide + GAIV map[InterfaceCstrAlias[ValueTextMarshaler]]int // Accept + GAIP map[InterfaceCstrAlias[*PointerTextMarshaler]]int // Accept, hide + GAIIPtr map[InterfaceCstrPtrAlias[encoding.TextMarshaler]]int // Reject + GAIVPtr map[InterfaceCstrPtrAlias[ValueTextMarshaler]]int // Accept, hide + GAIPPtr map[InterfaceCstrPtrAlias[*PointerTextMarshaler]]int // Reject + GAPrV map[PointerCstrAlias[ValueTextMarshaler, *ValueTextMarshaler]]int // Accept, hide + GAPrP map[PointerCstrAlias[PointerTextMarshaler, *PointerTextMarshaler]]int // Accept, hide + GAPrVPtr map[PointerCstrPtrAlias[ValueTextMarshaler, *ValueTextMarshaler]]int // Reject + GAPrPPtr map[PointerCstrPtrAlias[PointerTextMarshaler, *PointerTextMarshaler]]int // Reject } func (*Service) Method() (_ Maps[PointerTextMarshaler, int, int, ValueTextMarshaler, *PointerTextMarshaler, ValueTextMarshaler, StringType, ValueTextMarshaler, *PointerTextMarshaler]) { diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/json/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/json/models.js index b7e840816..96abf0ef1 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/json/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/json/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Marshaler is the interface implemented by types that diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/models.js index bbabe728a..59cfef5bd 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/encoding/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * TextMarshaler is the interface implemented by an object that can diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js index 761df70f4..fcbd41a3a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -22,81 +22,76 @@ import * as $models from "./models.js"; /** * Get someone. * @param {$models.Alias} aliasValue - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function Get(aliasValue) { - let $resultPromise = /** @type {any} */($Call.ByID(1928502664, aliasValue)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1928502664, aliasValue).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * Apparently, aliases are all the rage right now. * @param {$models.AliasedPerson} p - * @returns {Promise<$models.StrangelyAliasedPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.StrangelyAliasedPerson>} */ export function GetButAliased(p) { - let $resultPromise = /** @type {any} */($Call.ByID(1896499664, p)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1896499664, p).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * Get someone quite different. - * @returns {Promise<$models.GenericPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.GenericPerson>} */ export function GetButDifferent() { - let $resultPromise = /** @type {any} */($Call.ByID(2240931744)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2240931744).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GetButForeignPrivateAlias() { - let $resultPromise = /** @type {any} */($Call.ByID(643456960)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(643456960).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; +} + +/** + * @returns {$CancellablePromise<$models.AliasGroup>} + */ +export function GetButGenericAliases() { + return $Call.ByID(914093800).then(/** @type {($result: any) => any} */(($result) => { + return $$createType3($result); + })); } /** * Greet a lot of unusual things. * @param {$models.EmptyAliasStruct} $0 * @param {$models.EmptyStruct} $1 - * @returns {Promise<$models.AliasStruct> & { cancel(): void }} + * @returns {$CancellablePromise<$models.AliasStruct>} */ export function Greet($0, $1) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, $0, $1)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { - return $$createType6($result); + return $Call.ByID(1411160069, $0, $1).then(/** @type {($result: any) => any} */(($result) => { + return $$createType7($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions const $$createType0 = $models.Person.createFrom; const $$createType1 = $models.GenericPerson.createFrom($Create.Any); const $$createType2 = nobindingshere$0.personImpl.createFrom; -const $$createType3 = $Create.Array($Create.Any); +const $$createType3 = $models.AliasGroup.createFrom; const $$createType4 = $Create.Array($Create.Any); -const $$createType5 = $Create.Struct({ - "NoMoreIdeas": $$createType4, -}); +const $$createType5 = $Create.Array($Create.Any); const $$createType6 = $Create.Struct({ - "Foo": $$createType3, - "Other": $$createType5, + "NoMoreIdeas": $$createType5, +}); +const $$createType7 = $Create.Struct({ + "Foo": $$createType4, + "Other": $$createType6, }); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js index 10aa9e917..4278c7958 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js @@ -8,11 +8,15 @@ export { }; export { + AliasGroup, AliasedPerson, EmptyStruct, GenericPerson, + GenericPersonAlias, + IndirectPersonAlias, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; import * as $models from "./models.js"; @@ -33,6 +37,24 @@ import * as $models from "./models.js"; * @typedef {$models.EmptyAliasStruct} EmptyAliasStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {$models.GenericAlias} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {$models.GenericMapAlias} GenericMapAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {$models.GenericPtrAlias} GenericPtrAlias + */ + /** * Another struct alias. * @typedef {$models.OtherAliasStruct} OtherAliasStruct diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js index 5c69d0005..3de57786d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js @@ -4,13 +4,121 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * A nice type Alias. * @typedef {number} Alias */ +/** + * A class whose fields have various aliased types. + */ +export class AliasGroup { + /** + * Creates a new AliasGroup instance. + * @param {Partial} [$$source = {}] - The source object to create the AliasGroup. + */ + constructor($$source = {}) { + if (!("GAi" in $$source)) { + /** + * @member + * @type {GenericAlias} + */ + this["GAi"] = 0; + } + if (!("GAP" in $$source)) { + /** + * @member + * @type {GenericAlias>} + */ + this["GAP"] = (new GenericPerson()); + } + if (!("GPAs" in $$source)) { + /** + * @member + * @type {GenericPtrAlias} + */ + this["GPAs"] = null; + } + if (!("GPAP" in $$source)) { + /** + * @member + * @type {GenericPtrAlias>} + */ + this["GPAP"] = null; + } + if (!("GMA" in $$source)) { + /** + * @member + * @type {GenericMapAlias} + */ + this["GMA"] = {}; + } + if (!("GPA" in $$source)) { + /** + * @member + * @type {GenericPersonAlias} + */ + this["GPA"] = (new GenericPersonAlias()); + } + if (!("IPA" in $$source)) { + /** + * @member + * @type {IndirectPersonAlias} + */ + this["IPA"] = (new IndirectPersonAlias()); + } + if (!("TPIPA" in $$source)) { + /** + * @member + * @type {TPIndirectPersonAlias} + */ + this["TPIPA"] = (new TPIndirectPersonAlias()); + } + + Object.assign(this, $$source); + } + + /** + * Creates a new AliasGroup instance from a string or object. + * @param {any} [$$source = {}] + * @returns {AliasGroup} + */ + static createFrom($$source = {}) { + const $$createField1_0 = $$createType0; + const $$createField2_0 = $$createType2; + const $$createField3_0 = $$createType5; + const $$createField4_0 = $$createType6; + const $$createField5_0 = $$createType8; + const $$createField6_0 = $$createType8; + const $$createField7_0 = $$createType0; + let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; + if ("GAP" in $$parsedSource) { + $$parsedSource["GAP"] = $$createField1_0($$parsedSource["GAP"]); + } + if ("GPAs" in $$parsedSource) { + $$parsedSource["GPAs"] = $$createField2_0($$parsedSource["GPAs"]); + } + if ("GPAP" in $$parsedSource) { + $$parsedSource["GPAP"] = $$createField3_0($$parsedSource["GPAP"]); + } + if ("GMA" in $$parsedSource) { + $$parsedSource["GMA"] = $$createField4_0($$parsedSource["GMA"]); + } + if ("GPA" in $$parsedSource) { + $$parsedSource["GPA"] = $$createField5_0($$parsedSource["GPA"]); + } + if ("IPA" in $$parsedSource) { + $$parsedSource["IPA"] = $$createField6_0($$parsedSource["IPA"]); + } + if ("TPIPA" in $$parsedSource) { + $$parsedSource["TPIPA"] = $$createField7_0($$parsedSource["TPIPA"]); + } + return new AliasGroup(/** @type {Partial} */($$parsedSource)); + } +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -51,6 +159,18 @@ export class EmptyStruct { } } +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {T} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {{ [_: string]: U }} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T @@ -83,7 +203,7 @@ export class GenericPerson { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class GenericPerson. - * @template T + * @template [T=any] * @param {(source: any) => T} $$createParamT * @returns {($$source?: any) => GenericPerson} */ @@ -99,6 +219,33 @@ export class GenericPerson { } } +/** + * A generic alias that wraps a generic struct. + */ +export const GenericPersonAlias = GenericPerson; + +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {GenericPerson[]>} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {GenericAlias | null} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export const IndirectPersonAlias = GenericPersonAlias; + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {GenericPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {Object} OtherAliasStruct @@ -164,3 +311,24 @@ export const StrangelyAliasedPerson = Person; * Another class alias, but ordered after its aliased class. * @typedef {Person} StrangelyAliasedPerson */ + +/** + * An alias that wraps a class through a typeparam alias. + */ +export const TPIndirectPersonAlias = GenericPerson; + +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {GenericAlias>} TPIndirectPersonAlias + */ + +// Private type creation functions +const $$createType0 = GenericPerson.createFrom($Create.Any); +const $$createType1 = $Create.Array($Create.Any); +const $$createType2 = $Create.Nullable($$createType1); +const $$createType3 = $Create.Array($Create.Any); +const $$createType4 = GenericPerson.createFrom($$createType3); +const $$createType5 = $Create.Nullable($$createType4); +const $$createType6 = $Create.Map($Create.Any, $Create.Any); +const $$createType7 = $Create.Array($Create.Any); +const $$createType8 = GenericPerson.createFrom($$createType7); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js index b4d6bd47d..42219054f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod() { - let $resultPromise = /** @type {any} */($Call.ByID(2241101727)); - return $resultPromise; + return $Call.ByID(2241101727); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js index 389469d63..5e27fbc9e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod2() { - let $resultPromise = /** @type {any} */($Call.ByID(1556848345)); - return $resultPromise; + return $Call.ByID(1556848345); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js index 91b7651a8..fa634943d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {$models.Person} person * @param {$models.Embedded1} emb - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(person, emb) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, person, emb)); - return $resultPromise; + return $Call.ByID(1411160069, person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js index d6da8c762..7a0edf1c7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Embedded1 { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js index 6298ac99b..35fac10f2 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -25,17 +25,14 @@ import * as $models from "./models.js"; * @param {{ [_: `${number}`]: boolean | null }} assoc * @param {(number | null)[]} $4 * @param {string[]} other - * @returns {Promise<[$models.Person, any, number[]]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, any, number[]]>} */ export function Greet(str, people, $2, assoc, $4, ...other) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, str, people, $2, assoc, $4, other)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1411160069, str, people, $2, assoc, $4, other).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[2] = $$createType1($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js index 70a01e64c..82af81baf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Person represents a person diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js index 3ad458498..29255dd9c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,17 +17,14 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.StructA, $models.StructC]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.StructA, $models.StructC]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByID(440020721)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(440020721).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js index d101a661f..f24f5a2c9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class StructA { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js index 428da2dbd..faf090884 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,17 +17,14 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByID(440020721)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(440020721).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType9($result[1]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js index f4a68bd4b..47d41f572 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * @typedef {Cyclic | null} Alias diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js index b1523d411..fce17fb1d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.InternalModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByID(538079117, $0)); - return $resultPromise; + return $Call.ByID(538079117, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js index fad4870ca..291a3cecf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * An exported but internal model. diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js index b38ff6238..274f4eed4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Dummy { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js index 8a2f4b65b..cc7ed89d3 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -12,20 +12,18 @@ import * as otherpackage$0 from "./otherpackage/models.js"; /** * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ function InternalMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByID(3518775569, $0)); - return $resultPromise; + return $Call.ByID(3518775569, $0); } /** * @param {otherpackage$0.Dummy} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function VisibleMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByID(474018228, $0)); - return $resultPromise; + return $Call.ByID(474018228, $0); } /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js index 325ddfe88..d3f53be87 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.unexportedModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByID(37626172, $0)); - return $resultPromise; + return $Call.ByID(37626172, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js index 4648c8d37..a178744b9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js @@ -9,50 +9,45 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Comment 1. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method1() { - let $resultPromise = /** @type {any} */($Call.ByID(841558284)); - return $resultPromise; + return $Call.ByID(841558284); } /** * Comment 2. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method2() { - let $resultPromise = /** @type {any} */($Call.ByID(891891141)); - return $resultPromise; + return $Call.ByID(891891141); } /** * Comment 3a. * Comment 3b. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method3() { - let $resultPromise = /** @type {any} */($Call.ByID(875113522)); - return $resultPromise; + return $Call.ByID(875113522); } /** * Comment 4. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method4() { - let $resultPromise = /** @type {any} */($Call.ByID(791225427)); - return $resultPromise; + return $Call.ByID(791225427); } /** * Comment 5. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method5() { - let $resultPromise = /** @type {any} */($Call.ByID(774447808)); - return $resultPromise; + return $Call.ByID(774447808); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js index 61730be16..ed402a8b2 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,25 +19,21 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {string} name * @param {$models.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name, title)); - return $resultPromise; + return $Call.ByID(1411160069, name, title); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1661412647, name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js index cad356265..2c5df9ee7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Age is an integer with some predefined values diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js index 0de466bab..fbc2294e9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as services$0 from "./services/models.js"; * Greet does XYZ * @param {string} name * @param {services$0.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name, title)); - return $resultPromise; + return $Call.ByID(1411160069, name, title); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js index 0e7acabe2..65ebfa2f7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * @readonly diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js index 5f8cf55b5..50737a34b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1661412647, name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js index 860939563..0ab295133 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js index 447b0a588..1866aca09 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(2007737399)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2007737399).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js index 5f8cf55b5..50737a34b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1661412647, name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js index 5b28ee2f6..29a95e11e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js index 4bece70b6..293a2f0bb 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(2447353446)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2447353446).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js index 0c282e914..e50a4a6ab 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js index d20ce5791..9dfe48511 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js index 4e54dc0c8..1bc7cb45b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js @@ -9,24 +9,22 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GreetWithContext(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1310150960, name)); - return $resultPromise; + return $Call.ByID(1310150960, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js index d20ce5791..9dfe48511 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js index 3c20ebc43..9fd9745c1 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js @@ -13,6 +13,16 @@ export { import * as $models from "./models.js"; +/** + * @template S + * @typedef {$models.BasicCstrAlias} BasicCstrAlias + */ + +/** + * @template R + * @typedef {$models.ComparableCstrAlias} ComparableCstrAlias + */ + /** * @typedef {$models.EmbeddedCustomInterface} EmbeddedCustomInterface */ @@ -37,6 +47,31 @@ import * as $models from "./models.js"; * @typedef {$models.EmbeddedValuePtr} EmbeddedValuePtr */ +/** + * @template U + * @typedef {$models.GoodTildeCstrAlias} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {$models.InterfaceCstrAlias} InterfaceCstrAlias + */ + +/** + * @template X + * @typedef {$models.MixedCstrAlias} MixedCstrAlias + */ + +/** + * @template V + * @typedef {$models.NonBasicCstrAlias} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {$models.PointableCstrAlias} PointableCstrAlias + */ + /** * @typedef {$models.PointerAlias} PointerAlias */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js index c715dd484..1dc5bfc38 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js @@ -4,7 +4,17 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; + +/** + * @template S + * @typedef {S} BasicCstrAlias + */ + +/** + * @template R + * @typedef {R} ComparableCstrAlias + */ /** * @typedef {string} EmbeddedCustomInterface @@ -30,6 +40,16 @@ import {Create as $Create} from "/wails/runtime.js"; * @typedef {string} EmbeddedValuePtr */ +/** + * @template U + * @typedef {U} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {Y} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z */ @@ -751,6 +771,454 @@ export class Maps { */ this["TPZPtr"] = {}; } + if (!("GAR" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAR"] = {}; + } + if (!("GARPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GARPtr"] = {}; + } + if (!("GAS" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAS"] = {}; + } + if (!("GASPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GASPtr"] = {}; + } + if (!("GAT" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAT"] = {}; + } + if (!("GATPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GATPtr"] = {}; + } + if (!("GAU" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAU"] = {}; + } + if (!("GAUPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAUPtr"] = {}; + } + if (!("GAV" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAV"] = {}; + } + if (!("GAVPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAVPtr"] = {}; + } + if (!("GAW" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAW"] = {}; + } + if (!("GAWPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAWPtr"] = {}; + } + if (!("GAX" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAX"] = {}; + } + if (!("GAXPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAXPtr"] = {}; + } + if (!("GAY" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAY"] = {}; + } + if (!("GAYPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAYPtr"] = {}; + } + if (!("GAZ" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAZ"] = {}; + } + if (!("GAZPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAZPtr"] = {}; + } + if (!("GACi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GACi"] = {}; + } + if (!("GACV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: ComparableCstrAlias]: number }} + */ + this["GACV"] = {}; + } + if (!("GACP" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GACP"] = {}; + } + if (!("GACiPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GACiPtr"] = {}; + } + if (!("GACVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GACVPtr"] = {}; + } + if (!("GACPPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GACPPtr"] = {}; + } + if (!("GABi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GABi"] = {}; + } + if (!("GABs" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: BasicCstrAlias]: number }} + */ + this["GABs"] = {}; + } + if (!("GABiPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABiPtr"] = {}; + } + if (!("GABT" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABT"] = {}; + } + if (!("GABTPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABTPtr"] = {}; + } + if (!("GAGT" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: GoodTildeCstrAlias]: number }} + */ + this["GAGT"] = {}; + } + if (!("GAGTPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAGTPtr"] = {}; + } + if (!("GANBV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: NonBasicCstrAlias]: number }} + */ + this["GANBV"] = {}; + } + if (!("GANBP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GANBP"] = {}; + } + if (!("GANBVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GANBVPtr"] = {}; + } + if (!("GANBPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GANBPPtr"] = {}; + } + if (!("GAPlV1" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlV1"] = {}; + } + if (!("GAPlV2" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlV2"] = {}; + } + if (!("GAPlP1" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlP1"] = {}; + } + if (!("GAPlP2" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlP2"] = {}; + } + if (!("GAPlVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlVPtr"] = {}; + } + if (!("GAPlPPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlPPtr"] = {}; + } + if (!("GAMi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GAMi"] = {}; + } + if (!("GAMS" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: MixedCstrAlias]: number }} + */ + this["GAMS"] = {}; + } + if (!("GAMV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: MixedCstrAlias]: number }} + */ + this["GAMV"] = {}; + } + if (!("GAMSPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAMSPtr"] = {}; + } + if (!("GAMVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAMVPtr"] = {}; + } + if (!("GAII" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAII"] = {}; + } + if (!("GAIV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: InterfaceCstrAlias]: number }} + */ + this["GAIV"] = {}; + } + if (!("GAIP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAIP"] = {}; + } + if (!("GAIIPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAIIPtr"] = {}; + } + if (!("GAIVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAIVPtr"] = {}; + } + if (!("GAIPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAIPPtr"] = {}; + } + if (!("GAPrV" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrV"] = {}; + } + if (!("GAPrP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrP"] = {}; + } + if (!("GAPrVPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrVPtr"] = {}; + } + if (!("GAPrPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrPPtr"] = {}; + } Object.assign(this, $$source); } @@ -759,7 +1227,15 @@ export class Maps { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class Maps. - * @template R,S,T,U,V,W,X,Y,Z + * @template [R=any] + * @template [S=any] + * @template [T=any] + * @template [U=any] + * @template [V=any] + * @template [W=any] + * @template [X=any] + * @template [Y=any] + * @template [Z=any] * @param {(source: any) => R} $$createParamR * @param {(source: any) => S} $$createParamS * @param {(source: any) => T} $$createParamT @@ -861,6 +1337,62 @@ export class Maps { const $$createField86_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField87_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField88_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField89_0 = $$createType59($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField90_0 = $$createType60($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField91_0 = $$createType61($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField92_0 = $$createType62($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField93_0 = $$createType63($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField94_0 = $$createType64($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField95_0 = $$createType65($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField96_0 = $$createType66($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField97_0 = $$createType67($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField98_0 = $$createType68($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField99_0 = $$createType69($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField100_0 = $$createType70($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField101_0 = $$createType71($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField102_0 = $$createType72($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField103_0 = $$createType73($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField104_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField105_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField106_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField107_0 = $$createType1; + const $$createField108_0 = $$createType15; + const $$createField109_0 = $$createType17; + const $$createField110_0 = $$createType8; + const $$createField111_0 = $$createType16; + const $$createField112_0 = $$createType18; + const $$createField113_0 = $$createType1; + const $$createField114_0 = $$createType7; + const $$createField115_0 = $$createType8; + const $$createField116_0 = $$createType77; + const $$createField117_0 = $$createType78; + const $$createField118_0 = $$createType15; + const $$createField119_0 = $$createType16; + const $$createField120_0 = $$createType15; + const $$createField121_0 = $$createType18; + const $$createField122_0 = $$createType16; + const $$createField123_0 = $$createType53; + const $$createField124_0 = $$createType15; + const $$createField125_0 = $$createType16; + const $$createField126_0 = $$createType17; + const $$createField127_0 = $$createType18; + const $$createField128_0 = $$createType16; + const $$createField129_0 = $$createType18; + const $$createField130_0 = $$createType2; + const $$createField131_0 = $$createType42; + const $$createField132_0 = $$createType15; + const $$createField133_0 = $$createType79; + const $$createField134_0 = $$createType16; + const $$createField135_0 = $$createType23; + const $$createField136_0 = $$createType15; + const $$createField137_0 = $$createType18; + const $$createField138_0 = $$createType24; + const $$createField139_0 = $$createType16; + const $$createField140_0 = $$createType53; + const $$createField141_0 = $$createType16; + const $$createField142_0 = $$createType18; + const $$createField143_0 = $$createType48; + const $$createField144_0 = $$createType53; return ($$source = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; if ("Bool" in $$parsedSource) { @@ -1130,11 +1662,194 @@ export class Maps { if ("TPZPtr" in $$parsedSource) { $$parsedSource["TPZPtr"] = $$createField88_0($$parsedSource["TPZPtr"]); } + if ("GAR" in $$parsedSource) { + $$parsedSource["GAR"] = $$createField89_0($$parsedSource["GAR"]); + } + if ("GARPtr" in $$parsedSource) { + $$parsedSource["GARPtr"] = $$createField90_0($$parsedSource["GARPtr"]); + } + if ("GAS" in $$parsedSource) { + $$parsedSource["GAS"] = $$createField91_0($$parsedSource["GAS"]); + } + if ("GASPtr" in $$parsedSource) { + $$parsedSource["GASPtr"] = $$createField92_0($$parsedSource["GASPtr"]); + } + if ("GAT" in $$parsedSource) { + $$parsedSource["GAT"] = $$createField93_0($$parsedSource["GAT"]); + } + if ("GATPtr" in $$parsedSource) { + $$parsedSource["GATPtr"] = $$createField94_0($$parsedSource["GATPtr"]); + } + if ("GAU" in $$parsedSource) { + $$parsedSource["GAU"] = $$createField95_0($$parsedSource["GAU"]); + } + if ("GAUPtr" in $$parsedSource) { + $$parsedSource["GAUPtr"] = $$createField96_0($$parsedSource["GAUPtr"]); + } + if ("GAV" in $$parsedSource) { + $$parsedSource["GAV"] = $$createField97_0($$parsedSource["GAV"]); + } + if ("GAVPtr" in $$parsedSource) { + $$parsedSource["GAVPtr"] = $$createField98_0($$parsedSource["GAVPtr"]); + } + if ("GAW" in $$parsedSource) { + $$parsedSource["GAW"] = $$createField99_0($$parsedSource["GAW"]); + } + if ("GAWPtr" in $$parsedSource) { + $$parsedSource["GAWPtr"] = $$createField100_0($$parsedSource["GAWPtr"]); + } + if ("GAX" in $$parsedSource) { + $$parsedSource["GAX"] = $$createField101_0($$parsedSource["GAX"]); + } + if ("GAXPtr" in $$parsedSource) { + $$parsedSource["GAXPtr"] = $$createField102_0($$parsedSource["GAXPtr"]); + } + if ("GAY" in $$parsedSource) { + $$parsedSource["GAY"] = $$createField103_0($$parsedSource["GAY"]); + } + if ("GAYPtr" in $$parsedSource) { + $$parsedSource["GAYPtr"] = $$createField104_0($$parsedSource["GAYPtr"]); + } + if ("GAZ" in $$parsedSource) { + $$parsedSource["GAZ"] = $$createField105_0($$parsedSource["GAZ"]); + } + if ("GAZPtr" in $$parsedSource) { + $$parsedSource["GAZPtr"] = $$createField106_0($$parsedSource["GAZPtr"]); + } + if ("GACi" in $$parsedSource) { + $$parsedSource["GACi"] = $$createField107_0($$parsedSource["GACi"]); + } + if ("GACV" in $$parsedSource) { + $$parsedSource["GACV"] = $$createField108_0($$parsedSource["GACV"]); + } + if ("GACP" in $$parsedSource) { + $$parsedSource["GACP"] = $$createField109_0($$parsedSource["GACP"]); + } + if ("GACiPtr" in $$parsedSource) { + $$parsedSource["GACiPtr"] = $$createField110_0($$parsedSource["GACiPtr"]); + } + if ("GACVPtr" in $$parsedSource) { + $$parsedSource["GACVPtr"] = $$createField111_0($$parsedSource["GACVPtr"]); + } + if ("GACPPtr" in $$parsedSource) { + $$parsedSource["GACPPtr"] = $$createField112_0($$parsedSource["GACPPtr"]); + } + if ("GABi" in $$parsedSource) { + $$parsedSource["GABi"] = $$createField113_0($$parsedSource["GABi"]); + } + if ("GABs" in $$parsedSource) { + $$parsedSource["GABs"] = $$createField114_0($$parsedSource["GABs"]); + } + if ("GABiPtr" in $$parsedSource) { + $$parsedSource["GABiPtr"] = $$createField115_0($$parsedSource["GABiPtr"]); + } + if ("GABT" in $$parsedSource) { + $$parsedSource["GABT"] = $$createField116_0($$parsedSource["GABT"]); + } + if ("GABTPtr" in $$parsedSource) { + $$parsedSource["GABTPtr"] = $$createField117_0($$parsedSource["GABTPtr"]); + } + if ("GAGT" in $$parsedSource) { + $$parsedSource["GAGT"] = $$createField118_0($$parsedSource["GAGT"]); + } + if ("GAGTPtr" in $$parsedSource) { + $$parsedSource["GAGTPtr"] = $$createField119_0($$parsedSource["GAGTPtr"]); + } + if ("GANBV" in $$parsedSource) { + $$parsedSource["GANBV"] = $$createField120_0($$parsedSource["GANBV"]); + } + if ("GANBP" in $$parsedSource) { + $$parsedSource["GANBP"] = $$createField121_0($$parsedSource["GANBP"]); + } + if ("GANBVPtr" in $$parsedSource) { + $$parsedSource["GANBVPtr"] = $$createField122_0($$parsedSource["GANBVPtr"]); + } + if ("GANBPPtr" in $$parsedSource) { + $$parsedSource["GANBPPtr"] = $$createField123_0($$parsedSource["GANBPPtr"]); + } + if ("GAPlV1" in $$parsedSource) { + $$parsedSource["GAPlV1"] = $$createField124_0($$parsedSource["GAPlV1"]); + } + if ("GAPlV2" in $$parsedSource) { + $$parsedSource["GAPlV2"] = $$createField125_0($$parsedSource["GAPlV2"]); + } + if ("GAPlP1" in $$parsedSource) { + $$parsedSource["GAPlP1"] = $$createField126_0($$parsedSource["GAPlP1"]); + } + if ("GAPlP2" in $$parsedSource) { + $$parsedSource["GAPlP2"] = $$createField127_0($$parsedSource["GAPlP2"]); + } + if ("GAPlVPtr" in $$parsedSource) { + $$parsedSource["GAPlVPtr"] = $$createField128_0($$parsedSource["GAPlVPtr"]); + } + if ("GAPlPPtr" in $$parsedSource) { + $$parsedSource["GAPlPPtr"] = $$createField129_0($$parsedSource["GAPlPPtr"]); + } + if ("GAMi" in $$parsedSource) { + $$parsedSource["GAMi"] = $$createField130_0($$parsedSource["GAMi"]); + } + if ("GAMS" in $$parsedSource) { + $$parsedSource["GAMS"] = $$createField131_0($$parsedSource["GAMS"]); + } + if ("GAMV" in $$parsedSource) { + $$parsedSource["GAMV"] = $$createField132_0($$parsedSource["GAMV"]); + } + if ("GAMSPtr" in $$parsedSource) { + $$parsedSource["GAMSPtr"] = $$createField133_0($$parsedSource["GAMSPtr"]); + } + if ("GAMVPtr" in $$parsedSource) { + $$parsedSource["GAMVPtr"] = $$createField134_0($$parsedSource["GAMVPtr"]); + } + if ("GAII" in $$parsedSource) { + $$parsedSource["GAII"] = $$createField135_0($$parsedSource["GAII"]); + } + if ("GAIV" in $$parsedSource) { + $$parsedSource["GAIV"] = $$createField136_0($$parsedSource["GAIV"]); + } + if ("GAIP" in $$parsedSource) { + $$parsedSource["GAIP"] = $$createField137_0($$parsedSource["GAIP"]); + } + if ("GAIIPtr" in $$parsedSource) { + $$parsedSource["GAIIPtr"] = $$createField138_0($$parsedSource["GAIIPtr"]); + } + if ("GAIVPtr" in $$parsedSource) { + $$parsedSource["GAIVPtr"] = $$createField139_0($$parsedSource["GAIVPtr"]); + } + if ("GAIPPtr" in $$parsedSource) { + $$parsedSource["GAIPPtr"] = $$createField140_0($$parsedSource["GAIPPtr"]); + } + if ("GAPrV" in $$parsedSource) { + $$parsedSource["GAPrV"] = $$createField141_0($$parsedSource["GAPrV"]); + } + if ("GAPrP" in $$parsedSource) { + $$parsedSource["GAPrP"] = $$createField142_0($$parsedSource["GAPrP"]); + } + if ("GAPrVPtr" in $$parsedSource) { + $$parsedSource["GAPrVPtr"] = $$createField143_0($$parsedSource["GAPrVPtr"]); + } + if ("GAPrPPtr" in $$parsedSource) { + $$parsedSource["GAPrPPtr"] = $$createField144_0($$parsedSource["GAPrPPtr"]); + } return new Maps(/** @type {Partial>} */($$parsedSource)); }; } } +/** + * @template X + * @typedef {X} MixedCstrAlias + */ + +/** + * @template V + * @typedef {V} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {W} PointableCstrAlias + */ + /** * @typedef {PointerTextMarshaler} PointerAlias */ @@ -1219,21 +1934,24 @@ const $$createType55 = $Create.Map($Create.Any, $Create.Any); const $$createType56 = $Create.Map($Create.Any, $Create.Any); const $$createType57 = $Create.Map($Create.Any, $Create.Any); const $$createType58 = $Create.Map($Create.Any, $Create.Any); -const $$createType59 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType60 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType61 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType62 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType63 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType64 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType65 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType66 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType67 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType68 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType69 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType70 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType71 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType72 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType73 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType74 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType75 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType76 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); +const $$createType59 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType60 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType61 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType62 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType63 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType64 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType65 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType66 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType67 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType68 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType69 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType70 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType71 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType72 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType73 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType74 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType75 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType76 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType77 = $Create.Map($Create.Any, $Create.Any); +const $$createType78 = $Create.Map($Create.Any, $Create.Any); +const $$createType79 = $Create.Map($Create.Any, $Create.Any); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js index bca8b3182..870b2804b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js @@ -4,22 +4,19 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByID(4021345184)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(4021345184).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js index 1871e9492..77fe552ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js index 8e10d60e3..5b415f83e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js @@ -4,22 +4,19 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Data> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Data>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByID(4021345184)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(4021345184).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js index f88aa955a..b42e223fa 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -45,7 +45,7 @@ export class HowDifferent { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class HowDifferent. - * @template How + * @template [How=any] * @param {(source: any) => How} $$createParamHow * @returns {($$source?: any) => HowDifferent} */ @@ -175,7 +175,7 @@ export const PrivatePerson = personImpl; */ // Private type creation functions -const $$createType0 = ($$createParamHow) => $Create.Map($Create.Any, $$createParamHow); -const $$createType1 = ($$createParamHow) => $Create.Array($$createType0($$createParamHow)); +const $$createType0 = /** @type {(...args: any[]) => any} */(($$createParamHow) => $Create.Map($Create.Any, $$createParamHow)); +const $$createType1 = /** @type {(...args: any[]) => any} */(($$createParamHow) => $Create.Array($$createType0($$createParamHow))); const $$createType2 = other$0.OtherPerson.createFrom($Create.Any); const $$createType3 = $Create.Array($$createType2); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js index c10d33908..89992cacf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * OtherPerson is like a person, but different. @@ -40,7 +40,7 @@ export class OtherPerson { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class OtherPerson. - * @template T + * @template [T=any] * @param {(source: any) => T} $$createParamT * @returns {($$source?: any) => OtherPerson} */ @@ -57,4 +57,4 @@ export class OtherPerson { } // Private type creation functions -const $$createType0 = ($$createParamT) => $Create.Array($$createParamT); +const $$createType0 = /** @type {(...args: any[]) => any} */(($$createParamT) => $Create.Array($$createParamT)); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js index 9971a1759..36b25c183 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(3606939272)); - return $resultPromise; + return $Call.ByID(3606939272); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js index 9613f1c61..a87ccf6c4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,27 +17,23 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByID(2124352079)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2124352079).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(4281222271)); - return $resultPromise; + return $Call.ByID(4281222271); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js index 6b333bbd2..5fb44fbc6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(3566862802)); - return $resultPromise; + return $Call.ByID(3566862802); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js index bac3669ab..5ec6c820e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,27 +17,23 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByID(2590614085)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2590614085).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(773650321)); - return $resultPromise; + return $Call.ByID(773650321); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js index 70596fc61..8afbd8b3a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet($0) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, $0)); - return $resultPromise; + return $Call.ByID(1411160069, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js index 0c282e914..e50a4a6ab 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js index da27da53b..f017774d8 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByID(4249972365)); - return $resultPromise; + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js index 0c282e914..e50a4a6ab 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js index da27da53b..f017774d8 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByID(4249972365)); - return $resultPromise; + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js index 5f8cf55b5..50737a34b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1661412647, name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js index e187cce22..04771d2ca 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js index d61e9e689..24dc0334e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(3568225479)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(3568225479).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js index cb53251ed..855602e98 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,413 +17,358 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3862002418, $in)); - return $resultPromise; + return $Call.ByID(3862002418, $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2424639793, $in)); - return $resultPromise; + return $Call.ByID(2424639793, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3132595881, $in)); - return $resultPromise; + return $Call.ByID(3132595881, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2182412247, $in)); - return $resultPromise; + return $Call.ByID(2182412247, $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3306292566, $in)); - return $resultPromise; + return $Call.ByID(3306292566, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1754277916, $in)); - return $resultPromise; + return $Call.ByID(1754277916, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1909469092, $in)); - return $resultPromise; + return $Call.ByID(1909469092, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(4251088558, $in)); - return $resultPromise; + return $Call.ByID(4251088558, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1343888303, $in)); - return $resultPromise; + return $Call.ByID(1343888303, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2205561041, $in)); - return $resultPromise; + return $Call.ByID(2205561041, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(572240879, $in)); - return $resultPromise; + return $Call.ByID(572240879, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2189402897, $in)); - return $resultPromise; + return $Call.ByID(2189402897, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(642881729, $in)); - return $resultPromise; + return $Call.ByID(642881729, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1066151743, $in)); - return $resultPromise; + return $Call.ByID(1066151743, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2718999663, $in)); - return $resultPromise; + return $Call.ByID(2718999663, $in); } /** * @param {{ [_: `${number}`]: number }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2386486356, $in)); - return $resultPromise; + return $Call.ByID(2386486356, $in); } /** * @param {{ [_: `${number}`]: number | null }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2163571325, $in)); - return $resultPromise; + return $Call.ByID(2163571325, $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2900172572, $in)); - return $resultPromise; + return $Call.ByID(2900172572, $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise<{ [_: `${number}`]: number[] }> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] }>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(881980169, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(881980169, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByID(1075577233)); - return $resultPromise; + return $Call.ByID(1075577233); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3589606958, $in)); - return $resultPromise; + return $Call.ByID(3589606958, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(224675106, $in)); - return $resultPromise; + return $Call.ByID(224675106, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2124953624, $in)); - return $resultPromise; + return $Call.ByID(2124953624, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3516977899, $in)); - return $resultPromise; + return $Call.ByID(3516977899, $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(229603958, $in)); - return $resultPromise; + return $Call.ByID(229603958, $in); } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3678582682, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(3678582682, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(319259595, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(319259595, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(383995060, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(383995060, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1091960237, $in)); - return $resultPromise; + return $Call.ByID(1091960237, $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3835643147, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(3835643147, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType3($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2447692557, $in)); - return $resultPromise; + return $Call.ByID(2447692557, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2943477349, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2943477349, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType4($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3401034892, $in)); - return $resultPromise; + return $Call.ByID(3401034892, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1236957573, $in)); - return $resultPromise; + return $Call.ByID(1236957573, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1160383782, $in)); - return $resultPromise; + return $Call.ByID(1160383782, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1739300671, $in)); - return $resultPromise; + return $Call.ByID(1739300671, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(793803239, $in)); - return $resultPromise; + return $Call.ByID(793803239, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1403757716, $in)); - return $resultPromise; + return $Call.ByID(1403757716, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2988345717, $in)); - return $resultPromise; + return $Call.ByID(2988345717, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(518250834, $in)); - return $resultPromise; + return $Call.ByID(518250834, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2836661285, $in)); - return $resultPromise; + return $Call.ByID(2836661285, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1367187362, $in)); - return $resultPromise; + return $Call.ByID(1367187362, $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js index 660f38b29..69c96370a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js index cb53251ed..855602e98 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,413 +17,358 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3862002418, $in)); - return $resultPromise; + return $Call.ByID(3862002418, $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2424639793, $in)); - return $resultPromise; + return $Call.ByID(2424639793, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3132595881, $in)); - return $resultPromise; + return $Call.ByID(3132595881, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2182412247, $in)); - return $resultPromise; + return $Call.ByID(2182412247, $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3306292566, $in)); - return $resultPromise; + return $Call.ByID(3306292566, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1754277916, $in)); - return $resultPromise; + return $Call.ByID(1754277916, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1909469092, $in)); - return $resultPromise; + return $Call.ByID(1909469092, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(4251088558, $in)); - return $resultPromise; + return $Call.ByID(4251088558, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1343888303, $in)); - return $resultPromise; + return $Call.ByID(1343888303, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2205561041, $in)); - return $resultPromise; + return $Call.ByID(2205561041, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(572240879, $in)); - return $resultPromise; + return $Call.ByID(572240879, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2189402897, $in)); - return $resultPromise; + return $Call.ByID(2189402897, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(642881729, $in)); - return $resultPromise; + return $Call.ByID(642881729, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1066151743, $in)); - return $resultPromise; + return $Call.ByID(1066151743, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2718999663, $in)); - return $resultPromise; + return $Call.ByID(2718999663, $in); } /** * @param {{ [_: `${number}`]: number }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2386486356, $in)); - return $resultPromise; + return $Call.ByID(2386486356, $in); } /** * @param {{ [_: `${number}`]: number | null }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2163571325, $in)); - return $resultPromise; + return $Call.ByID(2163571325, $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2900172572, $in)); - return $resultPromise; + return $Call.ByID(2900172572, $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise<{ [_: `${number}`]: number[] }> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] }>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(881980169, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(881980169, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByID(1075577233)); - return $resultPromise; + return $Call.ByID(1075577233); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3589606958, $in)); - return $resultPromise; + return $Call.ByID(3589606958, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(224675106, $in)); - return $resultPromise; + return $Call.ByID(224675106, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2124953624, $in)); - return $resultPromise; + return $Call.ByID(2124953624, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3516977899, $in)); - return $resultPromise; + return $Call.ByID(3516977899, $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(229603958, $in)); - return $resultPromise; + return $Call.ByID(229603958, $in); } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3678582682, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(3678582682, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(319259595, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(319259595, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(383995060, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(383995060, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1091960237, $in)); - return $resultPromise; + return $Call.ByID(1091960237, $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3835643147, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(3835643147, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType3($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2447692557, $in)); - return $resultPromise; + return $Call.ByID(2447692557, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2943477349, $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(2943477349, $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType4($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3401034892, $in)); - return $resultPromise; + return $Call.ByID(3401034892, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1236957573, $in)); - return $resultPromise; + return $Call.ByID(1236957573, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1160383782, $in)); - return $resultPromise; + return $Call.ByID(1160383782, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1739300671, $in)); - return $resultPromise; + return $Call.ByID(1739300671, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(793803239, $in)); - return $resultPromise; + return $Call.ByID(793803239, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1403757716, $in)); - return $resultPromise; + return $Call.ByID(1403757716, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2988345717, $in)); - return $resultPromise; + return $Call.ByID(2988345717, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(518250834, $in)); - return $resultPromise; + return $Call.ByID(518250834, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2836661285, $in)); - return $resultPromise; + return $Call.ByID(2836661285, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1367187362, $in)); - return $resultPromise; + return $Call.ByID(1367187362, $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js index 660f38b29..69c96370a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js index d20ce5791..9dfe48511 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js index d20ce5791..9dfe48511 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js index 5f8cf55b5..50737a34b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1661412647, name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js index 0daca427b..d7bfe75cf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js index 63319bf06..de3c9d51d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(1491748400)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByID(1491748400).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/warnings.log b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/warnings.log +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=false/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/json/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/json/models.js index b7e840816..96abf0ef1 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/json/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/json/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Marshaler is the interface implemented by types that diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/models.js index bbabe728a..59cfef5bd 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/encoding/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * TextMarshaler is the interface implemented by an object that can diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js index 41565b11b..2352f40bc 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -22,81 +22,76 @@ import * as $models from "./models.js"; /** * Get someone. * @param {$models.Alias} aliasValue - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function Get(aliasValue) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Get", aliasValue)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.Get", aliasValue).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * Apparently, aliases are all the rage right now. * @param {$models.AliasedPerson} p - * @returns {Promise<$models.StrangelyAliasedPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.StrangelyAliasedPerson>} */ export function GetButAliased(p) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButAliased", p)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.GetButAliased", p).then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * Get someone quite different. - * @returns {Promise<$models.GenericPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.GenericPerson>} */ export function GetButDifferent() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButDifferent")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.GetButDifferent").then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GetButForeignPrivateAlias() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButForeignPrivateAlias")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.GetButForeignPrivateAlias").then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; +} + +/** + * @returns {$CancellablePromise<$models.AliasGroup>} + */ +export function GetButGenericAliases() { + return $Call.ByName("main.GreetService.GetButGenericAliases").then(/** @type {($result: any) => any} */(($result) => { + return $$createType3($result); + })); } /** * Greet a lot of unusual things. * @param {$models.EmptyAliasStruct} $0 * @param {$models.EmptyStruct} $1 - * @returns {Promise<$models.AliasStruct> & { cancel(): void }} + * @returns {$CancellablePromise<$models.AliasStruct>} */ export function Greet($0, $1) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", $0, $1)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { - return $$createType6($result); + return $Call.ByName("main.GreetService.Greet", $0, $1).then(/** @type {($result: any) => any} */(($result) => { + return $$createType7($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions const $$createType0 = $models.Person.createFrom; const $$createType1 = $models.GenericPerson.createFrom($Create.Any); const $$createType2 = nobindingshere$0.personImpl.createFrom; -const $$createType3 = $Create.Array($Create.Any); +const $$createType3 = $models.AliasGroup.createFrom; const $$createType4 = $Create.Array($Create.Any); -const $$createType5 = $Create.Struct({ - "NoMoreIdeas": $$createType4, -}); +const $$createType5 = $Create.Array($Create.Any); const $$createType6 = $Create.Struct({ - "Foo": $$createType3, - "Other": $$createType5, + "NoMoreIdeas": $$createType5, +}); +const $$createType7 = $Create.Struct({ + "Foo": $$createType4, + "Other": $$createType6, }); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js index 10aa9e917..4278c7958 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js @@ -8,11 +8,15 @@ export { }; export { + AliasGroup, AliasedPerson, EmptyStruct, GenericPerson, + GenericPersonAlias, + IndirectPersonAlias, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; import * as $models from "./models.js"; @@ -33,6 +37,24 @@ import * as $models from "./models.js"; * @typedef {$models.EmptyAliasStruct} EmptyAliasStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {$models.GenericAlias} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {$models.GenericMapAlias} GenericMapAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {$models.GenericPtrAlias} GenericPtrAlias + */ + /** * Another struct alias. * @typedef {$models.OtherAliasStruct} OtherAliasStruct diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js index 5c69d0005..3de57786d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js @@ -4,13 +4,121 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * A nice type Alias. * @typedef {number} Alias */ +/** + * A class whose fields have various aliased types. + */ +export class AliasGroup { + /** + * Creates a new AliasGroup instance. + * @param {Partial} [$$source = {}] - The source object to create the AliasGroup. + */ + constructor($$source = {}) { + if (!("GAi" in $$source)) { + /** + * @member + * @type {GenericAlias} + */ + this["GAi"] = 0; + } + if (!("GAP" in $$source)) { + /** + * @member + * @type {GenericAlias>} + */ + this["GAP"] = (new GenericPerson()); + } + if (!("GPAs" in $$source)) { + /** + * @member + * @type {GenericPtrAlias} + */ + this["GPAs"] = null; + } + if (!("GPAP" in $$source)) { + /** + * @member + * @type {GenericPtrAlias>} + */ + this["GPAP"] = null; + } + if (!("GMA" in $$source)) { + /** + * @member + * @type {GenericMapAlias} + */ + this["GMA"] = {}; + } + if (!("GPA" in $$source)) { + /** + * @member + * @type {GenericPersonAlias} + */ + this["GPA"] = (new GenericPersonAlias()); + } + if (!("IPA" in $$source)) { + /** + * @member + * @type {IndirectPersonAlias} + */ + this["IPA"] = (new IndirectPersonAlias()); + } + if (!("TPIPA" in $$source)) { + /** + * @member + * @type {TPIndirectPersonAlias} + */ + this["TPIPA"] = (new TPIndirectPersonAlias()); + } + + Object.assign(this, $$source); + } + + /** + * Creates a new AliasGroup instance from a string or object. + * @param {any} [$$source = {}] + * @returns {AliasGroup} + */ + static createFrom($$source = {}) { + const $$createField1_0 = $$createType0; + const $$createField2_0 = $$createType2; + const $$createField3_0 = $$createType5; + const $$createField4_0 = $$createType6; + const $$createField5_0 = $$createType8; + const $$createField6_0 = $$createType8; + const $$createField7_0 = $$createType0; + let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; + if ("GAP" in $$parsedSource) { + $$parsedSource["GAP"] = $$createField1_0($$parsedSource["GAP"]); + } + if ("GPAs" in $$parsedSource) { + $$parsedSource["GPAs"] = $$createField2_0($$parsedSource["GPAs"]); + } + if ("GPAP" in $$parsedSource) { + $$parsedSource["GPAP"] = $$createField3_0($$parsedSource["GPAP"]); + } + if ("GMA" in $$parsedSource) { + $$parsedSource["GMA"] = $$createField4_0($$parsedSource["GMA"]); + } + if ("GPA" in $$parsedSource) { + $$parsedSource["GPA"] = $$createField5_0($$parsedSource["GPA"]); + } + if ("IPA" in $$parsedSource) { + $$parsedSource["IPA"] = $$createField6_0($$parsedSource["IPA"]); + } + if ("TPIPA" in $$parsedSource) { + $$parsedSource["TPIPA"] = $$createField7_0($$parsedSource["TPIPA"]); + } + return new AliasGroup(/** @type {Partial} */($$parsedSource)); + } +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -51,6 +159,18 @@ export class EmptyStruct { } } +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {T} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {{ [_: string]: U }} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T @@ -83,7 +203,7 @@ export class GenericPerson { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class GenericPerson. - * @template T + * @template [T=any] * @param {(source: any) => T} $$createParamT * @returns {($$source?: any) => GenericPerson} */ @@ -99,6 +219,33 @@ export class GenericPerson { } } +/** + * A generic alias that wraps a generic struct. + */ +export const GenericPersonAlias = GenericPerson; + +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {GenericPerson[]>} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {GenericAlias | null} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export const IndirectPersonAlias = GenericPersonAlias; + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {GenericPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {Object} OtherAliasStruct @@ -164,3 +311,24 @@ export const StrangelyAliasedPerson = Person; * Another class alias, but ordered after its aliased class. * @typedef {Person} StrangelyAliasedPerson */ + +/** + * An alias that wraps a class through a typeparam alias. + */ +export const TPIndirectPersonAlias = GenericPerson; + +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {GenericAlias>} TPIndirectPersonAlias + */ + +// Private type creation functions +const $$createType0 = GenericPerson.createFrom($Create.Any); +const $$createType1 = $Create.Array($Create.Any); +const $$createType2 = $Create.Nullable($$createType1); +const $$createType3 = $Create.Array($Create.Any); +const $$createType4 = GenericPerson.createFrom($$createType3); +const $$createType5 = $Create.Nullable($$createType4); +const $$createType6 = $Create.Map($Create.Any, $Create.Any); +const $$createType7 = $Create.Array($Create.Any); +const $$createType8 = GenericPerson.createFrom($$createType7); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js index f038563f2..54e794649 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js index 9a316a10d..f6e8901a9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod2() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js index 7d3bc5c01..b5c320f3d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {$models.Person} person * @param {$models.Embedded1} emb - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(person, emb) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", person, emb)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js index d6da8c762..7a0edf1c7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Embedded1 { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js index 1ea653b33..fae9496c1 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -25,17 +25,14 @@ import * as $models from "./models.js"; * @param {{ [_: `${number}`]: boolean | null }} assoc * @param {(number | null)[]} $4 * @param {string[]} other - * @returns {Promise<[$models.Person, any, number[]]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, any, number[]]>} */ export function Greet(str, people, $2, assoc, $4, ...other) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other).then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[2] = $$createType1($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js index 70a01e64c..82af81baf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Person represents a person diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js index bee868a52..651fd2d97 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,17 +17,14 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.StructA, $models.StructC]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.StructA, $models.StructC]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MakeCycles")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.MakeCycles").then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js index d101a661f..f24f5a2c9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class StructA { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js index 1880b7b23..b4cbaa216 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,17 +17,14 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MakeCycles")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.MakeCycles").then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType9($result[1]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js index f4a68bd4b..47d41f572 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * @typedef {Cyclic | null} Alias diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js index c2d455ec3..51a9c6be9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.InternalModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.InternalService.Method", $0)); - return $resultPromise; + return $Call.ByName("main.InternalService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js index fad4870ca..291a3cecf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * An exported but internal model. diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js index b38ff6238..274f4eed4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Dummy { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js index 44c3fdf12..c59f8e184 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -12,20 +12,18 @@ import * as otherpackage$0 from "./otherpackage/models.js"; /** * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ function InternalMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.InternalMethod", $0)); - return $resultPromise; + return $Call.ByName("main.Service.InternalMethod", $0); } /** * @param {otherpackage$0.Dummy} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function VisibleMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.VisibleMethod", $0)); - return $resultPromise; + return $Call.ByName("main.Service.VisibleMethod", $0); } /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js index a12a0137d..8a93f316f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.unexportedModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.unexportedService.Method", $0)); - return $resultPromise; + return $Call.ByName("main.unexportedService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js index d2e4ab159..494240982 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js @@ -9,50 +9,45 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Comment 1. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method1() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method1")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method1"); } /** * Comment 2. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method2() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method2")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method2"); } /** * Comment 3a. * Comment 3b. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method3() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method3")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method3"); } /** * Comment 4. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method4() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method4")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method4"); } /** * Comment 5. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method5() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method5")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method5"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js index 47ca987a9..fd18bf8a3 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,25 +19,21 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {string} name * @param {$models.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name, title)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name, title); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.NewPerson", name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js index cad356265..2c5df9ee7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Age is an integer with some predefined values diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js index f01cfc84f..125c76d13 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as services$0 from "./services/models.js"; * Greet does XYZ * @param {string} name * @param {services$0.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name, title)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name, title); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js index 0e7acabe2..65ebfa2f7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * @readonly diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js index 0ed0e3660..16a94df37 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.NewPerson", name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js index 860939563..0ab295133 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js index 7426508f7..ba2c614cd 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay").then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js index 0ed0e3660..16a94df37 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.NewPerson", name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js index 5b28ee2f6..29a95e11e 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js index d01fa13f6..f6269f0b5 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay").then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js index 1cb3ece11..e6a0e3a74 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js index 83b635bea..6364fa8f6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js index 541cf1c9c..e91d18592 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js @@ -9,24 +9,22 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GreetWithContext(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GreetWithContext", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.GreetWithContext", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js index 83b635bea..6364fa8f6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js index 3c20ebc43..9fd9745c1 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js @@ -13,6 +13,16 @@ export { import * as $models from "./models.js"; +/** + * @template S + * @typedef {$models.BasicCstrAlias} BasicCstrAlias + */ + +/** + * @template R + * @typedef {$models.ComparableCstrAlias} ComparableCstrAlias + */ + /** * @typedef {$models.EmbeddedCustomInterface} EmbeddedCustomInterface */ @@ -37,6 +47,31 @@ import * as $models from "./models.js"; * @typedef {$models.EmbeddedValuePtr} EmbeddedValuePtr */ +/** + * @template U + * @typedef {$models.GoodTildeCstrAlias} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {$models.InterfaceCstrAlias} InterfaceCstrAlias + */ + +/** + * @template X + * @typedef {$models.MixedCstrAlias} MixedCstrAlias + */ + +/** + * @template V + * @typedef {$models.NonBasicCstrAlias} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {$models.PointableCstrAlias} PointableCstrAlias + */ + /** * @typedef {$models.PointerAlias} PointerAlias */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js index c715dd484..1dc5bfc38 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js @@ -4,7 +4,17 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; + +/** + * @template S + * @typedef {S} BasicCstrAlias + */ + +/** + * @template R + * @typedef {R} ComparableCstrAlias + */ /** * @typedef {string} EmbeddedCustomInterface @@ -30,6 +40,16 @@ import {Create as $Create} from "/wails/runtime.js"; * @typedef {string} EmbeddedValuePtr */ +/** + * @template U + * @typedef {U} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {Y} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z */ @@ -751,6 +771,454 @@ export class Maps { */ this["TPZPtr"] = {}; } + if (!("GAR" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAR"] = {}; + } + if (!("GARPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GARPtr"] = {}; + } + if (!("GAS" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAS"] = {}; + } + if (!("GASPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GASPtr"] = {}; + } + if (!("GAT" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAT"] = {}; + } + if (!("GATPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GATPtr"] = {}; + } + if (!("GAU" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAU"] = {}; + } + if (!("GAUPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAUPtr"] = {}; + } + if (!("GAV" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAV"] = {}; + } + if (!("GAVPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAVPtr"] = {}; + } + if (!("GAW" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAW"] = {}; + } + if (!("GAWPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAWPtr"] = {}; + } + if (!("GAX" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAX"] = {}; + } + if (!("GAXPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAXPtr"] = {}; + } + if (!("GAY" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAY"] = {}; + } + if (!("GAYPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAYPtr"] = {}; + } + if (!("GAZ" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAZ"] = {}; + } + if (!("GAZPtr" in $$source)) { + /** + * Soft reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAZPtr"] = {}; + } + if (!("GACi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GACi"] = {}; + } + if (!("GACV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: ComparableCstrAlias]: number }} + */ + this["GACV"] = {}; + } + if (!("GACP" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GACP"] = {}; + } + if (!("GACiPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GACiPtr"] = {}; + } + if (!("GACVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GACVPtr"] = {}; + } + if (!("GACPPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GACPPtr"] = {}; + } + if (!("GABi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GABi"] = {}; + } + if (!("GABs" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: BasicCstrAlias]: number }} + */ + this["GABs"] = {}; + } + if (!("GABiPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABiPtr"] = {}; + } + if (!("GABT" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABT"] = {}; + } + if (!("GABTPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GABTPtr"] = {}; + } + if (!("GAGT" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: GoodTildeCstrAlias]: number }} + */ + this["GAGT"] = {}; + } + if (!("GAGTPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAGTPtr"] = {}; + } + if (!("GANBV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: NonBasicCstrAlias]: number }} + */ + this["GANBV"] = {}; + } + if (!("GANBP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GANBP"] = {}; + } + if (!("GANBVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GANBVPtr"] = {}; + } + if (!("GANBPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GANBPPtr"] = {}; + } + if (!("GAPlV1" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlV1"] = {}; + } + if (!("GAPlV2" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlV2"] = {}; + } + if (!("GAPlP1" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlP1"] = {}; + } + if (!("GAPlP2" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: PointableCstrAlias]: number }} + */ + this["GAPlP2"] = {}; + } + if (!("GAPlVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlVPtr"] = {}; + } + if (!("GAPlPPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPlPPtr"] = {}; + } + if (!("GAMi" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: `${number}`]: number }} + */ + this["GAMi"] = {}; + } + if (!("GAMS" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: MixedCstrAlias]: number }} + */ + this["GAMS"] = {}; + } + if (!("GAMV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: MixedCstrAlias]: number }} + */ + this["GAMV"] = {}; + } + if (!("GAMSPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAMSPtr"] = {}; + } + if (!("GAMVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAMVPtr"] = {}; + } + if (!("GAII" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAII"] = {}; + } + if (!("GAIV" in $$source)) { + /** + * Accept + * @member + * @type {{ [_: InterfaceCstrAlias]: number }} + */ + this["GAIV"] = {}; + } + if (!("GAIP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAIP"] = {}; + } + if (!("GAIIPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAIIPtr"] = {}; + } + if (!("GAIVPtr" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAIVPtr"] = {}; + } + if (!("GAIPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAIPPtr"] = {}; + } + if (!("GAPrV" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrV"] = {}; + } + if (!("GAPrP" in $$source)) { + /** + * Accept, hide + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrP"] = {}; + } + if (!("GAPrVPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrVPtr"] = {}; + } + if (!("GAPrPPtr" in $$source)) { + /** + * Reject + * @member + * @type {{ [_: string]: number }} + */ + this["GAPrPPtr"] = {}; + } Object.assign(this, $$source); } @@ -759,7 +1227,15 @@ export class Maps { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class Maps. - * @template R,S,T,U,V,W,X,Y,Z + * @template [R=any] + * @template [S=any] + * @template [T=any] + * @template [U=any] + * @template [V=any] + * @template [W=any] + * @template [X=any] + * @template [Y=any] + * @template [Z=any] * @param {(source: any) => R} $$createParamR * @param {(source: any) => S} $$createParamS * @param {(source: any) => T} $$createParamT @@ -861,6 +1337,62 @@ export class Maps { const $$createField86_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField87_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField88_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField89_0 = $$createType59($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField90_0 = $$createType60($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField91_0 = $$createType61($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField92_0 = $$createType62($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField93_0 = $$createType63($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField94_0 = $$createType64($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField95_0 = $$createType65($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField96_0 = $$createType66($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField97_0 = $$createType67($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField98_0 = $$createType68($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField99_0 = $$createType69($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField100_0 = $$createType70($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField101_0 = $$createType71($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField102_0 = $$createType72($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField103_0 = $$createType73($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField104_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField105_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField106_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField107_0 = $$createType1; + const $$createField108_0 = $$createType15; + const $$createField109_0 = $$createType17; + const $$createField110_0 = $$createType8; + const $$createField111_0 = $$createType16; + const $$createField112_0 = $$createType18; + const $$createField113_0 = $$createType1; + const $$createField114_0 = $$createType7; + const $$createField115_0 = $$createType8; + const $$createField116_0 = $$createType77; + const $$createField117_0 = $$createType78; + const $$createField118_0 = $$createType15; + const $$createField119_0 = $$createType16; + const $$createField120_0 = $$createType15; + const $$createField121_0 = $$createType18; + const $$createField122_0 = $$createType16; + const $$createField123_0 = $$createType53; + const $$createField124_0 = $$createType15; + const $$createField125_0 = $$createType16; + const $$createField126_0 = $$createType17; + const $$createField127_0 = $$createType18; + const $$createField128_0 = $$createType16; + const $$createField129_0 = $$createType18; + const $$createField130_0 = $$createType2; + const $$createField131_0 = $$createType42; + const $$createField132_0 = $$createType15; + const $$createField133_0 = $$createType79; + const $$createField134_0 = $$createType16; + const $$createField135_0 = $$createType23; + const $$createField136_0 = $$createType15; + const $$createField137_0 = $$createType18; + const $$createField138_0 = $$createType24; + const $$createField139_0 = $$createType16; + const $$createField140_0 = $$createType53; + const $$createField141_0 = $$createType16; + const $$createField142_0 = $$createType18; + const $$createField143_0 = $$createType48; + const $$createField144_0 = $$createType53; return ($$source = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; if ("Bool" in $$parsedSource) { @@ -1130,11 +1662,194 @@ export class Maps { if ("TPZPtr" in $$parsedSource) { $$parsedSource["TPZPtr"] = $$createField88_0($$parsedSource["TPZPtr"]); } + if ("GAR" in $$parsedSource) { + $$parsedSource["GAR"] = $$createField89_0($$parsedSource["GAR"]); + } + if ("GARPtr" in $$parsedSource) { + $$parsedSource["GARPtr"] = $$createField90_0($$parsedSource["GARPtr"]); + } + if ("GAS" in $$parsedSource) { + $$parsedSource["GAS"] = $$createField91_0($$parsedSource["GAS"]); + } + if ("GASPtr" in $$parsedSource) { + $$parsedSource["GASPtr"] = $$createField92_0($$parsedSource["GASPtr"]); + } + if ("GAT" in $$parsedSource) { + $$parsedSource["GAT"] = $$createField93_0($$parsedSource["GAT"]); + } + if ("GATPtr" in $$parsedSource) { + $$parsedSource["GATPtr"] = $$createField94_0($$parsedSource["GATPtr"]); + } + if ("GAU" in $$parsedSource) { + $$parsedSource["GAU"] = $$createField95_0($$parsedSource["GAU"]); + } + if ("GAUPtr" in $$parsedSource) { + $$parsedSource["GAUPtr"] = $$createField96_0($$parsedSource["GAUPtr"]); + } + if ("GAV" in $$parsedSource) { + $$parsedSource["GAV"] = $$createField97_0($$parsedSource["GAV"]); + } + if ("GAVPtr" in $$parsedSource) { + $$parsedSource["GAVPtr"] = $$createField98_0($$parsedSource["GAVPtr"]); + } + if ("GAW" in $$parsedSource) { + $$parsedSource["GAW"] = $$createField99_0($$parsedSource["GAW"]); + } + if ("GAWPtr" in $$parsedSource) { + $$parsedSource["GAWPtr"] = $$createField100_0($$parsedSource["GAWPtr"]); + } + if ("GAX" in $$parsedSource) { + $$parsedSource["GAX"] = $$createField101_0($$parsedSource["GAX"]); + } + if ("GAXPtr" in $$parsedSource) { + $$parsedSource["GAXPtr"] = $$createField102_0($$parsedSource["GAXPtr"]); + } + if ("GAY" in $$parsedSource) { + $$parsedSource["GAY"] = $$createField103_0($$parsedSource["GAY"]); + } + if ("GAYPtr" in $$parsedSource) { + $$parsedSource["GAYPtr"] = $$createField104_0($$parsedSource["GAYPtr"]); + } + if ("GAZ" in $$parsedSource) { + $$parsedSource["GAZ"] = $$createField105_0($$parsedSource["GAZ"]); + } + if ("GAZPtr" in $$parsedSource) { + $$parsedSource["GAZPtr"] = $$createField106_0($$parsedSource["GAZPtr"]); + } + if ("GACi" in $$parsedSource) { + $$parsedSource["GACi"] = $$createField107_0($$parsedSource["GACi"]); + } + if ("GACV" in $$parsedSource) { + $$parsedSource["GACV"] = $$createField108_0($$parsedSource["GACV"]); + } + if ("GACP" in $$parsedSource) { + $$parsedSource["GACP"] = $$createField109_0($$parsedSource["GACP"]); + } + if ("GACiPtr" in $$parsedSource) { + $$parsedSource["GACiPtr"] = $$createField110_0($$parsedSource["GACiPtr"]); + } + if ("GACVPtr" in $$parsedSource) { + $$parsedSource["GACVPtr"] = $$createField111_0($$parsedSource["GACVPtr"]); + } + if ("GACPPtr" in $$parsedSource) { + $$parsedSource["GACPPtr"] = $$createField112_0($$parsedSource["GACPPtr"]); + } + if ("GABi" in $$parsedSource) { + $$parsedSource["GABi"] = $$createField113_0($$parsedSource["GABi"]); + } + if ("GABs" in $$parsedSource) { + $$parsedSource["GABs"] = $$createField114_0($$parsedSource["GABs"]); + } + if ("GABiPtr" in $$parsedSource) { + $$parsedSource["GABiPtr"] = $$createField115_0($$parsedSource["GABiPtr"]); + } + if ("GABT" in $$parsedSource) { + $$parsedSource["GABT"] = $$createField116_0($$parsedSource["GABT"]); + } + if ("GABTPtr" in $$parsedSource) { + $$parsedSource["GABTPtr"] = $$createField117_0($$parsedSource["GABTPtr"]); + } + if ("GAGT" in $$parsedSource) { + $$parsedSource["GAGT"] = $$createField118_0($$parsedSource["GAGT"]); + } + if ("GAGTPtr" in $$parsedSource) { + $$parsedSource["GAGTPtr"] = $$createField119_0($$parsedSource["GAGTPtr"]); + } + if ("GANBV" in $$parsedSource) { + $$parsedSource["GANBV"] = $$createField120_0($$parsedSource["GANBV"]); + } + if ("GANBP" in $$parsedSource) { + $$parsedSource["GANBP"] = $$createField121_0($$parsedSource["GANBP"]); + } + if ("GANBVPtr" in $$parsedSource) { + $$parsedSource["GANBVPtr"] = $$createField122_0($$parsedSource["GANBVPtr"]); + } + if ("GANBPPtr" in $$parsedSource) { + $$parsedSource["GANBPPtr"] = $$createField123_0($$parsedSource["GANBPPtr"]); + } + if ("GAPlV1" in $$parsedSource) { + $$parsedSource["GAPlV1"] = $$createField124_0($$parsedSource["GAPlV1"]); + } + if ("GAPlV2" in $$parsedSource) { + $$parsedSource["GAPlV2"] = $$createField125_0($$parsedSource["GAPlV2"]); + } + if ("GAPlP1" in $$parsedSource) { + $$parsedSource["GAPlP1"] = $$createField126_0($$parsedSource["GAPlP1"]); + } + if ("GAPlP2" in $$parsedSource) { + $$parsedSource["GAPlP2"] = $$createField127_0($$parsedSource["GAPlP2"]); + } + if ("GAPlVPtr" in $$parsedSource) { + $$parsedSource["GAPlVPtr"] = $$createField128_0($$parsedSource["GAPlVPtr"]); + } + if ("GAPlPPtr" in $$parsedSource) { + $$parsedSource["GAPlPPtr"] = $$createField129_0($$parsedSource["GAPlPPtr"]); + } + if ("GAMi" in $$parsedSource) { + $$parsedSource["GAMi"] = $$createField130_0($$parsedSource["GAMi"]); + } + if ("GAMS" in $$parsedSource) { + $$parsedSource["GAMS"] = $$createField131_0($$parsedSource["GAMS"]); + } + if ("GAMV" in $$parsedSource) { + $$parsedSource["GAMV"] = $$createField132_0($$parsedSource["GAMV"]); + } + if ("GAMSPtr" in $$parsedSource) { + $$parsedSource["GAMSPtr"] = $$createField133_0($$parsedSource["GAMSPtr"]); + } + if ("GAMVPtr" in $$parsedSource) { + $$parsedSource["GAMVPtr"] = $$createField134_0($$parsedSource["GAMVPtr"]); + } + if ("GAII" in $$parsedSource) { + $$parsedSource["GAII"] = $$createField135_0($$parsedSource["GAII"]); + } + if ("GAIV" in $$parsedSource) { + $$parsedSource["GAIV"] = $$createField136_0($$parsedSource["GAIV"]); + } + if ("GAIP" in $$parsedSource) { + $$parsedSource["GAIP"] = $$createField137_0($$parsedSource["GAIP"]); + } + if ("GAIIPtr" in $$parsedSource) { + $$parsedSource["GAIIPtr"] = $$createField138_0($$parsedSource["GAIIPtr"]); + } + if ("GAIVPtr" in $$parsedSource) { + $$parsedSource["GAIVPtr"] = $$createField139_0($$parsedSource["GAIVPtr"]); + } + if ("GAIPPtr" in $$parsedSource) { + $$parsedSource["GAIPPtr"] = $$createField140_0($$parsedSource["GAIPPtr"]); + } + if ("GAPrV" in $$parsedSource) { + $$parsedSource["GAPrV"] = $$createField141_0($$parsedSource["GAPrV"]); + } + if ("GAPrP" in $$parsedSource) { + $$parsedSource["GAPrP"] = $$createField142_0($$parsedSource["GAPrP"]); + } + if ("GAPrVPtr" in $$parsedSource) { + $$parsedSource["GAPrVPtr"] = $$createField143_0($$parsedSource["GAPrVPtr"]); + } + if ("GAPrPPtr" in $$parsedSource) { + $$parsedSource["GAPrPPtr"] = $$createField144_0($$parsedSource["GAPrPPtr"]); + } return new Maps(/** @type {Partial>} */($$parsedSource)); }; } } +/** + * @template X + * @typedef {X} MixedCstrAlias + */ + +/** + * @template V + * @typedef {V} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {W} PointableCstrAlias + */ + /** * @typedef {PointerTextMarshaler} PointerAlias */ @@ -1219,21 +1934,24 @@ const $$createType55 = $Create.Map($Create.Any, $Create.Any); const $$createType56 = $Create.Map($Create.Any, $Create.Any); const $$createType57 = $Create.Map($Create.Any, $Create.Any); const $$createType58 = $Create.Map($Create.Any, $Create.Any); -const $$createType59 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType60 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType61 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType62 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType63 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType64 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType65 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType66 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType67 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType68 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType69 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType70 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType71 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType72 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType73 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType74 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType75 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType76 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); +const $$createType59 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType60 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType61 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType62 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType63 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType64 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType65 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType66 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType67 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType68 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType69 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType70 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType71 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType72 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType73 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType74 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType75 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType76 = /** @type {(...args: any[]) => any} */(($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any)); +const $$createType77 = $Create.Map($Create.Any, $Create.Any); +const $$createType78 = $Create.Map($Create.Any, $Create.Any); +const $$createType79 = $Create.Map($Create.Any, $Create.Any); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js index b7af4dba5..cc98f3a89 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js @@ -4,22 +4,19 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.Method")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.Service.Method").then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js index 1871e9492..77fe552ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js index 52950fdbd..e6c23e4f0 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js @@ -4,22 +4,19 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Data> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Data>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.Method")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.Service.Method").then(/** @type {($result: any) => any} */(($result) => { return $$createType0($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js index f88aa955a..b42e223fa 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -45,7 +45,7 @@ export class HowDifferent { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class HowDifferent. - * @template How + * @template [How=any] * @param {(source: any) => How} $$createParamHow * @returns {($$source?: any) => HowDifferent} */ @@ -175,7 +175,7 @@ export const PrivatePerson = personImpl; */ // Private type creation functions -const $$createType0 = ($$createParamHow) => $Create.Map($Create.Any, $$createParamHow); -const $$createType1 = ($$createParamHow) => $Create.Array($$createType0($$createParamHow)); +const $$createType0 = /** @type {(...args: any[]) => any} */(($$createParamHow) => $Create.Map($Create.Any, $$createParamHow)); +const $$createType1 = /** @type {(...args: any[]) => any} */(($$createParamHow) => $Create.Array($$createType0($$createParamHow))); const $$createType2 = other$0.OtherPerson.createFrom($Create.Any); const $$createType3 = $Create.Array($$createType2); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js index c10d33908..89992cacf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * OtherPerson is like a person, but different. @@ -40,7 +40,7 @@ export class OtherPerson { * Given creation functions for each type parameter, * returns a creation function for a concrete instance * of the generic class OtherPerson. - * @template T + * @template [T=any] * @param {(source: any) => T} $$createParamT * @returns {($$source?: any) => OtherPerson} */ @@ -57,4 +57,4 @@ export class OtherPerson { } // Private type creation functions -const $$createType0 = ($$createParamT) => $Create.Array($$createParamT); +const $$createType0 = /** @type {(...args: any[]) => any} */(($$createParamT) => $Create.Array($$createParamT)); diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js index bdea648c1..d2819bc4b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js index 300f5807b..35bc3579d 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,27 +17,23 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne").then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne"); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js index 593ea0136..0497b16bc 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedOther.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("main.EmbedOther.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js index 458575bd1..903e4153f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,27 +17,23 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedService.LikeThisOne")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.EmbedService.LikeThisOne").then(/** @type {($result: any) => any} */(($result) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedService.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("main.EmbedService.LikeThisOtherOne"); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js index dfc42065c..fe683f548 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", $0)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js index 1cb3ece11..e6a0e3a74 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js index 05f7be7f8..69652f626 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByName("main.OtherService.Hello")); - return $resultPromise; + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js index 1cb3ece11..e6a0e3a74 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js index 05f7be7f8..69652f626 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByName("main.OtherService.Hello")); - return $resultPromise; + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js index 0ed0e3660..16a94df37 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.NewPerson", name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js index e187cce22..04771d2ca 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js index 105fc3ea8..327b15c9c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay").then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js index eb69383fb..d811d97ce 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,413 +17,358 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.ArrayInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.ArrayInt", $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.BoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntInIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntInIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } /** * @param {{ [_: `${number}`]: number }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntInt", $in); } /** * @param {{ [_: `${number}`]: number | null }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntIntPointer", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise<{ [_: `${number}`]: number[] }> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] }>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NoInputsStringOut")); - return $resultPromise; + return $Call.ByName("main.GreetService.NoInputsStringOut"); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerBoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerMapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerStringInStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructInputStructOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType3($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType4($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntInUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js index 660f38b29..69c96370a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js index eb69383fb..d811d97ce 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,413 +17,358 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.ArrayInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.ArrayInt", $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.BoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntInIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntInIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } /** * @param {{ [_: `${number}`]: number }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntInt", $in); } /** * @param {{ [_: `${number}`]: number | null }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntIntPointer", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } /** * @param {{ [_: `${number}`]: number[] }} $in - * @returns {Promise<{ [_: `${number}`]: number[] }> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] }>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NoInputsStringOut")); - return $resultPromise; + return $Call.ByName("main.GreetService.NoInputsStringOut"); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerBoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerMapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerStringInStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType2($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {string[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructInputStructOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType3($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in).then(/** @type {($result: any) => any} */(($result) => { return $$createType4($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntInUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js index 660f38b29..69c96370a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js index 83b635bea..6364fa8f6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js index 83b635bea..6364fa8f6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js index 0ed0e3660..16a94df37 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,25 +18,21 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("main.GreetService.NewPerson", name).then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js index 0daca427b..d7bfe75cf 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js index fb1176dee..24a5de807 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js index 47ce5c70a..d413366d6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,15 +18,12 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay")); - let $typingPromise = /** @type {any} */($resultPromise.then(($result) => { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay").then(/** @type {($result: any) => any} */(($result) => { return $$createType1($result); })); - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/warnings.log b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/warnings.log +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=false/UseNames=true/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js index bb83e6cd3..16b76f94c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -22,47 +22,49 @@ import * as $models from "./models.js"; /** * Get someone. * @param {$models.Alias} aliasValue - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function Get(aliasValue) { - let $resultPromise = /** @type {any} */($Call.ByID(1928502664, aliasValue)); - return $resultPromise; + return $Call.ByID(1928502664, aliasValue); } /** * Apparently, aliases are all the rage right now. * @param {$models.AliasedPerson} p - * @returns {Promise<$models.StrangelyAliasedPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.StrangelyAliasedPerson>} */ export function GetButAliased(p) { - let $resultPromise = /** @type {any} */($Call.ByID(1896499664, p)); - return $resultPromise; + return $Call.ByID(1896499664, p); } /** * Get someone quite different. - * @returns {Promise<$models.GenericPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.GenericPerson>} */ export function GetButDifferent() { - let $resultPromise = /** @type {any} */($Call.ByID(2240931744)); - return $resultPromise; + return $Call.ByID(2240931744); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GetButForeignPrivateAlias() { - let $resultPromise = /** @type {any} */($Call.ByID(643456960)); - return $resultPromise; + return $Call.ByID(643456960); +} + +/** + * @returns {$CancellablePromise<$models.AliasGroup>} + */ +export function GetButGenericAliases() { + return $Call.ByID(914093800); } /** * Greet a lot of unusual things. * @param {$models.EmptyAliasStruct} $0 * @param {$models.EmptyStruct} $1 - * @returns {Promise<$models.AliasStruct> & { cancel(): void }} + * @returns {$CancellablePromise<$models.AliasStruct>} */ export function Greet($0, $1) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, $0, $1)); - return $resultPromise; + return $Call.ByID(1411160069, $0, $1); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js index 25e37feb0..5a5c62644 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js @@ -14,6 +14,11 @@ import * as $models from "./models.js"; * @typedef {$models.Alias} Alias */ +/** + * A class whose fields have various aliased types. + * @typedef {$models.AliasGroup} AliasGroup + */ + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -35,12 +40,41 @@ import * as $models from "./models.js"; * @typedef {$models.EmptyStruct} EmptyStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {$models.GenericAlias} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {$models.GenericMapAlias} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T * @typedef {$models.GenericPerson} GenericPerson */ +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {$models.GenericPersonAlias} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {$models.GenericPtrAlias} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {$models.IndirectPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {$models.OtherAliasStruct} OtherAliasStruct @@ -55,3 +89,8 @@ import * as $models from "./models.js"; * Another class alias, but ordered after its aliased class. * @typedef {$models.StrangelyAliasedPerson} StrangelyAliasedPerson */ + +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {$models.TPIndirectPersonAlias} TPIndirectPersonAlias + */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js index 4f343cb4a..1ba2af395 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js @@ -7,6 +7,19 @@ * @typedef {number} Alias */ +/** + * A class whose fields have various aliased types. + * @typedef {Object} AliasGroup + * @property {GenericAlias} GAi + * @property {GenericAlias>} GAP + * @property {GenericPtrAlias} GPAs + * @property {GenericPtrAlias>} GPAP + * @property {GenericMapAlias} GMA + * @property {GenericPersonAlias} GPA + * @property {IndirectPersonAlias} IPA + * @property {TPIndirectPersonAlias} TPIPA + */ + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -34,6 +47,18 @@ * } } EmptyStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {T} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {{ [_: string]: U } | null} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T @@ -42,6 +67,23 @@ * @property {Alias} AliasedField */ +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {GenericPerson[] | null>} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {GenericAlias | null} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {GenericPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {Object} OtherAliasStruct @@ -60,6 +102,11 @@ * @typedef {Person} StrangelyAliasedPerson */ +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {GenericAlias>} TPIndirectPersonAlias + */ + // In interface mode, this file is likely to contain just comments. // We add a dummy export statement to ensure it is recognised as an ES module. export {}; diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js index a12e0e871..2a4188bce 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod() { - let $resultPromise = /** @type {any} */($Call.ByID(2241101727)); - return $resultPromise; + return $Call.ByID(2241101727); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js index 97ffbf7be..ead6f5da4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod2() { - let $resultPromise = /** @type {any} */($Call.ByID(1556848345)); - return $resultPromise; + return $Call.ByID(1556848345); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js index c8cf7d8a4..995d46c13 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {$models.Person} person * @param {$models.Embedded1} emb - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(person, emb) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, person, emb)); - return $resultPromise; + return $Call.ByID(1411160069, person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js index dd0ac2d2c..0285f6ca4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -25,9 +25,8 @@ import * as $models from "./models.js"; * @param {{ [_: `${number}`]: boolean | null } | null} assoc * @param {(number | null)[] | null} $4 * @param {string[]} other - * @returns {Promise<[$models.Person, any, number[] | null]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, any, number[] | null]>} */ export function Greet(str, people, $2, assoc, $4, ...other) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, str, people, $2, assoc, $4, other)); - return $resultPromise; + return $Call.ByID(1411160069, str, people, $2, assoc, $4, other); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js index 7bb0caa65..53027124b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.StructA, $models.StructC]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.StructA, $models.StructC]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByID(440020721)); - return $resultPromise; + return $Call.ByID(440020721); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js index dede5e3da..382e6bac3 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByID(440020721)); - return $resultPromise; + return $Call.ByID(440020721); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js index 1f5b27968..f96a46e77 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.InternalModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByID(538079117, $0)); - return $resultPromise; + return $Call.ByID(538079117, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js index c6fa4555b..0d869be84 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -12,20 +12,18 @@ import * as otherpackage$0 from "./otherpackage/models.js"; /** * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ function InternalMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByID(3518775569, $0)); - return $resultPromise; + return $Call.ByID(3518775569, $0); } /** * @param {otherpackage$0.Dummy} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function VisibleMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByID(474018228, $0)); - return $resultPromise; + return $Call.ByID(474018228, $0); } /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js index b29fdb615..573852d5a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.unexportedModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByID(37626172, $0)); - return $resultPromise; + return $Call.ByID(37626172, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js index 79d37c9ae..d364009d6 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js @@ -9,50 +9,45 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Comment 1. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method1() { - let $resultPromise = /** @type {any} */($Call.ByID(841558284)); - return $resultPromise; + return $Call.ByID(841558284); } /** * Comment 2. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method2() { - let $resultPromise = /** @type {any} */($Call.ByID(891891141)); - return $resultPromise; + return $Call.ByID(891891141); } /** * Comment 3a. * Comment 3b. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method3() { - let $resultPromise = /** @type {any} */($Call.ByID(875113522)); - return $resultPromise; + return $Call.ByID(875113522); } /** * Comment 4. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method4() { - let $resultPromise = /** @type {any} */($Call.ByID(791225427)); - return $resultPromise; + return $Call.ByID(791225427); } /** * Comment 5. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method5() { - let $resultPromise = /** @type {any} */($Call.ByID(774447808)); - return $resultPromise; + return $Call.ByID(774447808); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js index 8596b37d8..f14b3b6b2 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,19 +19,17 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {string} name * @param {$models.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name, title)); - return $resultPromise; + return $Call.ByID(1411160069, name, title); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - return $resultPromise; + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js index 0620037d8..508c12b72 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as services$0 from "./services/models.js"; * Greet does XYZ * @param {string} name * @param {services$0.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name, title)); - return $resultPromise; + return $Call.ByID(1411160069, name, title); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js index 4e1a41312..40d2245b9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - return $resultPromise; + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js index 96dc85e8f..dff4e0d5f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(2007737399)); - return $resultPromise; + return $Call.ByID(2007737399); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js index 4e1a41312..40d2245b9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - return $resultPromise; + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js index acc6a59de..182a9e091 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(2447353446)); - return $resultPromise; + return $Call.ByID(2447353446); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js index cf528985b..9343d5531 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js index a46cb2e4f..6c1448d81 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js index 20aaad58f..be0cf5ce8 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js @@ -9,24 +9,22 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GreetWithContext(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1310150960, name)); - return $resultPromise; + return $Call.ByID(1310150960, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js index a46cb2e4f..6c1448d81 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js index f9c0ff658..80fdcd24c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js @@ -9,6 +9,16 @@ export { import * as $models from "./models.js"; +/** + * @template S + * @typedef {$models.BasicCstrAlias} BasicCstrAlias + */ + +/** + * @template R + * @typedef {$models.ComparableCstrAlias} ComparableCstrAlias + */ + /** * @typedef {$models.EmbeddedCustomInterface} EmbeddedCustomInterface */ @@ -33,11 +43,36 @@ import * as $models from "./models.js"; * @typedef {$models.EmbeddedValuePtr} EmbeddedValuePtr */ +/** + * @template U + * @typedef {$models.GoodTildeCstrAlias} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {$models.InterfaceCstrAlias} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z * @typedef {$models.Maps} Maps */ +/** + * @template X + * @typedef {$models.MixedCstrAlias} MixedCstrAlias + */ + +/** + * @template V + * @typedef {$models.NonBasicCstrAlias} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {$models.PointableCstrAlias} PointableCstrAlias + */ + /** * @typedef {$models.PointerAlias} PointerAlias */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js index c9ea922a3..cee61a5e4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js @@ -2,6 +2,16 @@ // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT +/** + * @template S + * @typedef {S} BasicCstrAlias + */ + +/** + * @template R + * @typedef {R} ComparableCstrAlias + */ + /** * @typedef {string} EmbeddedCustomInterface */ @@ -26,6 +36,16 @@ * @typedef {string} EmbeddedValuePtr */ +/** + * @template U + * @typedef {U} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {Y} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z * @typedef {Object} Maps @@ -118,6 +138,77 @@ * @property {{ [_: string]: number } | null} TPYPtr - Soft reject * @property {{ [_: string]: number } | null} TPZ - Accept, hide * @property {{ [_: string]: number } | null} TPZPtr - Soft reject + * @property {{ [_: string]: number } | null} GAR - Soft reject + * @property {{ [_: string]: number } | null} GARPtr - Soft reject + * @property {{ [_: string]: number } | null} GAS - Accept, hide + * @property {{ [_: string]: number } | null} GASPtr - Soft reject + * @property {{ [_: string]: number } | null} GAT - Soft reject + * @property {{ [_: string]: number } | null} GATPtr - Soft reject + * @property {{ [_: string]: number } | null} GAU - Accept, hide + * @property {{ [_: string]: number } | null} GAUPtr - Soft reject + * @property {{ [_: string]: number } | null} GAV - Accept, hide + * @property {{ [_: string]: number } | null} GAVPtr - Soft reject + * @property {{ [_: string]: number } | null} GAW - Soft reject + * @property {{ [_: string]: number } | null} GAWPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAX - Accept, hide + * @property {{ [_: string]: number } | null} GAXPtr - Soft reject + * @property {{ [_: string]: number } | null} GAY - Accept, hide + * @property {{ [_: string]: number } | null} GAYPtr - Soft reject + * @property {{ [_: string]: number } | null} GAZ - Accept, hide + * @property {{ [_: string]: number } | null} GAZPtr - Soft reject + * @property {{ [_: `${number}`]: number } | null} GACi - Accept, hide + * @property {{ [_: ComparableCstrAlias]: number } | null} GACV - Accept + * @property {{ [_: string]: number } | null} GACP - Reject + * @property {{ [_: string]: number } | null} GACiPtr - Reject + * @property {{ [_: string]: number } | null} GACVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GACPPtr - Accept, hide + * @property {{ [_: `${number}`]: number } | null} GABi - Accept, hide + * @property {{ [_: BasicCstrAlias]: number } | null} GABs - Accept + * @property {{ [_: string]: number } | null} GABiPtr - Reject + * @property {{ [_: string]: number } | null} GABT - Reject + * @property {{ [_: string]: number } | null} GABTPtr - Reject + * @property {{ [_: GoodTildeCstrAlias]: number } | null} GAGT - Accept + * @property {{ [_: string]: number } | null} GAGTPtr - Accept, hide + * @property {{ [_: NonBasicCstrAlias]: number } | null} GANBV - Accept + * @property {{ [_: string]: number } | null} GANBP - Accept, hide + * @property {{ [_: string]: number } | null} GANBVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GANBPPtr - Reject + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlV1 - Accept + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlV2 - Accept + * @property {{ [_: string]: number } | null} GAPlP1 - Reject + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlP2 - Accept + * @property {{ [_: string]: number } | null} GAPlVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAPlPPtr - Accept, hide + * @property {{ [_: `${number}`]: number } | null} GAMi - Accept, hide + * @property {{ [_: MixedCstrAlias]: number } | null} GAMS - Accept + * @property {{ [_: MixedCstrAlias]: number } | null} GAMV - Accept + * @property {{ [_: string]: number } | null} GAMSPtr - Reject + * @property {{ [_: string]: number } | null} GAMVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAII - Accept, hide + * @property {{ [_: InterfaceCstrAlias]: number } | null} GAIV - Accept + * @property {{ [_: string]: number } | null} GAIP - Accept, hide + * @property {{ [_: string]: number } | null} GAIIPtr - Reject + * @property {{ [_: string]: number } | null} GAIVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAIPPtr - Reject + * @property {{ [_: string]: number } | null} GAPrV - Accept, hide + * @property {{ [_: string]: number } | null} GAPrP - Accept, hide + * @property {{ [_: string]: number } | null} GAPrVPtr - Reject + * @property {{ [_: string]: number } | null} GAPrPPtr - Reject + */ + +/** + * @template X + * @typedef {X} MixedCstrAlias + */ + +/** + * @template V + * @typedef {V} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {W} PointableCstrAlias */ /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js index 3e9005230..810db1875 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js @@ -4,16 +4,15 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByID(4021345184)); - return $resultPromise; + return $Call.ByID(4021345184); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js index a376469fb..5ba9fe470 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js @@ -4,16 +4,15 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Data> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Data>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByID(4021345184)); - return $resultPromise; + return $Call.ByID(4021345184); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js index 0fa21bec4..d647deeb4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(3606939272)); - return $resultPromise; + return $Call.ByID(3606939272); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js index fb7703b90..dca6f4e6c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,18 +17,16 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByID(2124352079)); - return $resultPromise; + return $Call.ByID(2124352079); } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(4281222271)); - return $resultPromise; + return $Call.ByID(4281222271); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js index de602db49..19bdcac29 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(3566862802)); - return $resultPromise; + return $Call.ByID(3566862802); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js index 48bff3e1b..f50558b8c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,18 +17,16 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByID(2590614085)); - return $resultPromise; + return $Call.ByID(2590614085); } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByID(773650321)); - return $resultPromise; + return $Call.ByID(773650321); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js index 5c4ed0a89..3597b6460 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet($0) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, $0)); - return $resultPromise; + return $Call.ByID(1411160069, $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js index cf528985b..9343d5531 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js index 09356e523..b4f3f039c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByID(4249972365)); - return $resultPromise; + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js index cf528985b..9343d5531 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js index 09356e523..b4f3f039c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByID(4249972365)); - return $resultPromise; + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js index 4e1a41312..40d2245b9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - return $resultPromise; + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js index 5f91bf18c..7a4789f75 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(3568225479)); - return $resultPromise; + return $Call.ByID(3568225479); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js index a8b648ed1..ddd5e8916 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,387 +17,344 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3862002418, $in)); - return $resultPromise; + return $Call.ByID(3862002418, $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2424639793, $in)); - return $resultPromise; + return $Call.ByID(2424639793, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3132595881, $in)); - return $resultPromise; + return $Call.ByID(3132595881, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2182412247, $in)); - return $resultPromise; + return $Call.ByID(2182412247, $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3306292566, $in)); - return $resultPromise; + return $Call.ByID(3306292566, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1754277916, $in)); - return $resultPromise; + return $Call.ByID(1754277916, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1909469092, $in)); - return $resultPromise; + return $Call.ByID(1909469092, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(4251088558, $in)); - return $resultPromise; + return $Call.ByID(4251088558, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1343888303, $in)); - return $resultPromise; + return $Call.ByID(1343888303, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2205561041, $in)); - return $resultPromise; + return $Call.ByID(2205561041, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(572240879, $in)); - return $resultPromise; + return $Call.ByID(572240879, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2189402897, $in)); - return $resultPromise; + return $Call.ByID(2189402897, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(642881729, $in)); - return $resultPromise; + return $Call.ByID(642881729, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1066151743, $in)); - return $resultPromise; + return $Call.ByID(1066151743, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2718999663, $in)); - return $resultPromise; + return $Call.ByID(2718999663, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2386486356, $in)); - return $resultPromise; + return $Call.ByID(2386486356, $in); } /** * @param {{ [_: `${number}`]: number | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2163571325, $in)); - return $resultPromise; + return $Call.ByID(2163571325, $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2900172572, $in)); - return $resultPromise; + return $Call.ByID(2900172572, $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] | null } | null>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(881980169, $in)); - return $resultPromise; + return $Call.ByID(881980169, $in); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByID(1075577233)); - return $resultPromise; + return $Call.ByID(1075577233); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3589606958, $in)); - return $resultPromise; + return $Call.ByID(3589606958, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(224675106, $in)); - return $resultPromise; + return $Call.ByID(224675106, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2124953624, $in)); - return $resultPromise; + return $Call.ByID(2124953624, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3516977899, $in)); - return $resultPromise; + return $Call.ByID(3516977899, $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(229603958, $in)); - return $resultPromise; + return $Call.ByID(229603958, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3678582682, $in)); - return $resultPromise; + return $Call.ByID(3678582682, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(319259595, $in)); - return $resultPromise; + return $Call.ByID(319259595, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(383995060, $in)); - return $resultPromise; + return $Call.ByID(383995060, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1091960237, $in)); - return $resultPromise; + return $Call.ByID(1091960237, $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3835643147, $in)); - return $resultPromise; + return $Call.ByID(3835643147, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2447692557, $in)); - return $resultPromise; + return $Call.ByID(2447692557, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2943477349, $in)); - return $resultPromise; + return $Call.ByID(2943477349, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3401034892, $in)); - return $resultPromise; + return $Call.ByID(3401034892, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1236957573, $in)); - return $resultPromise; + return $Call.ByID(1236957573, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1160383782, $in)); - return $resultPromise; + return $Call.ByID(1160383782, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1739300671, $in)); - return $resultPromise; + return $Call.ByID(1739300671, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(793803239, $in)); - return $resultPromise; + return $Call.ByID(793803239, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1403757716, $in)); - return $resultPromise; + return $Call.ByID(1403757716, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2988345717, $in)); - return $resultPromise; + return $Call.ByID(2988345717, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(518250834, $in)); - return $resultPromise; + return $Call.ByID(518250834, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2836661285, $in)); - return $resultPromise; + return $Call.ByID(2836661285, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1367187362, $in)); - return $resultPromise; + return $Call.ByID(1367187362, $in); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js index a8b648ed1..ddd5e8916 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,387 +17,344 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3862002418, $in)); - return $resultPromise; + return $Call.ByID(3862002418, $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2424639793, $in)); - return $resultPromise; + return $Call.ByID(2424639793, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3132595881, $in)); - return $resultPromise; + return $Call.ByID(3132595881, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2182412247, $in)); - return $resultPromise; + return $Call.ByID(2182412247, $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3306292566, $in)); - return $resultPromise; + return $Call.ByID(3306292566, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1754277916, $in)); - return $resultPromise; + return $Call.ByID(1754277916, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1909469092, $in)); - return $resultPromise; + return $Call.ByID(1909469092, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(4251088558, $in)); - return $resultPromise; + return $Call.ByID(4251088558, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1343888303, $in)); - return $resultPromise; + return $Call.ByID(1343888303, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2205561041, $in)); - return $resultPromise; + return $Call.ByID(2205561041, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(572240879, $in)); - return $resultPromise; + return $Call.ByID(572240879, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2189402897, $in)); - return $resultPromise; + return $Call.ByID(2189402897, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(642881729, $in)); - return $resultPromise; + return $Call.ByID(642881729, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1066151743, $in)); - return $resultPromise; + return $Call.ByID(1066151743, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2718999663, $in)); - return $resultPromise; + return $Call.ByID(2718999663, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2386486356, $in)); - return $resultPromise; + return $Call.ByID(2386486356, $in); } /** * @param {{ [_: `${number}`]: number | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2163571325, $in)); - return $resultPromise; + return $Call.ByID(2163571325, $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2900172572, $in)); - return $resultPromise; + return $Call.ByID(2900172572, $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] | null } | null>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(881980169, $in)); - return $resultPromise; + return $Call.ByID(881980169, $in); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByID(1075577233)); - return $resultPromise; + return $Call.ByID(1075577233); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3589606958, $in)); - return $resultPromise; + return $Call.ByID(3589606958, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(224675106, $in)); - return $resultPromise; + return $Call.ByID(224675106, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2124953624, $in)); - return $resultPromise; + return $Call.ByID(2124953624, $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3516977899, $in)); - return $resultPromise; + return $Call.ByID(3516977899, $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(229603958, $in)); - return $resultPromise; + return $Call.ByID(229603958, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3678582682, $in)); - return $resultPromise; + return $Call.ByID(3678582682, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByID(319259595, $in)); - return $resultPromise; + return $Call.ByID(319259595, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(383995060, $in)); - return $resultPromise; + return $Call.ByID(383995060, $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1091960237, $in)); - return $resultPromise; + return $Call.ByID(1091960237, $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3835643147, $in)); - return $resultPromise; + return $Call.ByID(3835643147, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2447692557, $in)); - return $resultPromise; + return $Call.ByID(2447692557, $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2943477349, $in)); - return $resultPromise; + return $Call.ByID(2943477349, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(3401034892, $in)); - return $resultPromise; + return $Call.ByID(3401034892, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1236957573, $in)); - return $resultPromise; + return $Call.ByID(1236957573, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1160383782, $in)); - return $resultPromise; + return $Call.ByID(1160383782, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1739300671, $in)); - return $resultPromise; + return $Call.ByID(1739300671, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(793803239, $in)); - return $resultPromise; + return $Call.ByID(793803239, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1403757716, $in)); - return $resultPromise; + return $Call.ByID(1403757716, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2988345717, $in)); - return $resultPromise; + return $Call.ByID(2988345717, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(518250834, $in)); - return $resultPromise; + return $Call.ByID(518250834, $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByID(2836661285, $in)); - return $resultPromise; + return $Call.ByID(2836661285, $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByID(1367187362, $in)); - return $resultPromise; + return $Call.ByID(1367187362, $in); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js index a46cb2e4f..6c1448d81 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js index a46cb2e4f..6c1448d81 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js index 4e1a41312..40d2245b9 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1411160069, name)); - return $resultPromise; + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByID(1661412647, name)); - return $resultPromise; + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js index fba063a2b..3c9c56546 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByID(1491748400)); - return $resultPromise; + return $Call.ByID(1491748400); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/warnings.log b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/warnings.log +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=false/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js index 791d85e39..cc81267aa 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -22,47 +22,49 @@ import * as $models from "./models.js"; /** * Get someone. * @param {$models.Alias} aliasValue - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function Get(aliasValue) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Get", aliasValue)); - return $resultPromise; + return $Call.ByName("main.GreetService.Get", aliasValue); } /** * Apparently, aliases are all the rage right now. * @param {$models.AliasedPerson} p - * @returns {Promise<$models.StrangelyAliasedPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.StrangelyAliasedPerson>} */ export function GetButAliased(p) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButAliased", p)); - return $resultPromise; + return $Call.ByName("main.GreetService.GetButAliased", p); } /** * Get someone quite different. - * @returns {Promise<$models.GenericPerson> & { cancel(): void }} + * @returns {$CancellablePromise<$models.GenericPerson>} */ export function GetButDifferent() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButDifferent")); - return $resultPromise; + return $Call.ByName("main.GreetService.GetButDifferent"); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GetButForeignPrivateAlias() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GetButForeignPrivateAlias")); - return $resultPromise; + return $Call.ByName("main.GreetService.GetButForeignPrivateAlias"); +} + +/** + * @returns {$CancellablePromise<$models.AliasGroup>} + */ +export function GetButGenericAliases() { + return $Call.ByName("main.GreetService.GetButGenericAliases"); } /** * Greet a lot of unusual things. * @param {$models.EmptyAliasStruct} $0 * @param {$models.EmptyStruct} $1 - * @returns {Promise<$models.AliasStruct> & { cancel(): void }} + * @returns {$CancellablePromise<$models.AliasStruct>} */ export function Greet($0, $1) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", $0, $1)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", $0, $1); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js index 25e37feb0..5a5c62644 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.js @@ -14,6 +14,11 @@ import * as $models from "./models.js"; * @typedef {$models.Alias} Alias */ +/** + * A class whose fields have various aliased types. + * @typedef {$models.AliasGroup} AliasGroup + */ + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -35,12 +40,41 @@ import * as $models from "./models.js"; * @typedef {$models.EmptyStruct} EmptyStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {$models.GenericAlias} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {$models.GenericMapAlias} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T * @typedef {$models.GenericPerson} GenericPerson */ +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {$models.GenericPersonAlias} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {$models.GenericPtrAlias} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {$models.IndirectPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {$models.OtherAliasStruct} OtherAliasStruct @@ -55,3 +89,8 @@ import * as $models from "./models.js"; * Another class alias, but ordered after its aliased class. * @typedef {$models.StrangelyAliasedPerson} StrangelyAliasedPerson */ + +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {$models.TPIndirectPersonAlias} TPIndirectPersonAlias + */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js index 4f343cb4a..1ba2af395 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.js @@ -7,6 +7,19 @@ * @typedef {number} Alias */ +/** + * A class whose fields have various aliased types. + * @typedef {Object} AliasGroup + * @property {GenericAlias} GAi + * @property {GenericAlias>} GAP + * @property {GenericPtrAlias} GPAs + * @property {GenericPtrAlias>} GPAP + * @property {GenericMapAlias} GMA + * @property {GenericPersonAlias} GPA + * @property {IndirectPersonAlias} IPA + * @property {TPIndirectPersonAlias} TPIPA + */ + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -34,6 +47,18 @@ * } } EmptyStruct */ +/** + * A generic alias that forwards to a type parameter. + * @template T + * @typedef {T} GenericAlias + */ + +/** + * A generic alias that wraps a map. + * @template T,U + * @typedef {{ [_: string]: U } | null} GenericMapAlias + */ + /** * A generic struct containing an alias. * @template T @@ -42,6 +67,23 @@ * @property {Alias} AliasedField */ +/** + * A generic alias that wraps a generic struct. + * @template T + * @typedef {GenericPerson[] | null>} GenericPersonAlias + */ + +/** + * A generic alias that wraps a pointer type. + * @template T + * @typedef {GenericAlias | null} GenericPtrAlias + */ + +/** + * An alias that wraps a class through a non-typeparam alias. + * @typedef {GenericPersonAlias} IndirectPersonAlias + */ + /** * Another struct alias. * @typedef {Object} OtherAliasStruct @@ -60,6 +102,11 @@ * @typedef {Person} StrangelyAliasedPerson */ +/** + * An alias that wraps a class through a typeparam alias. + * @typedef {GenericAlias>} TPIndirectPersonAlias + */ + // In interface mode, this file is likely to contain just comments. // We add a dummy export statement to ensure it is recognised as an ES module. export {}; diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js index 2643e60ec..f62552e8a 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js index 84fb14e96..244e74afe 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function TestMethod2() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js index dad26c793..e146c3669 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {$models.Person} person * @param {$models.Embedded1} emb - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(person, emb) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", person, emb)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js index 0569e8802..03ef1f90f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -25,9 +25,8 @@ import * as $models from "./models.js"; * @param {{ [_: `${number}`]: boolean | null } | null} assoc * @param {(number | null)[] | null} $4 * @param {string[]} other - * @returns {Promise<[$models.Person, any, number[] | null]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, any, number[] | null]>} */ export function Greet(str, people, $2, assoc, $4, ...other) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js index 78783fcd6..8203e4168 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.StructA, $models.StructC]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.StructA, $models.StructC]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MakeCycles")); - return $resultPromise; + return $Call.ByName("main.GreetService.MakeCycles"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js index 5ae511419..623e88035 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * Make a cycle. - * @returns {Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]>} */ export function MakeCycles() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MakeCycles")); - return $resultPromise; + return $Call.ByName("main.GreetService.MakeCycles"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js index 4f75ec8b3..374d13203 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.InternalModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.InternalService.Method", $0)); - return $resultPromise; + return $Call.ByName("main.InternalService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js index ffc0d244c..8332051eb 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.js @@ -4,7 +4,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -12,20 +12,18 @@ import * as otherpackage$0 from "./otherpackage/models.js"; /** * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ function InternalMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.InternalMethod", $0)); - return $resultPromise; + return $Call.ByName("main.Service.InternalMethod", $0); } /** * @param {otherpackage$0.Dummy} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function VisibleMethod($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.VisibleMethod", $0)); - return $resultPromise; + return $Call.ByName("main.Service.VisibleMethod", $0); } /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js index 52f0a8c34..1fe8a0f69 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,9 +17,8 @@ import * as $models from "./models.js"; /** * @param {$models.unexportedModel} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.unexportedService.Method", $0)); - return $resultPromise; + return $Call.ByName("main.unexportedService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js index 4d53b4d23..3d245f10c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.js @@ -9,50 +9,45 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Comment 1. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method1() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method1")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method1"); } /** * Comment 2. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method2() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method2")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method2"); } /** * Comment 3a. * Comment 3b. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method3() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method3")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method3"); } /** * Comment 4. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method4() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method4")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method4"); } /** * Comment 5. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Method5() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Method5")); - return $resultPromise; + return $Call.ByName("main.GreetService.Method5"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js index 6d764269c..fa5b9a262 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,19 +19,17 @@ import * as $models from "./models.js"; * Greet does XYZ * @param {string} name * @param {$models.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name, title)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name, title); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js index c287b7631..2f953de7c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,9 +19,8 @@ import * as services$0 from "./services/models.js"; * Greet does XYZ * @param {string} name * @param {services$0.Title} title - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name, title) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name, title)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name, title); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js index 0896a296d..8ab5f3462 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js index 61a94621e..a27b0fea8 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js index 0896a296d..8ab5f3462 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js index abc8c9adc..98097e64f 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js index 3c8c10bac..e2ba84581 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js index f89c81e83..bba7ea7ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js index 630c0dee3..f89bfc417 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.js @@ -9,24 +9,22 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function GreetWithContext(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.GreetWithContext", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.GreetWithContext", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js index f89c81e83..bba7ea7ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js index f9c0ff658..80fdcd24c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.js @@ -9,6 +9,16 @@ export { import * as $models from "./models.js"; +/** + * @template S + * @typedef {$models.BasicCstrAlias} BasicCstrAlias + */ + +/** + * @template R + * @typedef {$models.ComparableCstrAlias} ComparableCstrAlias + */ + /** * @typedef {$models.EmbeddedCustomInterface} EmbeddedCustomInterface */ @@ -33,11 +43,36 @@ import * as $models from "./models.js"; * @typedef {$models.EmbeddedValuePtr} EmbeddedValuePtr */ +/** + * @template U + * @typedef {$models.GoodTildeCstrAlias} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {$models.InterfaceCstrAlias} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z * @typedef {$models.Maps} Maps */ +/** + * @template X + * @typedef {$models.MixedCstrAlias} MixedCstrAlias + */ + +/** + * @template V + * @typedef {$models.NonBasicCstrAlias} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {$models.PointableCstrAlias} PointableCstrAlias + */ + /** * @typedef {$models.PointerAlias} PointerAlias */ diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js index c9ea922a3..cee61a5e4 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.js @@ -2,6 +2,16 @@ // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT +/** + * @template S + * @typedef {S} BasicCstrAlias + */ + +/** + * @template R + * @typedef {R} ComparableCstrAlias + */ + /** * @typedef {string} EmbeddedCustomInterface */ @@ -26,6 +36,16 @@ * @typedef {string} EmbeddedValuePtr */ +/** + * @template U + * @typedef {U} GoodTildeCstrAlias + */ + +/** + * @template Y + * @typedef {Y} InterfaceCstrAlias + */ + /** * @template R,S,T,U,V,W,X,Y,Z * @typedef {Object} Maps @@ -118,6 +138,77 @@ * @property {{ [_: string]: number } | null} TPYPtr - Soft reject * @property {{ [_: string]: number } | null} TPZ - Accept, hide * @property {{ [_: string]: number } | null} TPZPtr - Soft reject + * @property {{ [_: string]: number } | null} GAR - Soft reject + * @property {{ [_: string]: number } | null} GARPtr - Soft reject + * @property {{ [_: string]: number } | null} GAS - Accept, hide + * @property {{ [_: string]: number } | null} GASPtr - Soft reject + * @property {{ [_: string]: number } | null} GAT - Soft reject + * @property {{ [_: string]: number } | null} GATPtr - Soft reject + * @property {{ [_: string]: number } | null} GAU - Accept, hide + * @property {{ [_: string]: number } | null} GAUPtr - Soft reject + * @property {{ [_: string]: number } | null} GAV - Accept, hide + * @property {{ [_: string]: number } | null} GAVPtr - Soft reject + * @property {{ [_: string]: number } | null} GAW - Soft reject + * @property {{ [_: string]: number } | null} GAWPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAX - Accept, hide + * @property {{ [_: string]: number } | null} GAXPtr - Soft reject + * @property {{ [_: string]: number } | null} GAY - Accept, hide + * @property {{ [_: string]: number } | null} GAYPtr - Soft reject + * @property {{ [_: string]: number } | null} GAZ - Accept, hide + * @property {{ [_: string]: number } | null} GAZPtr - Soft reject + * @property {{ [_: `${number}`]: number } | null} GACi - Accept, hide + * @property {{ [_: ComparableCstrAlias]: number } | null} GACV - Accept + * @property {{ [_: string]: number } | null} GACP - Reject + * @property {{ [_: string]: number } | null} GACiPtr - Reject + * @property {{ [_: string]: number } | null} GACVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GACPPtr - Accept, hide + * @property {{ [_: `${number}`]: number } | null} GABi - Accept, hide + * @property {{ [_: BasicCstrAlias]: number } | null} GABs - Accept + * @property {{ [_: string]: number } | null} GABiPtr - Reject + * @property {{ [_: string]: number } | null} GABT - Reject + * @property {{ [_: string]: number } | null} GABTPtr - Reject + * @property {{ [_: GoodTildeCstrAlias]: number } | null} GAGT - Accept + * @property {{ [_: string]: number } | null} GAGTPtr - Accept, hide + * @property {{ [_: NonBasicCstrAlias]: number } | null} GANBV - Accept + * @property {{ [_: string]: number } | null} GANBP - Accept, hide + * @property {{ [_: string]: number } | null} GANBVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GANBPPtr - Reject + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlV1 - Accept + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlV2 - Accept + * @property {{ [_: string]: number } | null} GAPlP1 - Reject + * @property {{ [_: PointableCstrAlias]: number } | null} GAPlP2 - Accept + * @property {{ [_: string]: number } | null} GAPlVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAPlPPtr - Accept, hide + * @property {{ [_: `${number}`]: number } | null} GAMi - Accept, hide + * @property {{ [_: MixedCstrAlias]: number } | null} GAMS - Accept + * @property {{ [_: MixedCstrAlias]: number } | null} GAMV - Accept + * @property {{ [_: string]: number } | null} GAMSPtr - Reject + * @property {{ [_: string]: number } | null} GAMVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAII - Accept, hide + * @property {{ [_: InterfaceCstrAlias]: number } | null} GAIV - Accept + * @property {{ [_: string]: number } | null} GAIP - Accept, hide + * @property {{ [_: string]: number } | null} GAIIPtr - Reject + * @property {{ [_: string]: number } | null} GAIVPtr - Accept, hide + * @property {{ [_: string]: number } | null} GAIPPtr - Reject + * @property {{ [_: string]: number } | null} GAPrV - Accept, hide + * @property {{ [_: string]: number } | null} GAPrP - Accept, hide + * @property {{ [_: string]: number } | null} GAPrVPtr - Reject + * @property {{ [_: string]: number } | null} GAPrPPtr - Reject + */ + +/** + * @template X + * @typedef {X} MixedCstrAlias + */ + +/** + * @template V + * @typedef {V} NonBasicCstrAlias + */ + +/** + * @template W + * @typedef {W} PointableCstrAlias */ /** diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js index ec0d3c0b2..e207d968c 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.js @@ -4,16 +4,15 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.Method")); - return $resultPromise; + return $Call.ByName("main.Service.Method"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js index 45837d506..9ad0c6d96 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.js @@ -4,16 +4,15 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; /** - * @returns {Promise<$models.Data> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Data>} */ export function Method() { - let $resultPromise = /** @type {any} */($Call.ByName("main.Service.Method")); - return $resultPromise; + return $Call.ByName("main.Service.Method"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js index d93f2bf6f..c3f8ff04b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js index 9d18e16da..92435f679 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,18 +17,16 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne"); } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js index 3842a37d7..490c12c08 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.js @@ -9,13 +9,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedOther.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("main.EmbedOther.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js index b35360d80..5f940b2c7 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,18 +17,16 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. - * @returns {Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void }} + * @returns {$CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]>} */ export function LikeThisOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedService.LikeThisOne")); - return $resultPromise; + return $Call.ByName("main.EmbedService.LikeThisOne"); } /** * LikeThisOtherOne does nothing as well, but is different. - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function LikeThisOtherOne() { - let $resultPromise = /** @type {any} */($Call.ByName("main.EmbedService.LikeThisOtherOne")); - return $resultPromise; + return $Call.ByName("main.EmbedService.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js index 5924c91ad..f8c6b19b2 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} $0 - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet($0) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", $0)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", $0); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js index 3c8c10bac..e2ba84581 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js index d12d49d80..2fdca31cc 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByName("main.OtherService.Hello")); - return $resultPromise; + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js index 3c8c10bac..e2ba84581 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.js @@ -4,13 +4,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js index d12d49d80..2fdca31cc 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.js @@ -4,12 +4,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Hello() { - let $resultPromise = /** @type {any} */($Call.ByName("main.OtherService.Hello")); - return $resultPromise; + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js index 0896a296d..8ab5f3462 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js index 6cec0768c..911d42560 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js index dae4fb2e5..eca08a018 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,387 +17,344 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.ArrayInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.ArrayInt", $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.BoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntInIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntInIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntInt", $in); } /** * @param {{ [_: `${number}`]: number | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntIntPointer", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] | null } | null>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NoInputsStringOut")); - return $resultPromise; + return $Call.ByName("main.GreetService.NoInputsStringOut"); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerBoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerMapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerStringInStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructInputStructOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructInputStructOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntInUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js index dae4fb2e5..eca08a018 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,387 +17,344 @@ import * as $models from "./models.js"; /** * @param {number[]} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function ArrayInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.ArrayInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.ArrayInt", $in); } /** * @param {boolean} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function BoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.BoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Float64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Float64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8InIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8InIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Int8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Int8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntInIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntInIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntInIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function IntPointerInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntInt", $in); } /** * @param {{ [_: `${number}`]: number | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntIntPointer($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntIntPointer", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function MapIntSliceInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } /** * @param {{ [_: `${number}`]: number[] | null } | null} $in - * @returns {Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void }} + * @returns {$CancellablePromise<{ [_: `${number}`]: number[] | null } | null>} */ export function MapIntSliceIntInMapIntSliceIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in); } /** - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function NoInputsStringOut() { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NoInputsStringOut")); - return $resultPromise; + return $Call.ByName("main.GreetService.NoInputsStringOut"); } /** * @param {boolean | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerBoolInBoolOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerBoolInBoolOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat32InFloat32Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerFloat64InFloat64Out($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } /** * @param {{ [_: `${number}`]: number } | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerMapIntInt($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerMapIntInt", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } /** * @param {string | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function PointerStringInStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.PointerStringInStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputNamedOutputs($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringArrayOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in); } /** * @param {string[] | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StringArrayInputStringOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StringArrayInputStringOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } /** * @param {$models.Person} $in - * @returns {Promise<$models.Person> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person>} */ export function StructInputStructOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructInputStructOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructInputStructOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function StructPointerInputErrorOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } /** * @param {$models.Person | null} $in - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function StructPointerInputStructPointerOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt16PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt32PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt64PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8InUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8InUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UInt8PointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } /** * @param {number} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntInUIntOut($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntInUIntOut", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } /** * @param {number | null} $in - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function UIntPointerInAndOutput($in) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.UIntPointerInAndOutput", $in)); - return $resultPromise; + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js index f89c81e83..bba7ea7ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js index f89c81e83..bba7ea7ea 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.js @@ -9,14 +9,13 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js index 0896a296d..8ab5f3462 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.js @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,19 +18,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ * @param {string} name - * @returns {Promise & { cancel(): void }} + * @returns {$CancellablePromise} */ export function Greet(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.Greet", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person * @param {string} name - * @returns {Promise<$models.Person | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Person | null>} */ export function NewPerson(name) { - let $resultPromise = /** @type {any} */($Call.ByName("main.GreetService.NewPerson", name)); - return $resultPromise; + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js index 6b15c3e22..6594edc5b 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.js @@ -10,7 +10,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,9 +18,8 @@ import * as $models from "./models.js"; /** * Yay does this and that - * @returns {Promise<$models.Address | null> & { cancel(): void }} + * @returns {$CancellablePromise<$models.Address | null>} */ export function Yay() { - let $resultPromise = /** @type {any} */($Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay")); - return $resultPromise; + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/warnings.log b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/warnings.log +++ b/v3/internal/generator/testdata/output/lang=JS/UseInterfaces=true/UseNames=true/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/json/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/json/models.ts index 41353d635..8cd1a164f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/json/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/json/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Marshaler is the interface implemented by types that diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/models.ts index 1ff6fc7ec..235dfce3e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/encoding/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * TextMarshaler is the interface implemented by an object that can diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts index 019d99750..3c6865881 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -21,70 +21,62 @@ import * as $models from "./models.js"; /** * Get someone. */ -export function Get(aliasValue: $models.Alias): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(1928502664, aliasValue) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Get(aliasValue: $models.Alias): $CancellablePromise<$models.Person> { + return $Call.ByID(1928502664, aliasValue).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * Apparently, aliases are all the rage right now. */ -export function GetButAliased(p: $models.AliasedPerson): Promise<$models.StrangelyAliasedPerson> & { cancel(): void } { - let $resultPromise = $Call.ByID(1896499664, p) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButAliased(p: $models.AliasedPerson): $CancellablePromise<$models.StrangelyAliasedPerson> { + return $Call.ByID(1896499664, p).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * Get someone quite different. */ -export function GetButDifferent(): Promise<$models.GenericPerson> & { cancel(): void } { - let $resultPromise = $Call.ByID(2240931744) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButDifferent(): $CancellablePromise<$models.GenericPerson> { + return $Call.ByID(2240931744).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function GetButForeignPrivateAlias(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(643456960) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButForeignPrivateAlias(): $CancellablePromise { + return $Call.ByID(643456960).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); +} + +export function GetButGenericAliases(): $CancellablePromise<$models.AliasGroup> { + return $Call.ByID(914093800).then(($result: any) => { + return $$createType3($result); + }); } /** * Greet a lot of unusual things. */ -export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): Promise<$models.AliasStruct> & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, $0, $1) as any; - let $typingPromise = $resultPromise.then(($result: any) => { - return $$createType6($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; +export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): $CancellablePromise<$models.AliasStruct> { + return $Call.ByID(1411160069, $0, $1).then(($result: any) => { + return $$createType7($result); + }); } // Private type creation functions const $$createType0 = $models.Person.createFrom; const $$createType1 = $models.GenericPerson.createFrom($Create.Any); const $$createType2 = nobindingshere$0.personImpl.createFrom; -const $$createType3 = $Create.Array($Create.Any); +const $$createType3 = $models.AliasGroup.createFrom; const $$createType4 = $Create.Array($Create.Any); -const $$createType5 = $Create.Struct({ - "NoMoreIdeas": $$createType4, -}); +const $$createType5 = $Create.Array($Create.Any); const $$createType6 = $Create.Struct({ - "Foo": $$createType3, - "Other": $$createType5, + "NoMoreIdeas": $$createType5, +}); +const $$createType7 = $Create.Struct({ + "Foo": $$createType4, + "Other": $$createType6, }); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts index b0e392853..13f61da0f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts @@ -7,16 +7,23 @@ export { }; export { + AliasGroup, AliasedPerson, EmptyStruct, GenericPerson, + GenericPersonAlias, + IndirectPersonAlias, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; export type { Alias, AliasStruct, EmptyAliasStruct, + GenericAlias, + GenericMapAlias, + GenericPtrAlias, OtherAliasStruct } from "./models.js"; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts index 481c39bda..63ca43914 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts @@ -3,13 +3,93 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * A nice type Alias. */ export type Alias = number; +/** + * A class whose fields have various aliased types. + */ +export class AliasGroup { + "GAi": GenericAlias; + "GAP": GenericAlias>; + "GPAs": GenericPtrAlias; + "GPAP": GenericPtrAlias>; + "GMA": GenericMapAlias; + "GPA": GenericPersonAlias; + "IPA": IndirectPersonAlias; + "TPIPA": TPIndirectPersonAlias; + + /** Creates a new AliasGroup instance. */ + constructor($$source: Partial = {}) { + if (!("GAi" in $$source)) { + this["GAi"] = 0; + } + if (!("GAP" in $$source)) { + this["GAP"] = (new GenericPerson()); + } + if (!("GPAs" in $$source)) { + this["GPAs"] = null; + } + if (!("GPAP" in $$source)) { + this["GPAP"] = null; + } + if (!("GMA" in $$source)) { + this["GMA"] = {}; + } + if (!("GPA" in $$source)) { + this["GPA"] = (new GenericPersonAlias()); + } + if (!("IPA" in $$source)) { + this["IPA"] = (new IndirectPersonAlias()); + } + if (!("TPIPA" in $$source)) { + this["TPIPA"] = (new TPIndirectPersonAlias()); + } + + Object.assign(this, $$source); + } + + /** + * Creates a new AliasGroup instance from a string or object. + */ + static createFrom($$source: any = {}): AliasGroup { + const $$createField1_0 = $$createType0; + const $$createField2_0 = $$createType2; + const $$createField3_0 = $$createType5; + const $$createField4_0 = $$createType6; + const $$createField5_0 = $$createType8; + const $$createField6_0 = $$createType8; + const $$createField7_0 = $$createType0; + let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; + if ("GAP" in $$parsedSource) { + $$parsedSource["GAP"] = $$createField1_0($$parsedSource["GAP"]); + } + if ("GPAs" in $$parsedSource) { + $$parsedSource["GPAs"] = $$createField2_0($$parsedSource["GPAs"]); + } + if ("GPAP" in $$parsedSource) { + $$parsedSource["GPAP"] = $$createField3_0($$parsedSource["GPAP"]); + } + if ("GMA" in $$parsedSource) { + $$parsedSource["GMA"] = $$createField4_0($$parsedSource["GMA"]); + } + if ("GPA" in $$parsedSource) { + $$parsedSource["GPA"] = $$createField5_0($$parsedSource["GPA"]); + } + if ("IPA" in $$parsedSource) { + $$parsedSource["IPA"] = $$createField6_0($$parsedSource["IPA"]); + } + if ("TPIPA" in $$parsedSource) { + $$parsedSource["TPIPA"] = $$createField7_0($$parsedSource["TPIPA"]); + } + return new AliasGroup($$parsedSource as Partial); + } +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -58,6 +138,16 @@ export class EmptyStruct { } } +/** + * A generic alias that forwards to a type parameter. + */ +export type GenericAlias = T; + +/** + * A generic alias that wraps a map. + */ +export type GenericMapAlias = { [_: string]: U }; + /** * A generic struct containing an alias. */ @@ -79,7 +169,7 @@ export class GenericPerson { * returns a creation function for a concrete instance * of the generic class GenericPerson. */ - static createFrom($$createParamT: (source: any) => T): ($$source?: any) => GenericPerson { + static createFrom($$createParamT: (source: any) => T): ($$source?: any) => GenericPerson { const $$createField0_0 = $$createParamT; return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -91,6 +181,31 @@ export class GenericPerson { } } +/** + * A generic alias that wraps a generic struct. + */ +export const GenericPersonAlias = GenericPerson; + +/** + * A generic alias that wraps a generic struct. + */ +export type GenericPersonAlias = GenericPerson[]>; + +/** + * A generic alias that wraps a pointer type. + */ +export type GenericPtrAlias = GenericAlias | null; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export const IndirectPersonAlias = GenericPersonAlias; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export type IndirectPersonAlias = GenericPersonAlias; + /** * Another struct alias. */ @@ -152,3 +267,24 @@ export const StrangelyAliasedPerson = Person; * Another class alias, but ordered after its aliased class. */ export type StrangelyAliasedPerson = Person; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export const TPIndirectPersonAlias = GenericPerson; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export type TPIndirectPersonAlias = GenericAlias>; + +// Private type creation functions +const $$createType0 = GenericPerson.createFrom($Create.Any); +const $$createType1 = $Create.Array($Create.Any); +const $$createType2 = $Create.Nullable($$createType1); +const $$createType3 = $Create.Array($Create.Any); +const $$createType4 = GenericPerson.createFrom($$createType3); +const $$createType5 = $Create.Nullable($$createType4); +const $$createType6 = $Create.Map($Create.Any, $Create.Any); +const $$createType7 = $Create.Array($Create.Any); +const $$createType8 = GenericPerson.createFrom($$createType7); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts index af462b1e4..8fe0035ed 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function TestMethod(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2241101727) as any; - return $resultPromise; +export function TestMethod(): $CancellablePromise { + return $Call.ByID(2241101727); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts index 760e03c4a..8260ce500 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function TestMethod2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1556848345) as any; - return $resultPromise; +export function TestMethod2(): $CancellablePromise { + return $Call.ByID(1556848345); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts index 3816bcdee..69c89433a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(person: $models.Person, emb: $models.Embedded1): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, person, emb) as any; - return $resultPromise; +export function Greet(person: $models.Person, emb: $models.Embedded1): $CancellablePromise { + return $Call.ByID(1411160069, person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts index 2ff5d6635..50f23b52d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Embedded1 { /** diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts index fb057998c..cc1e88ad7 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,15 +19,12 @@ import * as $models from "./models.js"; * It has a multiline doc comment * The comment has even some * / traps!! */ -export function Greet(str: string, people: $models.Person[], $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null }, $4: (number | null)[], ...other: string[]): Promise<[$models.Person, any, number[]]> & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, str, people, $2, assoc, $4, other) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Greet(str: string, people: $models.Person[], $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null }, $4: (number | null)[], ...other: string[]): $CancellablePromise<[$models.Person, any, number[]]> { + return $Call.ByID(1411160069, str, people, $2, assoc, $4, other).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[2] = $$createType1($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts index 66dc14092..2417aff4c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Person represents a person diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts index 22900e8d1..c1c70be69 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,12 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.StructA, $models.StructC]> & { cancel(): void } { - let $resultPromise = $Call.ByID(440020721) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MakeCycles(): $CancellablePromise<[$models.StructA, $models.StructC]> { + return $Call.ByID(440020721).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts index a79d42f32..9e86cd674 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class StructA { "B": structB | null; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts index 26782f46b..cbddfb346 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,19 +17,16 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void } { - let $resultPromise = $Call.ByID(440020721) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MakeCycles(): $CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> { + return $Call.ByID(440020721).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType9($result[1]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions -var $$createType0 = (function $$initCreateType0(...args): any { +var $$createType0 = (function $$initCreateType0(...args: any[]): any { if ($$createType0 === $$initCreateType0) { $$createType0 = $$createType3; } @@ -38,7 +35,7 @@ var $$createType0 = (function $$initCreateType0(...args): any { const $$createType1 = $Create.Nullable($$createType0); const $$createType2 = $Create.Map($Create.Any, $$createType1); const $$createType3 = $Create.Array($$createType2); -var $$createType4 = (function $$initCreateType4(...args): any { +var $$createType4 = (function $$initCreateType4(...args: any[]): any { if ($$createType4 === $$initCreateType4) { $$createType4 = $$createType8; } @@ -51,7 +48,7 @@ const $$createType7 = $Create.Struct({ "Y": $$createType6, }); const $$createType8 = $Create.Array($$createType7); -var $$createType9 = (function $$initCreateType9(...args): any { +var $$createType9 = (function $$initCreateType9(...args: any[]): any { if ($$createType9 === $$initCreateType9) { $$createType9 = $$createType13; } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts index ed98e9791..93d1ef5c6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export type Alias = Cyclic | null; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts index 58842ad2d..b968330db 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.InternalModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(538079117, $0) as any; - return $resultPromise; +export function Method($0: $models.InternalModel): $CancellablePromise { + return $Call.ByID(538079117, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts index 489296e23..4d242fc2c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * An exported but internal model. diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts index 209ade5da..b927155d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Dummy { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts index 266a81058..338c7fbd1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts @@ -3,20 +3,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as otherpackage$0 from "./otherpackage/models.js"; -function InternalMethod($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3518775569, $0) as any; - return $resultPromise; +function InternalMethod($0: string): $CancellablePromise { + return $Call.ByID(3518775569, $0); } -export function VisibleMethod($0: otherpackage$0.Dummy): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(474018228, $0) as any; - return $resultPromise; +export function VisibleMethod($0: otherpackage$0.Dummy): $CancellablePromise { + return $Call.ByID(474018228, $0); } export async function CustomMethod(arg: string): Promise { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts index 3c52fd31e..a819daffd 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.unexportedModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(37626172, $0) as any; - return $resultPromise; +export function Method($0: $models.unexportedModel): $CancellablePromise { + return $Call.ByID(37626172, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts index 5174c8ec7..b5d189f76 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts @@ -8,45 +8,40 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Comment 1. */ -export function Method1(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(841558284) as any; - return $resultPromise; +export function Method1(): $CancellablePromise { + return $Call.ByID(841558284); } /** * Comment 2. */ -export function Method2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(891891141) as any; - return $resultPromise; +export function Method2(): $CancellablePromise { + return $Call.ByID(891891141); } /** * Comment 3a. * Comment 3b. */ -export function Method3(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(875113522) as any; - return $resultPromise; +export function Method3(): $CancellablePromise { + return $Call.ByID(875113522); } /** * Comment 4. */ -export function Method4(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(791225427) as any; - return $resultPromise; +export function Method4(): $CancellablePromise { + return $Call.ByID(791225427); } /** * Comment 5. */ -export function Method5(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(774447808) as any; - return $resultPromise; +export function Method5(): $CancellablePromise { + return $Call.ByID(774447808); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts index da5d96205..10de8838c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: $models.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name, title) as any; - return $resultPromise; +export function Greet(name: string, title: $models.Title): $CancellablePromise { + return $Call.ByID(1411160069, name, title); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts index 7b8cbf2fc..a50282a38 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Age is an integer with some predefined values diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts index 3b632d9d1..3bce7b000 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as services$0 from "./services/models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: services$0.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name, title) as any; - return $resultPromise; +export function Greet(name: string, title: services$0.Title): $CancellablePromise { + return $Call.ByID(1411160069, name, title); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts index 335543dbb..661222bdf 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export enum Title { /** diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts index 07b718c99..88cafa9d1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts index 02707e2ca..f1ff262a1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts index 13a82546a..8dc381545 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2007737399) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(2007737399).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts index 07b718c99..88cafa9d1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts index c4a6d39ee..88b2c78db 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts index f3c4c0c43..fe69a1da0 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2447353446) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(2447353446).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts index 71b020797..62283209b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts index b14533c7b..6e6ac2007 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts index 1e307faef..386913d65 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts @@ -8,20 +8,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * Greet someone */ -export function GreetWithContext(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1310150960, name) as any; - return $resultPromise; +export function GreetWithContext(name: string): $CancellablePromise { + return $Call.ByID(1310150960, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts index b14533c7b..6e6ac2007 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts index 1f4f65dda..b5890af28 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts @@ -11,12 +11,19 @@ export { } from "./models.js"; export type { + BasicCstrAlias, + ComparableCstrAlias, EmbeddedCustomInterface, EmbeddedOriginalInterface, EmbeddedPointer, EmbeddedPointerPtr, EmbeddedValue, EmbeddedValuePtr, + GoodTildeCstrAlias, + InterfaceCstrAlias, + MixedCstrAlias, + NonBasicCstrAlias, + PointableCstrAlias, PointerAlias, PointerTextMarshaler, StringAlias, diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts index d858ddf9a..0d26a6b0b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts @@ -3,7 +3,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; + +export type BasicCstrAlias = S; + +export type ComparableCstrAlias = R; export type EmbeddedCustomInterface = string; @@ -17,6 +21,10 @@ export type EmbeddedValue = string; export type EmbeddedValuePtr = string; +export type GoodTildeCstrAlias = U; + +export type InterfaceCstrAlias = Y; + export class Maps { /** * Reject @@ -463,6 +471,286 @@ export class Maps { */ "TPZPtr": { [_: string]: number }; + /** + * Soft reject + */ + "GAR": { [_: string]: number }; + + /** + * Soft reject + */ + "GARPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAS": { [_: string]: number }; + + /** + * Soft reject + */ + "GASPtr": { [_: string]: number }; + + /** + * Soft reject + */ + "GAT": { [_: string]: number }; + + /** + * Soft reject + */ + "GATPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAU": { [_: string]: number }; + + /** + * Soft reject + */ + "GAUPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAV": { [_: string]: number }; + + /** + * Soft reject + */ + "GAVPtr": { [_: string]: number }; + + /** + * Soft reject + */ + "GAW": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAWPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAX": { [_: string]: number }; + + /** + * Soft reject + */ + "GAXPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAY": { [_: string]: number }; + + /** + * Soft reject + */ + "GAYPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAZ": { [_: string]: number }; + + /** + * Soft reject + */ + "GAZPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GACV": { [_: ComparableCstrAlias]: number }; + + /** + * Reject + */ + "GACP": { [_: string]: number }; + + /** + * Reject + */ + "GACiPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GABi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GABs": { [_: BasicCstrAlias]: number }; + + /** + * Reject + */ + "GABiPtr": { [_: string]: number }; + + /** + * Reject + */ + "GABT": { [_: string]: number }; + + /** + * Reject + */ + "GABTPtr": { [_: string]: number }; + + /** + * Accept + */ + "GAGT": { [_: GoodTildeCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAGTPtr": { [_: string]: number }; + + /** + * Accept + */ + "GANBV": { [_: NonBasicCstrAlias]: number }; + + /** + * Accept, hide + */ + "GANBP": { [_: string]: number }; + + /** + * Accept, hide + */ + "GANBVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GANBPPtr": { [_: string]: number }; + + /** + * Accept + */ + "GAPlV1": { [_: PointableCstrAlias]: number }; + + /** + * Accept + */ + "GAPlV2": { [_: PointableCstrAlias]: number }; + + /** + * Reject + */ + "GAPlP1": { [_: string]: number }; + + /** + * Accept + */ + "GAPlP2": { [_: PointableCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAPlVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPlPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAMi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GAMS": { [_: MixedCstrAlias]: number }; + + /** + * Accept + */ + "GAMV": { [_: MixedCstrAlias]: number }; + + /** + * Reject + */ + "GAMSPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAMVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAII": { [_: string]: number }; + + /** + * Accept + */ + "GAIV": { [_: InterfaceCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAIP": { [_: string]: number }; + + /** + * Reject + */ + "GAIIPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAIVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GAIPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPrV": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPrP": { [_: string]: number }; + + /** + * Reject + */ + "GAPrVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GAPrPPtr": { [_: string]: number }; + /** Creates a new Maps instance. */ constructor($$source: Partial> = {}) { if (!("Bool" in $$source)) { @@ -732,6 +1020,174 @@ export class Maps { if (!("TPZPtr" in $$source)) { this["TPZPtr"] = {}; } + if (!("GAR" in $$source)) { + this["GAR"] = {}; + } + if (!("GARPtr" in $$source)) { + this["GARPtr"] = {}; + } + if (!("GAS" in $$source)) { + this["GAS"] = {}; + } + if (!("GASPtr" in $$source)) { + this["GASPtr"] = {}; + } + if (!("GAT" in $$source)) { + this["GAT"] = {}; + } + if (!("GATPtr" in $$source)) { + this["GATPtr"] = {}; + } + if (!("GAU" in $$source)) { + this["GAU"] = {}; + } + if (!("GAUPtr" in $$source)) { + this["GAUPtr"] = {}; + } + if (!("GAV" in $$source)) { + this["GAV"] = {}; + } + if (!("GAVPtr" in $$source)) { + this["GAVPtr"] = {}; + } + if (!("GAW" in $$source)) { + this["GAW"] = {}; + } + if (!("GAWPtr" in $$source)) { + this["GAWPtr"] = {}; + } + if (!("GAX" in $$source)) { + this["GAX"] = {}; + } + if (!("GAXPtr" in $$source)) { + this["GAXPtr"] = {}; + } + if (!("GAY" in $$source)) { + this["GAY"] = {}; + } + if (!("GAYPtr" in $$source)) { + this["GAYPtr"] = {}; + } + if (!("GAZ" in $$source)) { + this["GAZ"] = {}; + } + if (!("GAZPtr" in $$source)) { + this["GAZPtr"] = {}; + } + if (!("GACi" in $$source)) { + this["GACi"] = {}; + } + if (!("GACV" in $$source)) { + this["GACV"] = {}; + } + if (!("GACP" in $$source)) { + this["GACP"] = {}; + } + if (!("GACiPtr" in $$source)) { + this["GACiPtr"] = {}; + } + if (!("GACVPtr" in $$source)) { + this["GACVPtr"] = {}; + } + if (!("GACPPtr" in $$source)) { + this["GACPPtr"] = {}; + } + if (!("GABi" in $$source)) { + this["GABi"] = {}; + } + if (!("GABs" in $$source)) { + this["GABs"] = {}; + } + if (!("GABiPtr" in $$source)) { + this["GABiPtr"] = {}; + } + if (!("GABT" in $$source)) { + this["GABT"] = {}; + } + if (!("GABTPtr" in $$source)) { + this["GABTPtr"] = {}; + } + if (!("GAGT" in $$source)) { + this["GAGT"] = {}; + } + if (!("GAGTPtr" in $$source)) { + this["GAGTPtr"] = {}; + } + if (!("GANBV" in $$source)) { + this["GANBV"] = {}; + } + if (!("GANBP" in $$source)) { + this["GANBP"] = {}; + } + if (!("GANBVPtr" in $$source)) { + this["GANBVPtr"] = {}; + } + if (!("GANBPPtr" in $$source)) { + this["GANBPPtr"] = {}; + } + if (!("GAPlV1" in $$source)) { + this["GAPlV1"] = {}; + } + if (!("GAPlV2" in $$source)) { + this["GAPlV2"] = {}; + } + if (!("GAPlP1" in $$source)) { + this["GAPlP1"] = {}; + } + if (!("GAPlP2" in $$source)) { + this["GAPlP2"] = {}; + } + if (!("GAPlVPtr" in $$source)) { + this["GAPlVPtr"] = {}; + } + if (!("GAPlPPtr" in $$source)) { + this["GAPlPPtr"] = {}; + } + if (!("GAMi" in $$source)) { + this["GAMi"] = {}; + } + if (!("GAMS" in $$source)) { + this["GAMS"] = {}; + } + if (!("GAMV" in $$source)) { + this["GAMV"] = {}; + } + if (!("GAMSPtr" in $$source)) { + this["GAMSPtr"] = {}; + } + if (!("GAMVPtr" in $$source)) { + this["GAMVPtr"] = {}; + } + if (!("GAII" in $$source)) { + this["GAII"] = {}; + } + if (!("GAIV" in $$source)) { + this["GAIV"] = {}; + } + if (!("GAIP" in $$source)) { + this["GAIP"] = {}; + } + if (!("GAIIPtr" in $$source)) { + this["GAIIPtr"] = {}; + } + if (!("GAIVPtr" in $$source)) { + this["GAIVPtr"] = {}; + } + if (!("GAIPPtr" in $$source)) { + this["GAIPPtr"] = {}; + } + if (!("GAPrV" in $$source)) { + this["GAPrV"] = {}; + } + if (!("GAPrP" in $$source)) { + this["GAPrP"] = {}; + } + if (!("GAPrVPtr" in $$source)) { + this["GAPrVPtr"] = {}; + } + if (!("GAPrPPtr" in $$source)) { + this["GAPrPPtr"] = {}; + } Object.assign(this, $$source); } @@ -741,7 +1197,7 @@ export class Maps { * returns a creation function for a concrete instance * of the generic class Maps. */ - static createFrom($$createParamR: (source: any) => R, $$createParamS: (source: any) => S, $$createParamT: (source: any) => T, $$createParamU: (source: any) => U, $$createParamV: (source: any) => V, $$createParamW: (source: any) => W, $$createParamX: (source: any) => X, $$createParamY: (source: any) => Y, $$createParamZ: (source: any) => Z): ($$source?: any) => Maps { + static createFrom($$createParamR: (source: any) => R, $$createParamS: (source: any) => S, $$createParamT: (source: any) => T, $$createParamU: (source: any) => U, $$createParamV: (source: any) => V, $$createParamW: (source: any) => W, $$createParamX: (source: any) => X, $$createParamY: (source: any) => Y, $$createParamZ: (source: any) => Z): ($$source?: any) => Maps { const $$createField0_0 = $$createType0; const $$createField1_0 = $$createType1; const $$createField2_0 = $$createType2; @@ -831,6 +1287,62 @@ export class Maps { const $$createField86_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField87_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField88_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField89_0 = $$createType59($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField90_0 = $$createType60($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField91_0 = $$createType61($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField92_0 = $$createType62($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField93_0 = $$createType63($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField94_0 = $$createType64($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField95_0 = $$createType65($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField96_0 = $$createType66($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField97_0 = $$createType67($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField98_0 = $$createType68($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField99_0 = $$createType69($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField100_0 = $$createType70($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField101_0 = $$createType71($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField102_0 = $$createType72($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField103_0 = $$createType73($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField104_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField105_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField106_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField107_0 = $$createType1; + const $$createField108_0 = $$createType15; + const $$createField109_0 = $$createType17; + const $$createField110_0 = $$createType8; + const $$createField111_0 = $$createType16; + const $$createField112_0 = $$createType18; + const $$createField113_0 = $$createType1; + const $$createField114_0 = $$createType7; + const $$createField115_0 = $$createType8; + const $$createField116_0 = $$createType77; + const $$createField117_0 = $$createType78; + const $$createField118_0 = $$createType15; + const $$createField119_0 = $$createType16; + const $$createField120_0 = $$createType15; + const $$createField121_0 = $$createType18; + const $$createField122_0 = $$createType16; + const $$createField123_0 = $$createType53; + const $$createField124_0 = $$createType15; + const $$createField125_0 = $$createType16; + const $$createField126_0 = $$createType17; + const $$createField127_0 = $$createType18; + const $$createField128_0 = $$createType16; + const $$createField129_0 = $$createType18; + const $$createField130_0 = $$createType2; + const $$createField131_0 = $$createType42; + const $$createField132_0 = $$createType15; + const $$createField133_0 = $$createType79; + const $$createField134_0 = $$createType16; + const $$createField135_0 = $$createType23; + const $$createField136_0 = $$createType15; + const $$createField137_0 = $$createType18; + const $$createField138_0 = $$createType24; + const $$createField139_0 = $$createType16; + const $$createField140_0 = $$createType53; + const $$createField141_0 = $$createType16; + const $$createField142_0 = $$createType18; + const $$createField143_0 = $$createType48; + const $$createField144_0 = $$createType53; return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; if ("Bool" in $$parsedSource) { @@ -1100,11 +1612,185 @@ export class Maps { if ("TPZPtr" in $$parsedSource) { $$parsedSource["TPZPtr"] = $$createField88_0($$parsedSource["TPZPtr"]); } + if ("GAR" in $$parsedSource) { + $$parsedSource["GAR"] = $$createField89_0($$parsedSource["GAR"]); + } + if ("GARPtr" in $$parsedSource) { + $$parsedSource["GARPtr"] = $$createField90_0($$parsedSource["GARPtr"]); + } + if ("GAS" in $$parsedSource) { + $$parsedSource["GAS"] = $$createField91_0($$parsedSource["GAS"]); + } + if ("GASPtr" in $$parsedSource) { + $$parsedSource["GASPtr"] = $$createField92_0($$parsedSource["GASPtr"]); + } + if ("GAT" in $$parsedSource) { + $$parsedSource["GAT"] = $$createField93_0($$parsedSource["GAT"]); + } + if ("GATPtr" in $$parsedSource) { + $$parsedSource["GATPtr"] = $$createField94_0($$parsedSource["GATPtr"]); + } + if ("GAU" in $$parsedSource) { + $$parsedSource["GAU"] = $$createField95_0($$parsedSource["GAU"]); + } + if ("GAUPtr" in $$parsedSource) { + $$parsedSource["GAUPtr"] = $$createField96_0($$parsedSource["GAUPtr"]); + } + if ("GAV" in $$parsedSource) { + $$parsedSource["GAV"] = $$createField97_0($$parsedSource["GAV"]); + } + if ("GAVPtr" in $$parsedSource) { + $$parsedSource["GAVPtr"] = $$createField98_0($$parsedSource["GAVPtr"]); + } + if ("GAW" in $$parsedSource) { + $$parsedSource["GAW"] = $$createField99_0($$parsedSource["GAW"]); + } + if ("GAWPtr" in $$parsedSource) { + $$parsedSource["GAWPtr"] = $$createField100_0($$parsedSource["GAWPtr"]); + } + if ("GAX" in $$parsedSource) { + $$parsedSource["GAX"] = $$createField101_0($$parsedSource["GAX"]); + } + if ("GAXPtr" in $$parsedSource) { + $$parsedSource["GAXPtr"] = $$createField102_0($$parsedSource["GAXPtr"]); + } + if ("GAY" in $$parsedSource) { + $$parsedSource["GAY"] = $$createField103_0($$parsedSource["GAY"]); + } + if ("GAYPtr" in $$parsedSource) { + $$parsedSource["GAYPtr"] = $$createField104_0($$parsedSource["GAYPtr"]); + } + if ("GAZ" in $$parsedSource) { + $$parsedSource["GAZ"] = $$createField105_0($$parsedSource["GAZ"]); + } + if ("GAZPtr" in $$parsedSource) { + $$parsedSource["GAZPtr"] = $$createField106_0($$parsedSource["GAZPtr"]); + } + if ("GACi" in $$parsedSource) { + $$parsedSource["GACi"] = $$createField107_0($$parsedSource["GACi"]); + } + if ("GACV" in $$parsedSource) { + $$parsedSource["GACV"] = $$createField108_0($$parsedSource["GACV"]); + } + if ("GACP" in $$parsedSource) { + $$parsedSource["GACP"] = $$createField109_0($$parsedSource["GACP"]); + } + if ("GACiPtr" in $$parsedSource) { + $$parsedSource["GACiPtr"] = $$createField110_0($$parsedSource["GACiPtr"]); + } + if ("GACVPtr" in $$parsedSource) { + $$parsedSource["GACVPtr"] = $$createField111_0($$parsedSource["GACVPtr"]); + } + if ("GACPPtr" in $$parsedSource) { + $$parsedSource["GACPPtr"] = $$createField112_0($$parsedSource["GACPPtr"]); + } + if ("GABi" in $$parsedSource) { + $$parsedSource["GABi"] = $$createField113_0($$parsedSource["GABi"]); + } + if ("GABs" in $$parsedSource) { + $$parsedSource["GABs"] = $$createField114_0($$parsedSource["GABs"]); + } + if ("GABiPtr" in $$parsedSource) { + $$parsedSource["GABiPtr"] = $$createField115_0($$parsedSource["GABiPtr"]); + } + if ("GABT" in $$parsedSource) { + $$parsedSource["GABT"] = $$createField116_0($$parsedSource["GABT"]); + } + if ("GABTPtr" in $$parsedSource) { + $$parsedSource["GABTPtr"] = $$createField117_0($$parsedSource["GABTPtr"]); + } + if ("GAGT" in $$parsedSource) { + $$parsedSource["GAGT"] = $$createField118_0($$parsedSource["GAGT"]); + } + if ("GAGTPtr" in $$parsedSource) { + $$parsedSource["GAGTPtr"] = $$createField119_0($$parsedSource["GAGTPtr"]); + } + if ("GANBV" in $$parsedSource) { + $$parsedSource["GANBV"] = $$createField120_0($$parsedSource["GANBV"]); + } + if ("GANBP" in $$parsedSource) { + $$parsedSource["GANBP"] = $$createField121_0($$parsedSource["GANBP"]); + } + if ("GANBVPtr" in $$parsedSource) { + $$parsedSource["GANBVPtr"] = $$createField122_0($$parsedSource["GANBVPtr"]); + } + if ("GANBPPtr" in $$parsedSource) { + $$parsedSource["GANBPPtr"] = $$createField123_0($$parsedSource["GANBPPtr"]); + } + if ("GAPlV1" in $$parsedSource) { + $$parsedSource["GAPlV1"] = $$createField124_0($$parsedSource["GAPlV1"]); + } + if ("GAPlV2" in $$parsedSource) { + $$parsedSource["GAPlV2"] = $$createField125_0($$parsedSource["GAPlV2"]); + } + if ("GAPlP1" in $$parsedSource) { + $$parsedSource["GAPlP1"] = $$createField126_0($$parsedSource["GAPlP1"]); + } + if ("GAPlP2" in $$parsedSource) { + $$parsedSource["GAPlP2"] = $$createField127_0($$parsedSource["GAPlP2"]); + } + if ("GAPlVPtr" in $$parsedSource) { + $$parsedSource["GAPlVPtr"] = $$createField128_0($$parsedSource["GAPlVPtr"]); + } + if ("GAPlPPtr" in $$parsedSource) { + $$parsedSource["GAPlPPtr"] = $$createField129_0($$parsedSource["GAPlPPtr"]); + } + if ("GAMi" in $$parsedSource) { + $$parsedSource["GAMi"] = $$createField130_0($$parsedSource["GAMi"]); + } + if ("GAMS" in $$parsedSource) { + $$parsedSource["GAMS"] = $$createField131_0($$parsedSource["GAMS"]); + } + if ("GAMV" in $$parsedSource) { + $$parsedSource["GAMV"] = $$createField132_0($$parsedSource["GAMV"]); + } + if ("GAMSPtr" in $$parsedSource) { + $$parsedSource["GAMSPtr"] = $$createField133_0($$parsedSource["GAMSPtr"]); + } + if ("GAMVPtr" in $$parsedSource) { + $$parsedSource["GAMVPtr"] = $$createField134_0($$parsedSource["GAMVPtr"]); + } + if ("GAII" in $$parsedSource) { + $$parsedSource["GAII"] = $$createField135_0($$parsedSource["GAII"]); + } + if ("GAIV" in $$parsedSource) { + $$parsedSource["GAIV"] = $$createField136_0($$parsedSource["GAIV"]); + } + if ("GAIP" in $$parsedSource) { + $$parsedSource["GAIP"] = $$createField137_0($$parsedSource["GAIP"]); + } + if ("GAIIPtr" in $$parsedSource) { + $$parsedSource["GAIIPtr"] = $$createField138_0($$parsedSource["GAIIPtr"]); + } + if ("GAIVPtr" in $$parsedSource) { + $$parsedSource["GAIVPtr"] = $$createField139_0($$parsedSource["GAIVPtr"]); + } + if ("GAIPPtr" in $$parsedSource) { + $$parsedSource["GAIPPtr"] = $$createField140_0($$parsedSource["GAIPPtr"]); + } + if ("GAPrV" in $$parsedSource) { + $$parsedSource["GAPrV"] = $$createField141_0($$parsedSource["GAPrV"]); + } + if ("GAPrP" in $$parsedSource) { + $$parsedSource["GAPrP"] = $$createField142_0($$parsedSource["GAPrP"]); + } + if ("GAPrVPtr" in $$parsedSource) { + $$parsedSource["GAPrVPtr"] = $$createField143_0($$parsedSource["GAPrVPtr"]); + } + if ("GAPrPPtr" in $$parsedSource) { + $$parsedSource["GAPrPPtr"] = $$createField144_0($$parsedSource["GAPrPPtr"]); + } return new Maps($$parsedSource as Partial>); }; } } +export type MixedCstrAlias = X; + +export type NonBasicCstrAlias = V; + +export type PointableCstrAlias = W; + export type PointerAlias = PointerTextMarshaler; export type PointerTextMarshaler = string; @@ -1177,21 +1863,24 @@ const $$createType55 = $Create.Map($Create.Any, $Create.Any); const $$createType56 = $Create.Map($Create.Any, $Create.Any); const $$createType57 = $Create.Map($Create.Any, $Create.Any); const $$createType58 = $Create.Map($Create.Any, $Create.Any); -const $$createType59 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType60 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType61 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType62 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType63 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType64 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType65 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType66 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType67 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType68 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType69 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType70 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType71 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType72 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType73 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType74 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType75 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType76 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); +const $$createType59 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType60 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType61 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType62 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType63 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType64 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType65 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType66 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType67 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType68 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType69 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType70 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType71 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType72 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType73 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType74 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType75 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType76 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType77 = $Create.Map($Create.Any, $Create.Any); +const $$createType78 = $Create.Map($Create.Any, $Create.Any); +const $$createType79 = $Create.Map($Create.Any, $Create.Any); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts index c8f860953..bd5e88c7b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts @@ -3,19 +3,16 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void } { - let $resultPromise = $Call.ByID(4021345184) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Method(): $CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> { + return $Call.ByID(4021345184).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts index 32cfd9f37..d8db23862 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts index 988af4c84..342fcf3c4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts @@ -3,19 +3,16 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Data> & { cancel(): void } { - let $resultPromise = $Call.ByID(4021345184) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Method(): $CancellablePromise<$models.Data> { + return $Call.ByID(4021345184).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts index 6e31400f2..4cb328e1e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -41,7 +41,7 @@ export class HowDifferent { * returns a creation function for a concrete instance * of the generic class HowDifferent. */ - static createFrom($$createParamHow: (source: any) => How): ($$source?: any) => HowDifferent { + static createFrom($$createParamHow: (source: any) => How): ($$source?: any) => HowDifferent { const $$createField1_0 = $$createType1($$createParamHow); return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -157,7 +157,7 @@ export const PrivatePerson = personImpl; export type PrivatePerson = personImpl; // Private type creation functions -const $$createType0 = ($$createParamHow) => $Create.Map($Create.Any, $$createParamHow); -const $$createType1 = ($$createParamHow) => $Create.Array($$createType0($$createParamHow)); +const $$createType0 = ($$createParamHow: any) => $Create.Map($Create.Any, $$createParamHow); +const $$createType1 = ($$createParamHow: any) => $Create.Array($$createType0($$createParamHow)); const $$createType2 = other$0.OtherPerson.createFrom($Create.Any); const $$createType3 = $Create.Array($$createType2); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts index e41f6e1d3..711735a2b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * OtherPerson is like a person, but different. @@ -36,7 +36,7 @@ export class OtherPerson { * returns a creation function for a concrete instance * of the generic class OtherPerson. */ - static createFrom($$createParamT: (source: any) => T): ($$source?: any) => OtherPerson { + static createFrom($$createParamT: (source: any) => T): ($$source?: any) => OtherPerson { const $$createField1_0 = $$createType0($$createParamT); return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -49,4 +49,4 @@ export class OtherPerson { } // Private type creation functions -const $$createType0 = ($$createParamT) => $Create.Array($$createParamT); +const $$createType0 = ($$createParamT: any) => $Create.Array($$createParamT); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts index 108d8c37d..da11f7f2f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3606939272) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(3606939272); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts index 303b8b7db..9ef257343 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,24 +17,20 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByID(2124352079) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function LikeThisOne(): $CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> { + return $Call.ByID(2124352079).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4281222271) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(4281222271); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts index e14439f7b..a5fe5368f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3566862802) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(3566862802); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts index 7e93dcdb7..615eae691 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,24 +17,20 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByID(2590614085) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function LikeThisOne(): $CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> { + return $Call.ByID(2590614085).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(773650321) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(773650321); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts index e82932486..83ca81acc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, $0) as any; - return $resultPromise; +export function Greet($0: string): $CancellablePromise { + return $Call.ByID(1411160069, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts index 71b020797..62283209b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts index cae4507da..6c902629c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4249972365) as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts index 71b020797..62283209b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts index cae4507da..6c902629c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4249972365) as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts index 07b718c99..88cafa9d1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts index 474248f2e..d76f68d9d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts index 7b37ce5d6..b8c293ad7 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(3568225479) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(3568225479).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts index 7fa3dd502..c8ff6e4db 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts @@ -8,252 +8,197 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3862002418, $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByID(3862002418, $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2424639793, $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByID(2424639793, $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3132595881, $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByID(3132595881, $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2182412247, $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByID(2182412247, $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3306292566, $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByID(3306292566, $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1754277916, $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1754277916, $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1909469092, $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1909469092, $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4251088558, $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(4251088558, $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1343888303, $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1343888303, $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2205561041, $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2205561041, $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(572240879, $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByID(572240879, $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2189402897, $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2189402897, $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(642881729, $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByID(642881729, $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1066151743, $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1066151743, $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2718999663, $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByID(2718999663, $in); } -export function MapIntInt($in: { [_: `${number}`]: number }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2386486356, $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number }): $CancellablePromise { + return $Call.ByID(2386486356, $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2163571325, $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): $CancellablePromise { + return $Call.ByID(2163571325, $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2900172572, $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): $CancellablePromise { + return $Call.ByID(2900172572, $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): Promise<{ [_: `${number}`]: number[] }> & { cancel(): void } { - let $resultPromise = $Call.ByID(881980169, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): $CancellablePromise<{ [_: `${number}`]: number[] }> { + return $Call.ByID(881980169, $in).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1075577233) as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByID(1075577233); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3589606958, $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByID(3589606958, $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(224675106, $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByID(224675106, $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2124953624, $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByID(2124953624, $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3516977899, $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(3516977899, $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(229603958, $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByID(229603958, $in); } -export function StringArrayInputNamedOutput($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3678582682, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutput($in: string[]): $CancellablePromise { + return $Call.ByID(3678582682, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputNamedOutputs($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(319259595, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutputs($in: string[]): $CancellablePromise { + return $Call.ByID(319259595, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringArrayOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(383995060, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputStringArrayOut($in: string[]): $CancellablePromise { + return $Call.ByID(383995060, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1091960237, $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[]): $CancellablePromise { + return $Call.ByID(1091960237, $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(3835643147, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByID(3835643147, $in).then(($result: any) => { return $$createType3($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2447692557, $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByID(2447692557, $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2943477349, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByID(2943477349, $in).then(($result: any) => { return $$createType4($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3401034892, $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(3401034892, $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1236957573, $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1236957573, $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1160383782, $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(1160383782, $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1739300671, $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1739300671, $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(793803239, $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(793803239, $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1403757716, $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1403757716, $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2988345717, $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2988345717, $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(518250834, $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(518250834, $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2836661285, $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2836661285, $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1367187362, $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1367187362, $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts index 3dd1908e1..cd282c90c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { "Name": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts index 7fa3dd502..c8ff6e4db 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts @@ -8,252 +8,197 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3862002418, $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByID(3862002418, $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2424639793, $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByID(2424639793, $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3132595881, $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByID(3132595881, $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2182412247, $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByID(2182412247, $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3306292566, $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByID(3306292566, $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1754277916, $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1754277916, $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1909469092, $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1909469092, $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4251088558, $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(4251088558, $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1343888303, $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1343888303, $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2205561041, $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2205561041, $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(572240879, $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByID(572240879, $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2189402897, $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2189402897, $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(642881729, $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByID(642881729, $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1066151743, $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1066151743, $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2718999663, $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByID(2718999663, $in); } -export function MapIntInt($in: { [_: `${number}`]: number }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2386486356, $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number }): $CancellablePromise { + return $Call.ByID(2386486356, $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2163571325, $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): $CancellablePromise { + return $Call.ByID(2163571325, $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2900172572, $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): $CancellablePromise { + return $Call.ByID(2900172572, $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): Promise<{ [_: `${number}`]: number[] }> & { cancel(): void } { - let $resultPromise = $Call.ByID(881980169, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): $CancellablePromise<{ [_: `${number}`]: number[] }> { + return $Call.ByID(881980169, $in).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1075577233) as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByID(1075577233); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3589606958, $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByID(3589606958, $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(224675106, $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByID(224675106, $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2124953624, $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByID(2124953624, $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3516977899, $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(3516977899, $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(229603958, $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByID(229603958, $in); } -export function StringArrayInputNamedOutput($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3678582682, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutput($in: string[]): $CancellablePromise { + return $Call.ByID(3678582682, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputNamedOutputs($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(319259595, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutputs($in: string[]): $CancellablePromise { + return $Call.ByID(319259595, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringArrayOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(383995060, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputStringArrayOut($in: string[]): $CancellablePromise { + return $Call.ByID(383995060, $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1091960237, $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[]): $CancellablePromise { + return $Call.ByID(1091960237, $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(3835643147, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByID(3835643147, $in).then(($result: any) => { return $$createType3($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2447692557, $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByID(2447692557, $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2943477349, $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByID(2943477349, $in).then(($result: any) => { return $$createType4($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3401034892, $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(3401034892, $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1236957573, $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1236957573, $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1160383782, $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(1160383782, $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1739300671, $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1739300671, $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(793803239, $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(793803239, $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1403757716, $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1403757716, $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2988345717, $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2988345717, $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(518250834, $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(518250834, $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2836661285, $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2836661285, $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1367187362, $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1367187362, $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts index 3dd1908e1..cd282c90c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { "Name": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts index b14533c7b..6e6ac2007 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts index b14533c7b..6e6ac2007 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts index 07b718c99..88cafa9d1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts index 4442874d2..f6eee9de8 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts index 04f8b68ea..ec098d45a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1491748400) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(1491748400).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/warnings.log b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/warnings.log +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=false/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/json/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/json/models.ts index 41353d635..8cd1a164f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/json/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/json/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Marshaler is the interface implemented by types that diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/models.ts index 1ff6fc7ec..235dfce3e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/encoding/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * TextMarshaler is the interface implemented by an object that can diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts index fec08acb4..b33d68383 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -21,70 +21,62 @@ import * as $models from "./models.js"; /** * Get someone. */ -export function Get(aliasValue: $models.Alias): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Get", aliasValue) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Get(aliasValue: $models.Alias): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.Get", aliasValue).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * Apparently, aliases are all the rage right now. */ -export function GetButAliased(p: $models.AliasedPerson): Promise<$models.StrangelyAliasedPerson> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButAliased", p) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButAliased(p: $models.AliasedPerson): $CancellablePromise<$models.StrangelyAliasedPerson> { + return $Call.ByName("main.GreetService.GetButAliased", p).then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * Get someone quite different. */ -export function GetButDifferent(): Promise<$models.GenericPerson> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButDifferent") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButDifferent(): $CancellablePromise<$models.GenericPerson> { + return $Call.ByName("main.GreetService.GetButDifferent").then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function GetButForeignPrivateAlias(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButForeignPrivateAlias") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function GetButForeignPrivateAlias(): $CancellablePromise { + return $Call.ByName("main.GreetService.GetButForeignPrivateAlias").then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); +} + +export function GetButGenericAliases(): $CancellablePromise<$models.AliasGroup> { + return $Call.ByName("main.GreetService.GetButGenericAliases").then(($result: any) => { + return $$createType3($result); + }); } /** * Greet a lot of unusual things. */ -export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): Promise<$models.AliasStruct> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", $0, $1) as any; - let $typingPromise = $resultPromise.then(($result: any) => { - return $$createType6($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; +export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): $CancellablePromise<$models.AliasStruct> { + return $Call.ByName("main.GreetService.Greet", $0, $1).then(($result: any) => { + return $$createType7($result); + }); } // Private type creation functions const $$createType0 = $models.Person.createFrom; const $$createType1 = $models.GenericPerson.createFrom($Create.Any); const $$createType2 = nobindingshere$0.personImpl.createFrom; -const $$createType3 = $Create.Array($Create.Any); +const $$createType3 = $models.AliasGroup.createFrom; const $$createType4 = $Create.Array($Create.Any); -const $$createType5 = $Create.Struct({ - "NoMoreIdeas": $$createType4, -}); +const $$createType5 = $Create.Array($Create.Any); const $$createType6 = $Create.Struct({ - "Foo": $$createType3, - "Other": $$createType5, + "NoMoreIdeas": $$createType5, +}); +const $$createType7 = $Create.Struct({ + "Foo": $$createType4, + "Other": $$createType6, }); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts index b0e392853..13f61da0f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts @@ -7,16 +7,23 @@ export { }; export { + AliasGroup, AliasedPerson, EmptyStruct, GenericPerson, + GenericPersonAlias, + IndirectPersonAlias, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; export type { Alias, AliasStruct, EmptyAliasStruct, + GenericAlias, + GenericMapAlias, + GenericPtrAlias, OtherAliasStruct } from "./models.js"; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts index 481c39bda..63ca43914 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts @@ -3,13 +3,93 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * A nice type Alias. */ export type Alias = number; +/** + * A class whose fields have various aliased types. + */ +export class AliasGroup { + "GAi": GenericAlias; + "GAP": GenericAlias>; + "GPAs": GenericPtrAlias; + "GPAP": GenericPtrAlias>; + "GMA": GenericMapAlias; + "GPA": GenericPersonAlias; + "IPA": IndirectPersonAlias; + "TPIPA": TPIndirectPersonAlias; + + /** Creates a new AliasGroup instance. */ + constructor($$source: Partial = {}) { + if (!("GAi" in $$source)) { + this["GAi"] = 0; + } + if (!("GAP" in $$source)) { + this["GAP"] = (new GenericPerson()); + } + if (!("GPAs" in $$source)) { + this["GPAs"] = null; + } + if (!("GPAP" in $$source)) { + this["GPAP"] = null; + } + if (!("GMA" in $$source)) { + this["GMA"] = {}; + } + if (!("GPA" in $$source)) { + this["GPA"] = (new GenericPersonAlias()); + } + if (!("IPA" in $$source)) { + this["IPA"] = (new IndirectPersonAlias()); + } + if (!("TPIPA" in $$source)) { + this["TPIPA"] = (new TPIndirectPersonAlias()); + } + + Object.assign(this, $$source); + } + + /** + * Creates a new AliasGroup instance from a string or object. + */ + static createFrom($$source: any = {}): AliasGroup { + const $$createField1_0 = $$createType0; + const $$createField2_0 = $$createType2; + const $$createField3_0 = $$createType5; + const $$createField4_0 = $$createType6; + const $$createField5_0 = $$createType8; + const $$createField6_0 = $$createType8; + const $$createField7_0 = $$createType0; + let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; + if ("GAP" in $$parsedSource) { + $$parsedSource["GAP"] = $$createField1_0($$parsedSource["GAP"]); + } + if ("GPAs" in $$parsedSource) { + $$parsedSource["GPAs"] = $$createField2_0($$parsedSource["GPAs"]); + } + if ("GPAP" in $$parsedSource) { + $$parsedSource["GPAP"] = $$createField3_0($$parsedSource["GPAP"]); + } + if ("GMA" in $$parsedSource) { + $$parsedSource["GMA"] = $$createField4_0($$parsedSource["GMA"]); + } + if ("GPA" in $$parsedSource) { + $$parsedSource["GPA"] = $$createField5_0($$parsedSource["GPA"]); + } + if ("IPA" in $$parsedSource) { + $$parsedSource["IPA"] = $$createField6_0($$parsedSource["IPA"]); + } + if ("TPIPA" in $$parsedSource) { + $$parsedSource["TPIPA"] = $$createField7_0($$parsedSource["TPIPA"]); + } + return new AliasGroup($$parsedSource as Partial); + } +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -58,6 +138,16 @@ export class EmptyStruct { } } +/** + * A generic alias that forwards to a type parameter. + */ +export type GenericAlias = T; + +/** + * A generic alias that wraps a map. + */ +export type GenericMapAlias = { [_: string]: U }; + /** * A generic struct containing an alias. */ @@ -79,7 +169,7 @@ export class GenericPerson { * returns a creation function for a concrete instance * of the generic class GenericPerson. */ - static createFrom($$createParamT: (source: any) => T): ($$source?: any) => GenericPerson { + static createFrom($$createParamT: (source: any) => T): ($$source?: any) => GenericPerson { const $$createField0_0 = $$createParamT; return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -91,6 +181,31 @@ export class GenericPerson { } } +/** + * A generic alias that wraps a generic struct. + */ +export const GenericPersonAlias = GenericPerson; + +/** + * A generic alias that wraps a generic struct. + */ +export type GenericPersonAlias = GenericPerson[]>; + +/** + * A generic alias that wraps a pointer type. + */ +export type GenericPtrAlias = GenericAlias | null; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export const IndirectPersonAlias = GenericPersonAlias; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export type IndirectPersonAlias = GenericPersonAlias; + /** * Another struct alias. */ @@ -152,3 +267,24 @@ export const StrangelyAliasedPerson = Person; * Another class alias, but ordered after its aliased class. */ export type StrangelyAliasedPerson = Person; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export const TPIndirectPersonAlias = GenericPerson; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export type TPIndirectPersonAlias = GenericAlias>; + +// Private type creation functions +const $$createType0 = GenericPerson.createFrom($Create.Any); +const $$createType1 = $Create.Array($Create.Any); +const $$createType2 = $Create.Nullable($$createType1); +const $$createType3 = $Create.Array($Create.Any); +const $$createType4 = GenericPerson.createFrom($$createType3); +const $$createType5 = $Create.Nullable($$createType4); +const $$createType6 = $Create.Map($Create.Any, $Create.Any); +const $$createType7 = $Create.Array($Create.Any); +const $$createType8 = GenericPerson.createFrom($$createType7); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts index b7ca5f4cd..0780a0de3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function TestMethod(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod") as any; - return $resultPromise; +export function TestMethod(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts index 7ab11ba96..a2222265f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function TestMethod2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2") as any; - return $resultPromise; +export function TestMethod2(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts index 004971239..f2106e7f4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(person: $models.Person, emb: $models.Embedded1): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", person, emb) as any; - return $resultPromise; +export function Greet(person: $models.Person, emb: $models.Embedded1): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts index 2ff5d6635..50f23b52d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Embedded1 { /** diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts index 45311c10c..4471270ed 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,15 +19,12 @@ import * as $models from "./models.js"; * It has a multiline doc comment * The comment has even some * / traps!! */ -export function Greet(str: string, people: $models.Person[], $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null }, $4: (number | null)[], ...other: string[]): Promise<[$models.Person, any, number[]]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Greet(str: string, people: $models.Person[], $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null }, $4: (number | null)[], ...other: string[]): $CancellablePromise<[$models.Person, any, number[]]> { + return $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other).then(($result: any) => { $result[0] = $$createType0($result[0]); $result[2] = $$createType1($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts index 66dc14092..2417aff4c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Person represents a person diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts index d6525e21b..2f0e45aff 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,12 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.StructA, $models.StructC]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MakeCycles") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MakeCycles(): $CancellablePromise<[$models.StructA, $models.StructC]> { + return $Call.ByName("main.GreetService.MakeCycles").then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts index a79d42f32..9e86cd674 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class StructA { "B": structB | null; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts index 3af14c1c5..dba844168 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,19 +17,16 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MakeCycles") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MakeCycles(): $CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> { + return $Call.ByName("main.GreetService.MakeCycles").then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType9($result[1]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions -var $$createType0 = (function $$initCreateType0(...args): any { +var $$createType0 = (function $$initCreateType0(...args: any[]): any { if ($$createType0 === $$initCreateType0) { $$createType0 = $$createType3; } @@ -38,7 +35,7 @@ var $$createType0 = (function $$initCreateType0(...args): any { const $$createType1 = $Create.Nullable($$createType0); const $$createType2 = $Create.Map($Create.Any, $$createType1); const $$createType3 = $Create.Array($$createType2); -var $$createType4 = (function $$initCreateType4(...args): any { +var $$createType4 = (function $$initCreateType4(...args: any[]): any { if ($$createType4 === $$initCreateType4) { $$createType4 = $$createType8; } @@ -51,7 +48,7 @@ const $$createType7 = $Create.Struct({ "Y": $$createType6, }); const $$createType8 = $Create.Array($$createType7); -var $$createType9 = (function $$initCreateType9(...args): any { +var $$createType9 = (function $$initCreateType9(...args: any[]): any { if ($$createType9 === $$initCreateType9) { $$createType9 = $$createType13; } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts index ed98e9791..93d1ef5c6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export type Alias = Cyclic | null; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts index e464032ee..9271273bc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.InternalModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.InternalService.Method", $0) as any; - return $resultPromise; +export function Method($0: $models.InternalModel): $CancellablePromise { + return $Call.ByName("main.InternalService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts index 489296e23..4d242fc2c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * An exported but internal model. diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts index 209ade5da..b927155d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/otherpackage/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Dummy { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts index 9b4d0265f..0687bd8ac 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts @@ -3,20 +3,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as otherpackage$0 from "./otherpackage/models.js"; -function InternalMethod($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.InternalMethod", $0) as any; - return $resultPromise; +function InternalMethod($0: string): $CancellablePromise { + return $Call.ByName("main.Service.InternalMethod", $0); } -export function VisibleMethod($0: otherpackage$0.Dummy): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.VisibleMethod", $0) as any; - return $resultPromise; +export function VisibleMethod($0: otherpackage$0.Dummy): $CancellablePromise { + return $Call.ByName("main.Service.VisibleMethod", $0); } export async function CustomMethod(arg: string): Promise { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts index 97c0acf11..34b23e24d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.unexportedModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.unexportedService.Method", $0) as any; - return $resultPromise; +export function Method($0: $models.unexportedModel): $CancellablePromise { + return $Call.ByName("main.unexportedService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts index 64845db23..c5b06be75 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts @@ -8,45 +8,40 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Comment 1. */ -export function Method1(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method1") as any; - return $resultPromise; +export function Method1(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method1"); } /** * Comment 2. */ -export function Method2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method2") as any; - return $resultPromise; +export function Method2(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method2"); } /** * Comment 3a. * Comment 3b. */ -export function Method3(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method3") as any; - return $resultPromise; +export function Method3(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method3"); } /** * Comment 4. */ -export function Method4(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method4") as any; - return $resultPromise; +export function Method4(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method4"); } /** * Comment 5. */ -export function Method5(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method5") as any; - return $resultPromise; +export function Method5(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method5"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts index 3fdf09b81..45abc153e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: $models.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name, title) as any; - return $resultPromise; +export function Greet(name: string, title: $models.Title): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name, title); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts index 7b8cbf2fc..a50282a38 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * Age is an integer with some predefined values diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts index 130e45193..c4afd85da 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as services$0 from "./services/models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: services$0.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name, title) as any; - return $resultPromise; +export function Greet(name: string, title: services$0.Title): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name, title); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts index 335543dbb..661222bdf 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export enum Title { /** diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts index 49c20faa3..1a2ffb266 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts index 02707e2ca..f1ff262a1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts index 7423db695..f44f172e7 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay").then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts index 49c20faa3..1a2ffb266 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts index c4a6d39ee..88b2c78db 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts index 27084cac3..fa9a93fc8 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay").then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts index 56c688c31..460b2b374 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts index e6dca1f04..6a6a881dc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts index 36a0a5296..aec011527 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts @@ -8,20 +8,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * Greet someone */ -export function GreetWithContext(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GreetWithContext", name) as any; - return $resultPromise; +export function GreetWithContext(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.GreetWithContext", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts index e6dca1f04..6a6a881dc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts index 1f4f65dda..b5890af28 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts @@ -11,12 +11,19 @@ export { } from "./models.js"; export type { + BasicCstrAlias, + ComparableCstrAlias, EmbeddedCustomInterface, EmbeddedOriginalInterface, EmbeddedPointer, EmbeddedPointerPtr, EmbeddedValue, EmbeddedValuePtr, + GoodTildeCstrAlias, + InterfaceCstrAlias, + MixedCstrAlias, + NonBasicCstrAlias, + PointableCstrAlias, PointerAlias, PointerTextMarshaler, StringAlias, diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts index d858ddf9a..0d26a6b0b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts @@ -3,7 +3,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; + +export type BasicCstrAlias = S; + +export type ComparableCstrAlias = R; export type EmbeddedCustomInterface = string; @@ -17,6 +21,10 @@ export type EmbeddedValue = string; export type EmbeddedValuePtr = string; +export type GoodTildeCstrAlias = U; + +export type InterfaceCstrAlias = Y; + export class Maps { /** * Reject @@ -463,6 +471,286 @@ export class Maps { */ "TPZPtr": { [_: string]: number }; + /** + * Soft reject + */ + "GAR": { [_: string]: number }; + + /** + * Soft reject + */ + "GARPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAS": { [_: string]: number }; + + /** + * Soft reject + */ + "GASPtr": { [_: string]: number }; + + /** + * Soft reject + */ + "GAT": { [_: string]: number }; + + /** + * Soft reject + */ + "GATPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAU": { [_: string]: number }; + + /** + * Soft reject + */ + "GAUPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAV": { [_: string]: number }; + + /** + * Soft reject + */ + "GAVPtr": { [_: string]: number }; + + /** + * Soft reject + */ + "GAW": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAWPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAX": { [_: string]: number }; + + /** + * Soft reject + */ + "GAXPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAY": { [_: string]: number }; + + /** + * Soft reject + */ + "GAYPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAZ": { [_: string]: number }; + + /** + * Soft reject + */ + "GAZPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GACV": { [_: ComparableCstrAlias]: number }; + + /** + * Reject + */ + "GACP": { [_: string]: number }; + + /** + * Reject + */ + "GACiPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GACPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GABi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GABs": { [_: BasicCstrAlias]: number }; + + /** + * Reject + */ + "GABiPtr": { [_: string]: number }; + + /** + * Reject + */ + "GABT": { [_: string]: number }; + + /** + * Reject + */ + "GABTPtr": { [_: string]: number }; + + /** + * Accept + */ + "GAGT": { [_: GoodTildeCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAGTPtr": { [_: string]: number }; + + /** + * Accept + */ + "GANBV": { [_: NonBasicCstrAlias]: number }; + + /** + * Accept, hide + */ + "GANBP": { [_: string]: number }; + + /** + * Accept, hide + */ + "GANBVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GANBPPtr": { [_: string]: number }; + + /** + * Accept + */ + "GAPlV1": { [_: PointableCstrAlias]: number }; + + /** + * Accept + */ + "GAPlV2": { [_: PointableCstrAlias]: number }; + + /** + * Reject + */ + "GAPlP1": { [_: string]: number }; + + /** + * Accept + */ + "GAPlP2": { [_: PointableCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAPlVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPlPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAMi": { [_: `${number}`]: number }; + + /** + * Accept + */ + "GAMS": { [_: MixedCstrAlias]: number }; + + /** + * Accept + */ + "GAMV": { [_: MixedCstrAlias]: number }; + + /** + * Reject + */ + "GAMSPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAMVPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAII": { [_: string]: number }; + + /** + * Accept + */ + "GAIV": { [_: InterfaceCstrAlias]: number }; + + /** + * Accept, hide + */ + "GAIP": { [_: string]: number }; + + /** + * Reject + */ + "GAIIPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAIVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GAIPPtr": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPrV": { [_: string]: number }; + + /** + * Accept, hide + */ + "GAPrP": { [_: string]: number }; + + /** + * Reject + */ + "GAPrVPtr": { [_: string]: number }; + + /** + * Reject + */ + "GAPrPPtr": { [_: string]: number }; + /** Creates a new Maps instance. */ constructor($$source: Partial> = {}) { if (!("Bool" in $$source)) { @@ -732,6 +1020,174 @@ export class Maps { if (!("TPZPtr" in $$source)) { this["TPZPtr"] = {}; } + if (!("GAR" in $$source)) { + this["GAR"] = {}; + } + if (!("GARPtr" in $$source)) { + this["GARPtr"] = {}; + } + if (!("GAS" in $$source)) { + this["GAS"] = {}; + } + if (!("GASPtr" in $$source)) { + this["GASPtr"] = {}; + } + if (!("GAT" in $$source)) { + this["GAT"] = {}; + } + if (!("GATPtr" in $$source)) { + this["GATPtr"] = {}; + } + if (!("GAU" in $$source)) { + this["GAU"] = {}; + } + if (!("GAUPtr" in $$source)) { + this["GAUPtr"] = {}; + } + if (!("GAV" in $$source)) { + this["GAV"] = {}; + } + if (!("GAVPtr" in $$source)) { + this["GAVPtr"] = {}; + } + if (!("GAW" in $$source)) { + this["GAW"] = {}; + } + if (!("GAWPtr" in $$source)) { + this["GAWPtr"] = {}; + } + if (!("GAX" in $$source)) { + this["GAX"] = {}; + } + if (!("GAXPtr" in $$source)) { + this["GAXPtr"] = {}; + } + if (!("GAY" in $$source)) { + this["GAY"] = {}; + } + if (!("GAYPtr" in $$source)) { + this["GAYPtr"] = {}; + } + if (!("GAZ" in $$source)) { + this["GAZ"] = {}; + } + if (!("GAZPtr" in $$source)) { + this["GAZPtr"] = {}; + } + if (!("GACi" in $$source)) { + this["GACi"] = {}; + } + if (!("GACV" in $$source)) { + this["GACV"] = {}; + } + if (!("GACP" in $$source)) { + this["GACP"] = {}; + } + if (!("GACiPtr" in $$source)) { + this["GACiPtr"] = {}; + } + if (!("GACVPtr" in $$source)) { + this["GACVPtr"] = {}; + } + if (!("GACPPtr" in $$source)) { + this["GACPPtr"] = {}; + } + if (!("GABi" in $$source)) { + this["GABi"] = {}; + } + if (!("GABs" in $$source)) { + this["GABs"] = {}; + } + if (!("GABiPtr" in $$source)) { + this["GABiPtr"] = {}; + } + if (!("GABT" in $$source)) { + this["GABT"] = {}; + } + if (!("GABTPtr" in $$source)) { + this["GABTPtr"] = {}; + } + if (!("GAGT" in $$source)) { + this["GAGT"] = {}; + } + if (!("GAGTPtr" in $$source)) { + this["GAGTPtr"] = {}; + } + if (!("GANBV" in $$source)) { + this["GANBV"] = {}; + } + if (!("GANBP" in $$source)) { + this["GANBP"] = {}; + } + if (!("GANBVPtr" in $$source)) { + this["GANBVPtr"] = {}; + } + if (!("GANBPPtr" in $$source)) { + this["GANBPPtr"] = {}; + } + if (!("GAPlV1" in $$source)) { + this["GAPlV1"] = {}; + } + if (!("GAPlV2" in $$source)) { + this["GAPlV2"] = {}; + } + if (!("GAPlP1" in $$source)) { + this["GAPlP1"] = {}; + } + if (!("GAPlP2" in $$source)) { + this["GAPlP2"] = {}; + } + if (!("GAPlVPtr" in $$source)) { + this["GAPlVPtr"] = {}; + } + if (!("GAPlPPtr" in $$source)) { + this["GAPlPPtr"] = {}; + } + if (!("GAMi" in $$source)) { + this["GAMi"] = {}; + } + if (!("GAMS" in $$source)) { + this["GAMS"] = {}; + } + if (!("GAMV" in $$source)) { + this["GAMV"] = {}; + } + if (!("GAMSPtr" in $$source)) { + this["GAMSPtr"] = {}; + } + if (!("GAMVPtr" in $$source)) { + this["GAMVPtr"] = {}; + } + if (!("GAII" in $$source)) { + this["GAII"] = {}; + } + if (!("GAIV" in $$source)) { + this["GAIV"] = {}; + } + if (!("GAIP" in $$source)) { + this["GAIP"] = {}; + } + if (!("GAIIPtr" in $$source)) { + this["GAIIPtr"] = {}; + } + if (!("GAIVPtr" in $$source)) { + this["GAIVPtr"] = {}; + } + if (!("GAIPPtr" in $$source)) { + this["GAIPPtr"] = {}; + } + if (!("GAPrV" in $$source)) { + this["GAPrV"] = {}; + } + if (!("GAPrP" in $$source)) { + this["GAPrP"] = {}; + } + if (!("GAPrVPtr" in $$source)) { + this["GAPrVPtr"] = {}; + } + if (!("GAPrPPtr" in $$source)) { + this["GAPrPPtr"] = {}; + } Object.assign(this, $$source); } @@ -741,7 +1197,7 @@ export class Maps { * returns a creation function for a concrete instance * of the generic class Maps. */ - static createFrom($$createParamR: (source: any) => R, $$createParamS: (source: any) => S, $$createParamT: (source: any) => T, $$createParamU: (source: any) => U, $$createParamV: (source: any) => V, $$createParamW: (source: any) => W, $$createParamX: (source: any) => X, $$createParamY: (source: any) => Y, $$createParamZ: (source: any) => Z): ($$source?: any) => Maps { + static createFrom($$createParamR: (source: any) => R, $$createParamS: (source: any) => S, $$createParamT: (source: any) => T, $$createParamU: (source: any) => U, $$createParamV: (source: any) => V, $$createParamW: (source: any) => W, $$createParamX: (source: any) => X, $$createParamY: (source: any) => Y, $$createParamZ: (source: any) => Z): ($$source?: any) => Maps { const $$createField0_0 = $$createType0; const $$createField1_0 = $$createType1; const $$createField2_0 = $$createType2; @@ -831,6 +1287,62 @@ export class Maps { const $$createField86_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField87_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); const $$createField88_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField89_0 = $$createType59($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField90_0 = $$createType60($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField91_0 = $$createType61($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField92_0 = $$createType62($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField93_0 = $$createType63($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField94_0 = $$createType64($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField95_0 = $$createType65($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField96_0 = $$createType66($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField97_0 = $$createType67($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField98_0 = $$createType68($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField99_0 = $$createType69($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField100_0 = $$createType70($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField101_0 = $$createType71($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField102_0 = $$createType72($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField103_0 = $$createType73($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField104_0 = $$createType74($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField105_0 = $$createType75($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField106_0 = $$createType76($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ); + const $$createField107_0 = $$createType1; + const $$createField108_0 = $$createType15; + const $$createField109_0 = $$createType17; + const $$createField110_0 = $$createType8; + const $$createField111_0 = $$createType16; + const $$createField112_0 = $$createType18; + const $$createField113_0 = $$createType1; + const $$createField114_0 = $$createType7; + const $$createField115_0 = $$createType8; + const $$createField116_0 = $$createType77; + const $$createField117_0 = $$createType78; + const $$createField118_0 = $$createType15; + const $$createField119_0 = $$createType16; + const $$createField120_0 = $$createType15; + const $$createField121_0 = $$createType18; + const $$createField122_0 = $$createType16; + const $$createField123_0 = $$createType53; + const $$createField124_0 = $$createType15; + const $$createField125_0 = $$createType16; + const $$createField126_0 = $$createType17; + const $$createField127_0 = $$createType18; + const $$createField128_0 = $$createType16; + const $$createField129_0 = $$createType18; + const $$createField130_0 = $$createType2; + const $$createField131_0 = $$createType42; + const $$createField132_0 = $$createType15; + const $$createField133_0 = $$createType79; + const $$createField134_0 = $$createType16; + const $$createField135_0 = $$createType23; + const $$createField136_0 = $$createType15; + const $$createField137_0 = $$createType18; + const $$createField138_0 = $$createType24; + const $$createField139_0 = $$createType16; + const $$createField140_0 = $$createType53; + const $$createField141_0 = $$createType16; + const $$createField142_0 = $$createType18; + const $$createField143_0 = $$createType48; + const $$createField144_0 = $$createType53; return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; if ("Bool" in $$parsedSource) { @@ -1100,11 +1612,185 @@ export class Maps { if ("TPZPtr" in $$parsedSource) { $$parsedSource["TPZPtr"] = $$createField88_0($$parsedSource["TPZPtr"]); } + if ("GAR" in $$parsedSource) { + $$parsedSource["GAR"] = $$createField89_0($$parsedSource["GAR"]); + } + if ("GARPtr" in $$parsedSource) { + $$parsedSource["GARPtr"] = $$createField90_0($$parsedSource["GARPtr"]); + } + if ("GAS" in $$parsedSource) { + $$parsedSource["GAS"] = $$createField91_0($$parsedSource["GAS"]); + } + if ("GASPtr" in $$parsedSource) { + $$parsedSource["GASPtr"] = $$createField92_0($$parsedSource["GASPtr"]); + } + if ("GAT" in $$parsedSource) { + $$parsedSource["GAT"] = $$createField93_0($$parsedSource["GAT"]); + } + if ("GATPtr" in $$parsedSource) { + $$parsedSource["GATPtr"] = $$createField94_0($$parsedSource["GATPtr"]); + } + if ("GAU" in $$parsedSource) { + $$parsedSource["GAU"] = $$createField95_0($$parsedSource["GAU"]); + } + if ("GAUPtr" in $$parsedSource) { + $$parsedSource["GAUPtr"] = $$createField96_0($$parsedSource["GAUPtr"]); + } + if ("GAV" in $$parsedSource) { + $$parsedSource["GAV"] = $$createField97_0($$parsedSource["GAV"]); + } + if ("GAVPtr" in $$parsedSource) { + $$parsedSource["GAVPtr"] = $$createField98_0($$parsedSource["GAVPtr"]); + } + if ("GAW" in $$parsedSource) { + $$parsedSource["GAW"] = $$createField99_0($$parsedSource["GAW"]); + } + if ("GAWPtr" in $$parsedSource) { + $$parsedSource["GAWPtr"] = $$createField100_0($$parsedSource["GAWPtr"]); + } + if ("GAX" in $$parsedSource) { + $$parsedSource["GAX"] = $$createField101_0($$parsedSource["GAX"]); + } + if ("GAXPtr" in $$parsedSource) { + $$parsedSource["GAXPtr"] = $$createField102_0($$parsedSource["GAXPtr"]); + } + if ("GAY" in $$parsedSource) { + $$parsedSource["GAY"] = $$createField103_0($$parsedSource["GAY"]); + } + if ("GAYPtr" in $$parsedSource) { + $$parsedSource["GAYPtr"] = $$createField104_0($$parsedSource["GAYPtr"]); + } + if ("GAZ" in $$parsedSource) { + $$parsedSource["GAZ"] = $$createField105_0($$parsedSource["GAZ"]); + } + if ("GAZPtr" in $$parsedSource) { + $$parsedSource["GAZPtr"] = $$createField106_0($$parsedSource["GAZPtr"]); + } + if ("GACi" in $$parsedSource) { + $$parsedSource["GACi"] = $$createField107_0($$parsedSource["GACi"]); + } + if ("GACV" in $$parsedSource) { + $$parsedSource["GACV"] = $$createField108_0($$parsedSource["GACV"]); + } + if ("GACP" in $$parsedSource) { + $$parsedSource["GACP"] = $$createField109_0($$parsedSource["GACP"]); + } + if ("GACiPtr" in $$parsedSource) { + $$parsedSource["GACiPtr"] = $$createField110_0($$parsedSource["GACiPtr"]); + } + if ("GACVPtr" in $$parsedSource) { + $$parsedSource["GACVPtr"] = $$createField111_0($$parsedSource["GACVPtr"]); + } + if ("GACPPtr" in $$parsedSource) { + $$parsedSource["GACPPtr"] = $$createField112_0($$parsedSource["GACPPtr"]); + } + if ("GABi" in $$parsedSource) { + $$parsedSource["GABi"] = $$createField113_0($$parsedSource["GABi"]); + } + if ("GABs" in $$parsedSource) { + $$parsedSource["GABs"] = $$createField114_0($$parsedSource["GABs"]); + } + if ("GABiPtr" in $$parsedSource) { + $$parsedSource["GABiPtr"] = $$createField115_0($$parsedSource["GABiPtr"]); + } + if ("GABT" in $$parsedSource) { + $$parsedSource["GABT"] = $$createField116_0($$parsedSource["GABT"]); + } + if ("GABTPtr" in $$parsedSource) { + $$parsedSource["GABTPtr"] = $$createField117_0($$parsedSource["GABTPtr"]); + } + if ("GAGT" in $$parsedSource) { + $$parsedSource["GAGT"] = $$createField118_0($$parsedSource["GAGT"]); + } + if ("GAGTPtr" in $$parsedSource) { + $$parsedSource["GAGTPtr"] = $$createField119_0($$parsedSource["GAGTPtr"]); + } + if ("GANBV" in $$parsedSource) { + $$parsedSource["GANBV"] = $$createField120_0($$parsedSource["GANBV"]); + } + if ("GANBP" in $$parsedSource) { + $$parsedSource["GANBP"] = $$createField121_0($$parsedSource["GANBP"]); + } + if ("GANBVPtr" in $$parsedSource) { + $$parsedSource["GANBVPtr"] = $$createField122_0($$parsedSource["GANBVPtr"]); + } + if ("GANBPPtr" in $$parsedSource) { + $$parsedSource["GANBPPtr"] = $$createField123_0($$parsedSource["GANBPPtr"]); + } + if ("GAPlV1" in $$parsedSource) { + $$parsedSource["GAPlV1"] = $$createField124_0($$parsedSource["GAPlV1"]); + } + if ("GAPlV2" in $$parsedSource) { + $$parsedSource["GAPlV2"] = $$createField125_0($$parsedSource["GAPlV2"]); + } + if ("GAPlP1" in $$parsedSource) { + $$parsedSource["GAPlP1"] = $$createField126_0($$parsedSource["GAPlP1"]); + } + if ("GAPlP2" in $$parsedSource) { + $$parsedSource["GAPlP2"] = $$createField127_0($$parsedSource["GAPlP2"]); + } + if ("GAPlVPtr" in $$parsedSource) { + $$parsedSource["GAPlVPtr"] = $$createField128_0($$parsedSource["GAPlVPtr"]); + } + if ("GAPlPPtr" in $$parsedSource) { + $$parsedSource["GAPlPPtr"] = $$createField129_0($$parsedSource["GAPlPPtr"]); + } + if ("GAMi" in $$parsedSource) { + $$parsedSource["GAMi"] = $$createField130_0($$parsedSource["GAMi"]); + } + if ("GAMS" in $$parsedSource) { + $$parsedSource["GAMS"] = $$createField131_0($$parsedSource["GAMS"]); + } + if ("GAMV" in $$parsedSource) { + $$parsedSource["GAMV"] = $$createField132_0($$parsedSource["GAMV"]); + } + if ("GAMSPtr" in $$parsedSource) { + $$parsedSource["GAMSPtr"] = $$createField133_0($$parsedSource["GAMSPtr"]); + } + if ("GAMVPtr" in $$parsedSource) { + $$parsedSource["GAMVPtr"] = $$createField134_0($$parsedSource["GAMVPtr"]); + } + if ("GAII" in $$parsedSource) { + $$parsedSource["GAII"] = $$createField135_0($$parsedSource["GAII"]); + } + if ("GAIV" in $$parsedSource) { + $$parsedSource["GAIV"] = $$createField136_0($$parsedSource["GAIV"]); + } + if ("GAIP" in $$parsedSource) { + $$parsedSource["GAIP"] = $$createField137_0($$parsedSource["GAIP"]); + } + if ("GAIIPtr" in $$parsedSource) { + $$parsedSource["GAIIPtr"] = $$createField138_0($$parsedSource["GAIIPtr"]); + } + if ("GAIVPtr" in $$parsedSource) { + $$parsedSource["GAIVPtr"] = $$createField139_0($$parsedSource["GAIVPtr"]); + } + if ("GAIPPtr" in $$parsedSource) { + $$parsedSource["GAIPPtr"] = $$createField140_0($$parsedSource["GAIPPtr"]); + } + if ("GAPrV" in $$parsedSource) { + $$parsedSource["GAPrV"] = $$createField141_0($$parsedSource["GAPrV"]); + } + if ("GAPrP" in $$parsedSource) { + $$parsedSource["GAPrP"] = $$createField142_0($$parsedSource["GAPrP"]); + } + if ("GAPrVPtr" in $$parsedSource) { + $$parsedSource["GAPrVPtr"] = $$createField143_0($$parsedSource["GAPrVPtr"]); + } + if ("GAPrPPtr" in $$parsedSource) { + $$parsedSource["GAPrPPtr"] = $$createField144_0($$parsedSource["GAPrPPtr"]); + } return new Maps($$parsedSource as Partial>); }; } } +export type MixedCstrAlias = X; + +export type NonBasicCstrAlias = V; + +export type PointableCstrAlias = W; + export type PointerAlias = PointerTextMarshaler; export type PointerTextMarshaler = string; @@ -1177,21 +1863,24 @@ const $$createType55 = $Create.Map($Create.Any, $Create.Any); const $$createType56 = $Create.Map($Create.Any, $Create.Any); const $$createType57 = $Create.Map($Create.Any, $Create.Any); const $$createType58 = $Create.Map($Create.Any, $Create.Any); -const $$createType59 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType60 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType61 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType62 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType63 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType64 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType65 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType66 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType67 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType68 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType69 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType70 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType71 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType72 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType73 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType74 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType75 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); -const $$createType76 = ($$createParamR, $$createParamS, $$createParamT, $$createParamU, $$createParamV, $$createParamW, $$createParamX, $$createParamY, $$createParamZ) => $Create.Map($Create.Any, $Create.Any); +const $$createType59 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType60 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType61 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType62 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType63 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType64 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType65 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType66 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType67 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType68 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType69 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType70 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType71 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType72 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType73 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType74 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType75 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType76 = ($$createParamR: any, $$createParamS: any, $$createParamT: any, $$createParamU: any, $$createParamV: any, $$createParamW: any, $$createParamX: any, $$createParamY: any, $$createParamZ: any) => $Create.Map($Create.Any, $Create.Any); +const $$createType77 = $Create.Map($Create.Any, $Create.Any); +const $$createType78 = $Create.Map($Create.Any, $Create.Any); +const $$createType79 = $Create.Map($Create.Any, $Create.Any); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts index d68598901..d62acda96 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts @@ -3,19 +3,16 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.Method") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Method(): $CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> { + return $Call.ByName("main.Service.Method").then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts index 32cfd9f37..d8db23862 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts index 90ddd2521..8e2af391b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts @@ -3,19 +3,16 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Data> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.Method") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Method(): $CancellablePromise<$models.Data> { + return $Call.ByName("main.Service.Method").then(($result: any) => { return $$createType0($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts index 6e31400f2..4cb328e1e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -41,7 +41,7 @@ export class HowDifferent { * returns a creation function for a concrete instance * of the generic class HowDifferent. */ - static createFrom($$createParamHow: (source: any) => How): ($$source?: any) => HowDifferent { + static createFrom($$createParamHow: (source: any) => How): ($$source?: any) => HowDifferent { const $$createField1_0 = $$createType1($$createParamHow); return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -157,7 +157,7 @@ export const PrivatePerson = personImpl; export type PrivatePerson = personImpl; // Private type creation functions -const $$createType0 = ($$createParamHow) => $Create.Map($Create.Any, $$createParamHow); -const $$createType1 = ($$createParamHow) => $Create.Array($$createType0($$createParamHow)); +const $$createType0 = ($$createParamHow: any) => $Create.Map($Create.Any, $$createParamHow); +const $$createType1 = ($$createParamHow: any) => $Create.Array($$createType0($$createParamHow)); const $$createType2 = other$0.OtherPerson.createFrom($Create.Any); const $$createType3 = $Create.Array($$createType2); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts index e41f6e1d3..711735a2b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; /** * OtherPerson is like a person, but different. @@ -36,7 +36,7 @@ export class OtherPerson { * returns a creation function for a concrete instance * of the generic class OtherPerson. */ - static createFrom($$createParamT: (source: any) => T): ($$source?: any) => OtherPerson { + static createFrom($$createParamT: (source: any) => T): ($$source?: any) => OtherPerson { const $$createField1_0 = $$createType0($$createParamT); return ($$source: any = {}) => { let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -49,4 +49,4 @@ export class OtherPerson { } // Private type creation functions -const $$createType0 = ($$createParamT) => $Create.Array($$createParamT); +const $$createType0 = ($$createParamT: any) => $Create.Array($$createParamT); diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts index 2964ba9be..2e4c173df 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts index ef08b89ed..fb5f5ce21 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,24 +17,20 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function LikeThisOne(): $CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne").then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne"); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts index c5cadc32b..c82f44866 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedOther.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("main.EmbedOther.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts index 5716d2933..e3b2fe679 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,24 +17,20 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedService.LikeThisOne") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function LikeThisOne(): $CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> { + return $Call.ByName("main.EmbedService.LikeThisOne").then(($result: any) => { $result[0] = $$createType0($result[0]); $result[1] = $$createType1($result[1]); $result[2] = $$createType2($result[2]); return $result; - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedService.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("main.EmbedService.LikeThisOtherOne"); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts index 09f388a60..192340e8e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", $0) as any; - return $resultPromise; +export function Greet($0: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts index 56c688c31..460b2b374 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts index 7625ce92e..e437314f4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.OtherService.Hello") as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts index 56c688c31..460b2b374 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts index 7625ce92e..e437314f4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.OtherService.Hello") as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts index 49c20faa3..1a2ffb266 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts index 474248f2e..d76f68d9d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts index 3c2901c2c..fc2efb6c1 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay").then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts index eda8ff455..ea2dcf8a6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts @@ -8,252 +8,197 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.ArrayInt", $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByName("main.GreetService.ArrayInt", $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.BoolInBoolOut", $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float32InFloat32Out", $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float64InFloat64Out", $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16InIntOut", $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32InIntOut", $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64InIntOut", $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8InIntOut", $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntInIntOut", $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.IntInIntOut", $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInAndOutput", $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } -export function MapIntInt($in: { [_: `${number}`]: number }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntInt", $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntInt", $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntIntPointer", $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceInt", $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): Promise<{ [_: `${number}`]: number[] }> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): $CancellablePromise<{ [_: `${number}`]: number[] }> { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NoInputsStringOut") as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByName("main.GreetService.NoInputsStringOut"); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerMapIntInt", $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerStringInStringOut", $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } -export function StringArrayInputNamedOutput($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutput($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputNamedOutputs($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutputs($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringArrayOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputStringArrayOut($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructInputStructOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in).then(($result: any) => { return $$createType3($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in).then(($result: any) => { return $$createType4($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16InUIntOut", $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32InUIntOut", $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64InUIntOut", $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8InUIntOut", $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntInUIntOut", $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts index 3dd1908e1..cd282c90c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { "Name": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts index eda8ff455..ea2dcf8a6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts @@ -8,252 +8,197 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.ArrayInt", $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByName("main.GreetService.ArrayInt", $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.BoolInBoolOut", $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float32InFloat32Out", $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float64InFloat64Out", $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16InIntOut", $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32InIntOut", $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64InIntOut", $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8InIntOut", $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntInIntOut", $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.IntInIntOut", $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInAndOutput", $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } -export function MapIntInt($in: { [_: `${number}`]: number }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntInt", $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntInt", $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntIntPointer", $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceInt", $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] }): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): Promise<{ [_: `${number}`]: number[] }> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] }): $CancellablePromise<{ [_: `${number}`]: number[] }> { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NoInputsStringOut") as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByName("main.GreetService.NoInputsStringOut"); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerMapIntInt", $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerStringInStringOut", $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } -export function StringArrayInputNamedOutput($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutput($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputNamedOutputs($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputNamedOutputs($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringArrayOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StringArrayInputStringArrayOut($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in).then(($result: any) => { return $$createType2($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StringArrayInputStringOut($in: string[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[]): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructInputStructOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in).then(($result: any) => { return $$createType3($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in).then(($result: any) => { return $$createType4($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16InUIntOut", $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32InUIntOut", $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64InUIntOut", $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8InUIntOut", $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntInUIntOut", $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts index 3dd1908e1..cd282c90c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Person { "Name": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts index e6dca1f04..6a6a881dc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts index e6dca1f04..6a6a881dc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts index 49c20faa3..1a2ffb266 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,21 +17,17 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name).then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts index 4442874d2..f6eee9de8 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts index eb9c1b6bf..a4be6e904 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/models.ts @@ -3,7 +3,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Create as $Create} from "/wails/runtime.js"; +import { Create as $Create } from "/wails/runtime.js"; export class Address { "Street": string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts index 641595e74..554897ea4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call, Create as $Create} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,13 +18,10 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay") as any; - let $typingPromise = $resultPromise.then(($result: any) => { +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay").then(($result: any) => { return $$createType1($result); - }) as any; - $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise); - return $typingPromise; + }); } // Private type creation functions diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/warnings.log b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/warnings.log +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=false/UseNames=true/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts index 85e56fa47..c371520b0 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -21,36 +21,35 @@ import * as $models from "./models.js"; /** * Get someone. */ -export function Get(aliasValue: $models.Alias): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(1928502664, aliasValue) as any; - return $resultPromise; +export function Get(aliasValue: $models.Alias): $CancellablePromise<$models.Person> { + return $Call.ByID(1928502664, aliasValue); } /** * Apparently, aliases are all the rage right now. */ -export function GetButAliased(p: $models.AliasedPerson): Promise<$models.StrangelyAliasedPerson> & { cancel(): void } { - let $resultPromise = $Call.ByID(1896499664, p) as any; - return $resultPromise; +export function GetButAliased(p: $models.AliasedPerson): $CancellablePromise<$models.StrangelyAliasedPerson> { + return $Call.ByID(1896499664, p); } /** * Get someone quite different. */ -export function GetButDifferent(): Promise<$models.GenericPerson> & { cancel(): void } { - let $resultPromise = $Call.ByID(2240931744) as any; - return $resultPromise; +export function GetButDifferent(): $CancellablePromise<$models.GenericPerson> { + return $Call.ByID(2240931744); } -export function GetButForeignPrivateAlias(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(643456960) as any; - return $resultPromise; +export function GetButForeignPrivateAlias(): $CancellablePromise { + return $Call.ByID(643456960); +} + +export function GetButGenericAliases(): $CancellablePromise<$models.AliasGroup> { + return $Call.ByID(914093800); } /** * Greet a lot of unusual things. */ -export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): Promise<$models.AliasStruct> & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, $0, $1) as any; - return $resultPromise; +export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): $CancellablePromise<$models.AliasStruct> { + return $Call.ByID(1411160069, $0, $1); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts index dc8c81e2a..75cbdc737 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts @@ -8,12 +8,19 @@ export { export type { Alias, + AliasGroup, AliasStruct, AliasedPerson, EmptyAliasStruct, EmptyStruct, + GenericAlias, + GenericMapAlias, GenericPerson, + GenericPersonAlias, + GenericPtrAlias, + IndirectPersonAlias, OtherAliasStruct, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts index e5b3f2b1b..26b204c1f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts @@ -6,6 +6,20 @@ */ export type Alias = number; +/** + * A class whose fields have various aliased types. + */ +export interface AliasGroup { + "GAi": GenericAlias; + "GAP": GenericAlias>; + "GPAs": GenericPtrAlias; + "GPAP": GenericPtrAlias>; + "GMA": GenericMapAlias; + "GPA": GenericPersonAlias; + "IPA": IndirectPersonAlias; + "TPIPA": TPIndirectPersonAlias; +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -45,6 +59,16 @@ export interface EmptyAliasStruct { export interface EmptyStruct { } +/** + * A generic alias that forwards to a type parameter. + */ +export type GenericAlias = T; + +/** + * A generic alias that wraps a map. + */ +export type GenericMapAlias = { [_: string]: U } | null; + /** * A generic struct containing an alias. */ @@ -53,6 +77,21 @@ export interface GenericPerson { "AliasedField": Alias; } +/** + * A generic alias that wraps a generic struct. + */ +export type GenericPersonAlias = GenericPerson[] | null>; + +/** + * A generic alias that wraps a pointer type. + */ +export type GenericPtrAlias = GenericAlias | null; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export type IndirectPersonAlias = GenericPersonAlias; + /** * Another struct alias. */ @@ -79,3 +118,8 @@ export interface Person { * Another class alias, but ordered after its aliased class. */ export type StrangelyAliasedPerson = Person; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export type TPIndirectPersonAlias = GenericAlias>; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts index d08868a1f..5cba569c9 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function TestMethod(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2241101727) as any; - return $resultPromise; +export function TestMethod(): $CancellablePromise { + return $Call.ByID(2241101727); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts index 0b877e248..dc425cfd5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function TestMethod2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1556848345) as any; - return $resultPromise; +export function TestMethod2(): $CancellablePromise { + return $Call.ByID(1556848345); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts index 32b85fccb..a5334fce3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(person: $models.Person, emb: $models.Embedded1): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, person, emb) as any; - return $resultPromise; +export function Greet(person: $models.Person, emb: $models.Embedded1): $CancellablePromise { + return $Call.ByID(1411160069, person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts index 05fa84c0c..99ffd566f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,7 +19,6 @@ import * as $models from "./models.js"; * It has a multiline doc comment * The comment has even some * / traps!! */ -export function Greet(str: string, people: $models.Person[] | null, $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null } | null, $4: (number | null)[] | null, ...other: string[]): Promise<[$models.Person, any, number[] | null]> & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, str, people, $2, assoc, $4, other) as any; - return $resultPromise; +export function Greet(str: string, people: $models.Person[] | null, $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null } | null, $4: (number | null)[] | null, ...other: string[]): $CancellablePromise<[$models.Person, any, number[] | null]> { + return $Call.ByID(1411160069, str, people, $2, assoc, $4, other); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts index 3f91922f1..e6a04adf3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.StructA, $models.StructC]> & { cancel(): void } { - let $resultPromise = $Call.ByID(440020721) as any; - return $resultPromise; +export function MakeCycles(): $CancellablePromise<[$models.StructA, $models.StructC]> { + return $Call.ByID(440020721); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts index 435914299..965a057ca 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void } { - let $resultPromise = $Call.ByID(440020721) as any; - return $resultPromise; +export function MakeCycles(): $CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> { + return $Call.ByID(440020721); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts index e9ce7b0da..9d2a673d6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.InternalModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(538079117, $0) as any; - return $resultPromise; +export function Method($0: $models.InternalModel): $CancellablePromise { + return $Call.ByID(538079117, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts index 6f1ab3204..e60cbea0c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts @@ -3,20 +3,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as otherpackage$0 from "./otherpackage/models.js"; -function InternalMethod($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3518775569, $0) as any; - return $resultPromise; +function InternalMethod($0: string): $CancellablePromise { + return $Call.ByID(3518775569, $0); } -export function VisibleMethod($0: otherpackage$0.Dummy): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(474018228, $0) as any; - return $resultPromise; +export function VisibleMethod($0: otherpackage$0.Dummy): $CancellablePromise { + return $Call.ByID(474018228, $0); } export async function CustomMethod(arg: string): Promise { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts index fa074e92c..57d7f73be 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.unexportedModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(37626172, $0) as any; - return $resultPromise; +export function Method($0: $models.unexportedModel): $CancellablePromise { + return $Call.ByID(37626172, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts index 6189c0359..5a3127774 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts @@ -8,45 +8,40 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Comment 1. */ -export function Method1(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(841558284) as any; - return $resultPromise; +export function Method1(): $CancellablePromise { + return $Call.ByID(841558284); } /** * Comment 2. */ -export function Method2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(891891141) as any; - return $resultPromise; +export function Method2(): $CancellablePromise { + return $Call.ByID(891891141); } /** * Comment 3a. * Comment 3b. */ -export function Method3(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(875113522) as any; - return $resultPromise; +export function Method3(): $CancellablePromise { + return $Call.ByID(875113522); } /** * Comment 4. */ -export function Method4(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(791225427) as any; - return $resultPromise; +export function Method4(): $CancellablePromise { + return $Call.ByID(791225427); } /** * Comment 5. */ -export function Method5(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(774447808) as any; - return $resultPromise; +export function Method5(): $CancellablePromise { + return $Call.ByID(774447808); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts index 561d0b5c4..eda1dd8d0 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: $models.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name, title) as any; - return $resultPromise; +export function Greet(name: string, title: $models.Title): $CancellablePromise { + return $Call.ByID(1411160069, name, title); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts index 66ea965d5..ade2383a0 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as services$0 from "./services/models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: services$0.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name, title) as any; - return $resultPromise; +export function Greet(name: string, title: services$0.Title): $CancellablePromise { + return $Call.ByID(1411160069, name, title); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts index c649bfb82..8519667d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts index 5fb794ba2..4cb206cc6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2007737399) as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(2007737399); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts index c649bfb82..8519667d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts index 23b854905..8879fcfa2 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2447353446) as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(2447353446); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts index 0d68fbe86..34c4d151a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts index dc0a1a1b8..8a2cb7a70 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts index 70b209eeb..f9b8d87e2 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts @@ -8,20 +8,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * Greet someone */ -export function GreetWithContext(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1310150960, name) as any; - return $resultPromise; +export function GreetWithContext(name: string): $CancellablePromise { + return $Call.ByID(1310150960, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts index dc0a1a1b8..8a2cb7a70 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts index 1dcdadc91..e3aeb8a64 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts @@ -7,13 +7,20 @@ export { }; export type { + BasicCstrAlias, + ComparableCstrAlias, EmbeddedCustomInterface, EmbeddedOriginalInterface, EmbeddedPointer, EmbeddedPointerPtr, EmbeddedValue, EmbeddedValuePtr, + GoodTildeCstrAlias, + InterfaceCstrAlias, Maps, + MixedCstrAlias, + NonBasicCstrAlias, + PointableCstrAlias, PointerAlias, PointerTextMarshaler, StringAlias, diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts index 9a9db9f4a..aaabd3502 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts @@ -1,6 +1,10 @@ // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT +export type BasicCstrAlias = S; + +export type ComparableCstrAlias = R; + export type EmbeddedCustomInterface = string; export type EmbeddedOriginalInterface = string; @@ -13,6 +17,10 @@ export type EmbeddedValue = string; export type EmbeddedValuePtr = string; +export type GoodTildeCstrAlias = U; + +export type InterfaceCstrAlias = Y; + export interface Maps { /** * Reject @@ -458,8 +466,294 @@ export interface Maps { * Soft reject */ "TPZPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAR": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GARPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAS": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GASPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAT": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GATPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAU": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAUPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAV": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAVPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAW": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAWPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAX": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAXPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAY": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAYPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAZ": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAZPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GACV": { [_: ComparableCstrAlias]: number } | null; + + /** + * Reject + */ + "GACP": { [_: string]: number } | null; + + /** + * Reject + */ + "GACiPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GABi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GABs": { [_: BasicCstrAlias]: number } | null; + + /** + * Reject + */ + "GABiPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GABT": { [_: string]: number } | null; + + /** + * Reject + */ + "GABTPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GAGT": { [_: GoodTildeCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAGTPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GANBV": { [_: NonBasicCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GANBP": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GANBVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GANBPPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GAPlV1": { [_: PointableCstrAlias]: number } | null; + + /** + * Accept + */ + "GAPlV2": { [_: PointableCstrAlias]: number } | null; + + /** + * Reject + */ + "GAPlP1": { [_: string]: number } | null; + + /** + * Accept + */ + "GAPlP2": { [_: PointableCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAPlVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPlPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAMi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GAMS": { [_: MixedCstrAlias]: number } | null; + + /** + * Accept + */ + "GAMV": { [_: MixedCstrAlias]: number } | null; + + /** + * Reject + */ + "GAMSPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAMVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAII": { [_: string]: number } | null; + + /** + * Accept + */ + "GAIV": { [_: InterfaceCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAIP": { [_: string]: number } | null; + + /** + * Reject + */ + "GAIIPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAIVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GAIPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPrV": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPrP": { [_: string]: number } | null; + + /** + * Reject + */ + "GAPrVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GAPrPPtr": { [_: string]: number } | null; } +export type MixedCstrAlias = X; + +export type NonBasicCstrAlias = V; + +export type PointableCstrAlias = W; + export type PointerAlias = PointerTextMarshaler; export type PointerTextMarshaler = string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts index 8669b92be..50d2f6d72 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts @@ -3,13 +3,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void } { - let $resultPromise = $Call.ByID(4021345184) as any; - return $resultPromise; +export function Method(): $CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> { + return $Call.ByID(4021345184); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts index 105e077e3..b175ebe96 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts @@ -3,13 +3,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Data> & { cancel(): void } { - let $resultPromise = $Call.ByID(4021345184) as any; - return $resultPromise; +export function Method(): $CancellablePromise<$models.Data> { + return $Call.ByID(4021345184); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts index a02cf4a98..c2fb7bc6a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3606939272) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(3606939272); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts index 81f2b2430..4f623616d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByID(2124352079) as any; - return $resultPromise; +export function LikeThisOne(): $CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> { + return $Call.ByID(2124352079); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4281222271) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(4281222271); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts index 5ee6ff07e..d155adc30 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3566862802) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(3566862802); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts index f757ceeae..65098990f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByID(2590614085) as any; - return $resultPromise; +export function LikeThisOne(): $CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> { + return $Call.ByID(2590614085); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(773650321) as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByID(773650321); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts index 2f297e449..76375250e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, $0) as any; - return $resultPromise; +export function Greet($0: string): $CancellablePromise { + return $Call.ByID(1411160069, $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts index 0d68fbe86..34c4d151a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts index 5cc4ea0ff..d27e71304 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4249972365) as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts index 0d68fbe86..34c4d151a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts index 5cc4ea0ff..d27e71304 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4249972365) as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByID(4249972365); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts index c649bfb82..8519667d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts index d8ddc9193..50e62daa4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(3568225479) as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(3568225479); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts index 59d1e0f13..ef5015467 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts @@ -8,226 +8,183 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3862002418, $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByID(3862002418, $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2424639793, $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByID(2424639793, $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3132595881, $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByID(3132595881, $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2182412247, $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByID(2182412247, $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3306292566, $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByID(3306292566, $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1754277916, $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1754277916, $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1909469092, $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1909469092, $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4251088558, $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(4251088558, $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1343888303, $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1343888303, $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2205561041, $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2205561041, $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(572240879, $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByID(572240879, $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2189402897, $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2189402897, $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(642881729, $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByID(642881729, $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1066151743, $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1066151743, $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2718999663, $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByID(2718999663, $in); } -export function MapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2386486356, $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(2386486356, $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2163571325, $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): $CancellablePromise { + return $Call.ByID(2163571325, $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2900172572, $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise { + return $Call.ByID(2900172572, $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(881980169, $in) as any; - return $resultPromise; +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise<{ [_: `${number}`]: number[] | null } | null> { + return $Call.ByID(881980169, $in); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1075577233) as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByID(1075577233); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3589606958, $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByID(3589606958, $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(224675106, $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByID(224675106, $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2124953624, $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByID(2124953624, $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3516977899, $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(3516977899, $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(229603958, $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByID(229603958, $in); } -export function StringArrayInputNamedOutput($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3678582682, $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutput($in: string[] | null): $CancellablePromise { + return $Call.ByID(3678582682, $in); } -export function StringArrayInputNamedOutputs($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(319259595, $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutputs($in: string[] | null): $CancellablePromise { + return $Call.ByID(319259595, $in); } -export function StringArrayInputStringArrayOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(383995060, $in) as any; - return $resultPromise; +export function StringArrayInputStringArrayOut($in: string[] | null): $CancellablePromise { + return $Call.ByID(383995060, $in); } -export function StringArrayInputStringOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1091960237, $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[] | null): $CancellablePromise { + return $Call.ByID(1091960237, $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(3835643147, $in) as any; - return $resultPromise; +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByID(3835643147, $in); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2447692557, $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByID(2447692557, $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2943477349, $in) as any; - return $resultPromise; +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByID(2943477349, $in); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3401034892, $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(3401034892, $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1236957573, $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1236957573, $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1160383782, $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(1160383782, $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1739300671, $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1739300671, $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(793803239, $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(793803239, $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1403757716, $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1403757716, $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2988345717, $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2988345717, $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(518250834, $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(518250834, $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2836661285, $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2836661285, $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1367187362, $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1367187362, $in); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts index 59d1e0f13..ef5015467 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts @@ -8,226 +8,183 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3862002418, $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByID(3862002418, $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2424639793, $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByID(2424639793, $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3132595881, $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByID(3132595881, $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2182412247, $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByID(2182412247, $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3306292566, $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByID(3306292566, $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1754277916, $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1754277916, $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1909469092, $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1909469092, $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4251088558, $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(4251088558, $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1343888303, $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByID(1343888303, $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2205561041, $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2205561041, $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(572240879, $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByID(572240879, $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2189402897, $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(2189402897, $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(642881729, $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByID(642881729, $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1066151743, $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1066151743, $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2718999663, $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByID(2718999663, $in); } -export function MapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2386486356, $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(2386486356, $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2163571325, $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): $CancellablePromise { + return $Call.ByID(2163571325, $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2900172572, $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise { + return $Call.ByID(2900172572, $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(881980169, $in) as any; - return $resultPromise; +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise<{ [_: `${number}`]: number[] | null } | null> { + return $Call.ByID(881980169, $in); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1075577233) as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByID(1075577233); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3589606958, $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByID(3589606958, $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(224675106, $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByID(224675106, $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2124953624, $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByID(2124953624, $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3516977899, $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByID(3516977899, $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(229603958, $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByID(229603958, $in); } -export function StringArrayInputNamedOutput($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3678582682, $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutput($in: string[] | null): $CancellablePromise { + return $Call.ByID(3678582682, $in); } -export function StringArrayInputNamedOutputs($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(319259595, $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutputs($in: string[] | null): $CancellablePromise { + return $Call.ByID(319259595, $in); } -export function StringArrayInputStringArrayOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(383995060, $in) as any; - return $resultPromise; +export function StringArrayInputStringArrayOut($in: string[] | null): $CancellablePromise { + return $Call.ByID(383995060, $in); } -export function StringArrayInputStringOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1091960237, $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[] | null): $CancellablePromise { + return $Call.ByID(1091960237, $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByID(3835643147, $in) as any; - return $resultPromise; +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByID(3835643147, $in); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2447692557, $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByID(2447692557, $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(2943477349, $in) as any; - return $resultPromise; +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByID(2943477349, $in); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3401034892, $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(3401034892, $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1236957573, $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1236957573, $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1160383782, $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(1160383782, $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1739300671, $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1739300671, $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(793803239, $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(793803239, $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1403757716, $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1403757716, $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2988345717, $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2988345717, $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(518250834, $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(518250834, $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2836661285, $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByID(2836661285, $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1367187362, $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByID(1367187362, $in); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts index dc0a1a1b8..8a2cb7a70 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts index dc0a1a1b8..8a2cb7a70 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts index c649bfb82..8519667d5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(1411160069, name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByID(1411160069, name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1661412647, name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByID(1661412647, name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts index 0fdb6e4c6..79c8907f9 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByID(1491748400) as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByID(1491748400); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/warnings.log b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/warnings.log +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=false/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts index a07b47c37..d19c65d22 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -21,36 +21,35 @@ import * as $models from "./models.js"; /** * Get someone. */ -export function Get(aliasValue: $models.Alias): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Get", aliasValue) as any; - return $resultPromise; +export function Get(aliasValue: $models.Alias): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.Get", aliasValue); } /** * Apparently, aliases are all the rage right now. */ -export function GetButAliased(p: $models.AliasedPerson): Promise<$models.StrangelyAliasedPerson> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButAliased", p) as any; - return $resultPromise; +export function GetButAliased(p: $models.AliasedPerson): $CancellablePromise<$models.StrangelyAliasedPerson> { + return $Call.ByName("main.GreetService.GetButAliased", p); } /** * Get someone quite different. */ -export function GetButDifferent(): Promise<$models.GenericPerson> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButDifferent") as any; - return $resultPromise; +export function GetButDifferent(): $CancellablePromise<$models.GenericPerson> { + return $Call.ByName("main.GreetService.GetButDifferent"); } -export function GetButForeignPrivateAlias(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GetButForeignPrivateAlias") as any; - return $resultPromise; +export function GetButForeignPrivateAlias(): $CancellablePromise { + return $Call.ByName("main.GreetService.GetButForeignPrivateAlias"); +} + +export function GetButGenericAliases(): $CancellablePromise<$models.AliasGroup> { + return $Call.ByName("main.GreetService.GetButGenericAliases"); } /** * Greet a lot of unusual things. */ -export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): Promise<$models.AliasStruct> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", $0, $1) as any; - return $resultPromise; +export function Greet($0: $models.EmptyAliasStruct, $1: $models.EmptyStruct): $CancellablePromise<$models.AliasStruct> { + return $Call.ByName("main.GreetService.Greet", $0, $1); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts index dc8c81e2a..75cbdc737 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/index.ts @@ -8,12 +8,19 @@ export { export type { Alias, + AliasGroup, AliasStruct, AliasedPerson, EmptyAliasStruct, EmptyStruct, + GenericAlias, + GenericMapAlias, GenericPerson, + GenericPersonAlias, + GenericPtrAlias, + IndirectPersonAlias, OtherAliasStruct, Person, - StrangelyAliasedPerson + StrangelyAliasedPerson, + TPIndirectPersonAlias } from "./models.js"; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts index e5b3f2b1b..26b204c1f 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/aliases/models.ts @@ -6,6 +6,20 @@ */ export type Alias = number; +/** + * A class whose fields have various aliased types. + */ +export interface AliasGroup { + "GAi": GenericAlias; + "GAP": GenericAlias>; + "GPAs": GenericPtrAlias; + "GPAP": GenericPtrAlias>; + "GMA": GenericMapAlias; + "GPA": GenericPersonAlias; + "IPA": IndirectPersonAlias; + "TPIPA": TPIndirectPersonAlias; +} + /** * A struct alias. * This should be rendered as a typedef or interface in every mode. @@ -45,6 +59,16 @@ export interface EmptyAliasStruct { export interface EmptyStruct { } +/** + * A generic alias that forwards to a type parameter. + */ +export type GenericAlias = T; + +/** + * A generic alias that wraps a map. + */ +export type GenericMapAlias = { [_: string]: U } | null; + /** * A generic struct containing an alias. */ @@ -53,6 +77,21 @@ export interface GenericPerson { "AliasedField": Alias; } +/** + * A generic alias that wraps a generic struct. + */ +export type GenericPersonAlias = GenericPerson[] | null>; + +/** + * A generic alias that wraps a pointer type. + */ +export type GenericPtrAlias = GenericAlias | null; + +/** + * An alias that wraps a class through a non-typeparam alias. + */ +export type IndirectPersonAlias = GenericPersonAlias; + /** * Another struct alias. */ @@ -79,3 +118,8 @@ export interface Person { * Another class alias, but ordered after its aliased class. */ export type StrangelyAliasedPerson = Person; + +/** + * An alias that wraps a class through a typeparam alias. + */ +export type TPIndirectPersonAlias = GenericAlias>; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts index 4c65d97ea..e4281d925 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service7.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function TestMethod(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod") as any; - return $resultPromise; +export function TestMethod(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service7.TestMethod"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts index a968e9b64..1c0154b5e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config/service9.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function TestMethod2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2") as any; - return $resultPromise; +export function TestMethod2(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/complex_expressions/config.Service9.TestMethod2"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts index dde723eae..9eff81e94 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_json/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(person: $models.Person, emb: $models.Embedded1): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", person, emb) as any; - return $resultPromise; +export function Greet(person: $models.Person, emb: $models.Embedded1): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", person, emb); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts index c4b9cd802..0c3ef75cb 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/complex_method/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -19,7 +19,6 @@ import * as $models from "./models.js"; * It has a multiline doc comment * The comment has even some * / traps!! */ -export function Greet(str: string, people: $models.Person[] | null, $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null } | null, $4: (number | null)[] | null, ...other: string[]): Promise<[$models.Person, any, number[] | null]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other) as any; - return $resultPromise; +export function Greet(str: string, people: $models.Person[] | null, $2: {"AnotherCount": number, "AnotherOne": $models.Person | null}, assoc: { [_: `${number}`]: boolean | null } | null, $4: (number | null)[] | null, ...other: string[]): $CancellablePromise<[$models.Person, any, number[] | null]> { + return $Call.ByName("main.GreetService.Greet", str, people, $2, assoc, $4, other); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts index e322a90c2..52f87997c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_imports/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.StructA, $models.StructC]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MakeCycles") as any; - return $resultPromise; +export function MakeCycles(): $CancellablePromise<[$models.StructA, $models.StructC]> { + return $Call.ByName("main.GreetService.MakeCycles"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts index 8585c78d7..b7ef0ae3e 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/cyclic_types/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as $models from "./models.js"; /** * Make a cycle. */ -export function MakeCycles(): Promise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MakeCycles") as any; - return $resultPromise; +export function MakeCycles(): $CancellablePromise<[$models.Cyclic, $models.GenericCyclic<$models.GenericCyclic>]> { + return $Call.ByName("main.GreetService.MakeCycles"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts index cdb60560b..faca61bc2 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/internalservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.InternalModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.InternalService.Method", $0) as any; - return $resultPromise; +export function Method($0: $models.InternalModel): $CancellablePromise { + return $Call.ByName("main.InternalService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts index feddd7b11..84ac0538c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/service.ts @@ -3,20 +3,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as otherpackage$0 from "./otherpackage/models.js"; -function InternalMethod($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.InternalMethod", $0) as any; - return $resultPromise; +function InternalMethod($0: string): $CancellablePromise { + return $Call.ByName("main.Service.InternalMethod", $0); } -export function VisibleMethod($0: otherpackage$0.Dummy): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.VisibleMethod", $0) as any; - return $resultPromise; +export function VisibleMethod($0: otherpackage$0.Dummy): $CancellablePromise { + return $Call.ByName("main.Service.VisibleMethod", $0); } export async function CustomMethod(arg: string): Promise { diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts index 97059f1fa..b49239ada 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/directives/unexportedservice.ts @@ -8,13 +8,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method($0: $models.unexportedModel): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.unexportedService.Method", $0) as any; - return $resultPromise; +export function Method($0: $models.unexportedModel): $CancellablePromise { + return $Call.ByName("main.unexportedService.Method", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts index 8888fd9f0..4951af01d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/embedded_interface/greetservice.ts @@ -8,45 +8,40 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Comment 1. */ -export function Method1(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method1") as any; - return $resultPromise; +export function Method1(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method1"); } /** * Comment 2. */ -export function Method2(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method2") as any; - return $resultPromise; +export function Method2(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method2"); } /** * Comment 3a. * Comment 3b. */ -export function Method3(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method3") as any; - return $resultPromise; +export function Method3(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method3"); } /** * Comment 4. */ -export function Method4(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method4") as any; - return $resultPromise; +export function Method4(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method4"); } /** * Comment 5. */ -export function Method5(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Method5") as any; - return $resultPromise; +export function Method5(): $CancellablePromise { + return $Call.ByName("main.GreetService.Method5"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts index 4294d1e30..d857aa9e7 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: $models.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name, title) as any; - return $resultPromise; +export function Greet(name: string, title: $models.Title): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name, title); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts index 3d7d982f4..73469c39d 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/enum_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,7 +17,6 @@ import * as services$0 from "./services/models.js"; /** * Greet does XYZ */ -export function Greet(name: string, title: services$0.Title): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name, title) as any; - return $resultPromise; +export function Greet(name: string, title: services$0.Title): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name, title); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts index 4602f3a69..5a8e9adc3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts index 0ea61fe3a..c6db3803b 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay") as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_imported_package/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts index 4602f3a69..5a8e9adc3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts index 1bf854765..b83ce5234 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay") as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/function_from_nested_imported_package/services/other.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts index f68e20023..41664b850 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts index f817be3c7..80bebe425 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts index 0945346b5..63a65248c 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_context/greetservice.ts @@ -8,20 +8,18 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * Greet someone */ -export function GreetWithContext(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.GreetWithContext", name) as any; - return $resultPromise; +export function GreetWithContext(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.GreetWithContext", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts index f817be3c7..80bebe425 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/function_single_internal/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts index 1dcdadc91..e3aeb8a64 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/index.ts @@ -7,13 +7,20 @@ export { }; export type { + BasicCstrAlias, + ComparableCstrAlias, EmbeddedCustomInterface, EmbeddedOriginalInterface, EmbeddedPointer, EmbeddedPointerPtr, EmbeddedValue, EmbeddedValuePtr, + GoodTildeCstrAlias, + InterfaceCstrAlias, Maps, + MixedCstrAlias, + NonBasicCstrAlias, + PointableCstrAlias, PointerAlias, PointerTextMarshaler, StringAlias, diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts index 9a9db9f4a..aaabd3502 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/models.ts @@ -1,6 +1,10 @@ // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT +export type BasicCstrAlias = S; + +export type ComparableCstrAlias = R; + export type EmbeddedCustomInterface = string; export type EmbeddedOriginalInterface = string; @@ -13,6 +17,10 @@ export type EmbeddedValue = string; export type EmbeddedValuePtr = string; +export type GoodTildeCstrAlias = U; + +export type InterfaceCstrAlias = Y; + export interface Maps { /** * Reject @@ -458,8 +466,294 @@ export interface Maps { * Soft reject */ "TPZPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAR": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GARPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAS": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GASPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAT": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GATPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAU": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAUPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAV": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAVPtr": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAW": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAWPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAX": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAXPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAY": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAYPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAZ": { [_: string]: number } | null; + + /** + * Soft reject + */ + "GAZPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GACV": { [_: ComparableCstrAlias]: number } | null; + + /** + * Reject + */ + "GACP": { [_: string]: number } | null; + + /** + * Reject + */ + "GACiPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GACPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GABi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GABs": { [_: BasicCstrAlias]: number } | null; + + /** + * Reject + */ + "GABiPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GABT": { [_: string]: number } | null; + + /** + * Reject + */ + "GABTPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GAGT": { [_: GoodTildeCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAGTPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GANBV": { [_: NonBasicCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GANBP": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GANBVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GANBPPtr": { [_: string]: number } | null; + + /** + * Accept + */ + "GAPlV1": { [_: PointableCstrAlias]: number } | null; + + /** + * Accept + */ + "GAPlV2": { [_: PointableCstrAlias]: number } | null; + + /** + * Reject + */ + "GAPlP1": { [_: string]: number } | null; + + /** + * Accept + */ + "GAPlP2": { [_: PointableCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAPlVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPlPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAMi": { [_: `${number}`]: number } | null; + + /** + * Accept + */ + "GAMS": { [_: MixedCstrAlias]: number } | null; + + /** + * Accept + */ + "GAMV": { [_: MixedCstrAlias]: number } | null; + + /** + * Reject + */ + "GAMSPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAMVPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAII": { [_: string]: number } | null; + + /** + * Accept + */ + "GAIV": { [_: InterfaceCstrAlias]: number } | null; + + /** + * Accept, hide + */ + "GAIP": { [_: string]: number } | null; + + /** + * Reject + */ + "GAIIPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAIVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GAIPPtr": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPrV": { [_: string]: number } | null; + + /** + * Accept, hide + */ + "GAPrP": { [_: string]: number } | null; + + /** + * Reject + */ + "GAPrVPtr": { [_: string]: number } | null; + + /** + * Reject + */ + "GAPrPPtr": { [_: string]: number } | null; } +export type MixedCstrAlias = X; + +export type NonBasicCstrAlias = V; + +export type PointableCstrAlias = W; + export type PointerAlias = PointerTextMarshaler; export type PointerTextMarshaler = string; diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts index 8ebd680ee..7b59b53ed 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys/service.ts @@ -3,13 +3,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.Method") as any; - return $resultPromise; +export function Method(): $CancellablePromise<$models.Maps<$models.PointerTextMarshaler, number, number, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null, $models.ValueTextMarshaler, $models.StringType, $models.ValueTextMarshaler, $models.PointerTextMarshaler | null>> { + return $Call.ByName("main.Service.Method"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts index f1801dbe9..0de2fecd5 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/marshalers/service.ts @@ -3,13 +3,12 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function Method(): Promise<$models.Data> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.Service.Method") as any; - return $resultPromise; +export function Method(): $CancellablePromise<$models.Data> { + return $Call.ByName("main.Service.Method"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts index 8aa4349f6..e6638332a 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other/othermethods.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/other.OtherMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts index 60f7459e2..e37a596df 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here/somemethods.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne") as any; - return $resultPromise; +export function LikeThisOne(): $CancellablePromise<[$models.Person, $models.HowDifferent, $models.PrivatePerson]> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOne"); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here.SomeMethods.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts index 43cc4ace8..ec7619bfc 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedother.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedOther.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("main.EmbedOther.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts index 3674555d3..680b028b4 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/embedservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as nobindingshere$0 from "../no_bindings_here/models.js"; /** * LikeThisOne is an example method that does nothing. */ -export function LikeThisOne(): Promise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedService.LikeThisOne") as any; - return $resultPromise; +export function LikeThisOne(): $CancellablePromise<[nobindingshere$0.Person, nobindingshere$0.HowDifferent, nobindingshere$0.PrivatePerson]> { + return $Call.ByName("main.EmbedService.LikeThisOne"); } /** * LikeThisOtherOne does nothing as well, but is different. */ -export function LikeThisOtherOne(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.EmbedService.LikeThisOtherOne") as any; - return $resultPromise; +export function LikeThisOtherOne(): $CancellablePromise { + return $Call.ByName("main.EmbedService.LikeThisOtherOne"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts index a1c5e3028..4166b32f7 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/out_of_tree/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet($0: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", $0) as any; - return $resultPromise; +export function Greet($0: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", $0); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts index f68e20023..41664b850 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts index bf655567e..5a733e6c9 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.OtherService.Hello") as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts index f68e20023..41664b850 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/greetservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts index bf655567e..5a733e6c9 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_files/otherservice.ts @@ -3,9 +3,8 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; -export function Hello(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.OtherService.Hello") as any; - return $resultPromise; +export function Hello(): $CancellablePromise { + return $Call.ByName("main.OtherService.Hello"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts index 4602f3a69..5a8e9adc3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts index 6e0546e29..018d8df30 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay") as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_multiple_other/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts index e05f6102b..b8abcb9a6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_non_pointer_single/greetservice.ts @@ -8,226 +8,183 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.ArrayInt", $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByName("main.GreetService.ArrayInt", $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.BoolInBoolOut", $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float32InFloat32Out", $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float64InFloat64Out", $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16InIntOut", $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32InIntOut", $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64InIntOut", $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8InIntOut", $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntInIntOut", $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.IntInIntOut", $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInAndOutput", $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } -export function MapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntInt", $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntInt", $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntIntPointer", $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceInt", $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in) as any; - return $resultPromise; +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise<{ [_: `${number}`]: number[] | null } | null> { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NoInputsStringOut") as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByName("main.GreetService.NoInputsStringOut"); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerMapIntInt", $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerStringInStringOut", $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } -export function StringArrayInputNamedOutput($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutput($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in); } -export function StringArrayInputNamedOutputs($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutputs($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in); } -export function StringArrayInputStringArrayOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringArrayOut($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in); } -export function StringArrayInputStringOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructInputStructOutput", $in) as any; - return $resultPromise; +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in) as any; - return $resultPromise; +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16InUIntOut", $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32InUIntOut", $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64InUIntOut", $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8InUIntOut", $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntInUIntOut", $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts index e05f6102b..b8abcb9a6 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/struct_literal_single/greetservice.ts @@ -8,226 +8,183 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function ArrayInt($in: number[]): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.ArrayInt", $in) as any; - return $resultPromise; +export function ArrayInt($in: number[]): $CancellablePromise { + return $Call.ByName("main.GreetService.ArrayInt", $in); } -export function BoolInBoolOut($in: boolean): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.BoolInBoolOut", $in) as any; - return $resultPromise; +export function BoolInBoolOut($in: boolean): $CancellablePromise { + return $Call.ByName("main.GreetService.BoolInBoolOut", $in); } -export function Float32InFloat32Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float32InFloat32Out", $in) as any; - return $resultPromise; +export function Float32InFloat32Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float32InFloat32Out", $in); } -export function Float64InFloat64Out($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Float64InFloat64Out", $in) as any; - return $resultPromise; +export function Float64InFloat64Out($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Float64InFloat64Out", $in); } /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } -export function Int16InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16InIntOut", $in) as any; - return $resultPromise; +export function Int16InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16InIntOut", $in); } -export function Int16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int16PointerInAndOutput", $in); } -export function Int32InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32InIntOut", $in) as any; - return $resultPromise; +export function Int32InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32InIntOut", $in); } -export function Int32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int32PointerInAndOutput", $in); } -export function Int64InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64InIntOut", $in) as any; - return $resultPromise; +export function Int64InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64InIntOut", $in); } -export function Int64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int64PointerInAndOutput", $in); } -export function Int8InIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8InIntOut", $in) as any; - return $resultPromise; +export function Int8InIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8InIntOut", $in); } -export function Int8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in) as any; - return $resultPromise; +export function Int8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.Int8PointerInAndOutput", $in); } -export function IntInIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntInIntOut", $in) as any; - return $resultPromise; +export function IntInIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.IntInIntOut", $in); } -export function IntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInAndOutput", $in) as any; - return $resultPromise; +export function IntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInAndOutput", $in); } -export function IntPointerInputNamedOutputs($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in) as any; - return $resultPromise; +export function IntPointerInputNamedOutputs($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.IntPointerInputNamedOutputs", $in); } -export function MapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntInt", $in) as any; - return $resultPromise; +export function MapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntInt", $in); } -export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntIntPointer", $in) as any; - return $resultPromise; +export function MapIntIntPointer($in: { [_: `${number}`]: number | null } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntIntPointer", $in); } -export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceInt", $in) as any; - return $resultPromise; +export function MapIntSliceInt($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.MapIntSliceInt", $in); } -export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): Promise<{ [_: `${number}`]: number[] | null } | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in) as any; - return $resultPromise; +export function MapIntSliceIntInMapIntSliceIntOut($in: { [_: `${number}`]: number[] | null } | null): $CancellablePromise<{ [_: `${number}`]: number[] | null } | null> { + return $Call.ByName("main.GreetService.MapIntSliceIntInMapIntSliceIntOut", $in); } -export function NoInputsStringOut(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NoInputsStringOut") as any; - return $resultPromise; +export function NoInputsStringOut(): $CancellablePromise { + return $Call.ByName("main.GreetService.NoInputsStringOut"); } -export function PointerBoolInBoolOut($in: boolean | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in) as any; - return $resultPromise; +export function PointerBoolInBoolOut($in: boolean | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerBoolInBoolOut", $in); } -export function PointerFloat32InFloat32Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in) as any; - return $resultPromise; +export function PointerFloat32InFloat32Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat32InFloat32Out", $in); } -export function PointerFloat64InFloat64Out($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in) as any; - return $resultPromise; +export function PointerFloat64InFloat64Out($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerFloat64InFloat64Out", $in); } -export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerMapIntInt", $in) as any; - return $resultPromise; +export function PointerMapIntInt($in: { [_: `${number}`]: number } | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerMapIntInt", $in); } -export function PointerStringInStringOut($in: string | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.PointerStringInStringOut", $in) as any; - return $resultPromise; +export function PointerStringInStringOut($in: string | null): $CancellablePromise { + return $Call.ByName("main.GreetService.PointerStringInStringOut", $in); } -export function StringArrayInputNamedOutput($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutput($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutput", $in); } -export function StringArrayInputNamedOutputs($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in) as any; - return $resultPromise; +export function StringArrayInputNamedOutputs($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputNamedOutputs", $in); } -export function StringArrayInputStringArrayOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringArrayOut($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringArrayOut", $in); } -export function StringArrayInputStringOut($in: string[] | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StringArrayInputStringOut", $in) as any; - return $resultPromise; +export function StringArrayInputStringOut($in: string[] | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StringArrayInputStringOut", $in); } -export function StructInputStructOutput($in: $models.Person): Promise<$models.Person> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructInputStructOutput", $in) as any; - return $resultPromise; +export function StructInputStructOutput($in: $models.Person): $CancellablePromise<$models.Person> { + return $Call.ByName("main.GreetService.StructInputStructOutput", $in); } -export function StructPointerInputErrorOutput($in: $models.Person | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in) as any; - return $resultPromise; +export function StructPointerInputErrorOutput($in: $models.Person | null): $CancellablePromise { + return $Call.ByName("main.GreetService.StructPointerInputErrorOutput", $in); } -export function StructPointerInputStructPointerOutput($in: $models.Person | null): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in) as any; - return $resultPromise; +export function StructPointerInputStructPointerOutput($in: $models.Person | null): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.StructPointerInputStructPointerOutput", $in); } -export function UInt16InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16InUIntOut", $in) as any; - return $resultPromise; +export function UInt16InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16InUIntOut", $in); } -export function UInt16PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt16PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt16PointerInAndOutput", $in); } -export function UInt32InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32InUIntOut", $in) as any; - return $resultPromise; +export function UInt32InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32InUIntOut", $in); } -export function UInt32PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt32PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt32PointerInAndOutput", $in); } -export function UInt64InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64InUIntOut", $in) as any; - return $resultPromise; +export function UInt64InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64InUIntOut", $in); } -export function UInt64PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt64PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt64PointerInAndOutput", $in); } -export function UInt8InUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8InUIntOut", $in) as any; - return $resultPromise; +export function UInt8InUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8InUIntOut", $in); } -export function UInt8PointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in) as any; - return $resultPromise; +export function UInt8PointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UInt8PointerInAndOutput", $in); } -export function UIntInUIntOut($in: number): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntInUIntOut", $in) as any; - return $resultPromise; +export function UIntInUIntOut($in: number): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntInUIntOut", $in); } -export function UIntPointerInAndOutput($in: number | null): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in) as any; - return $resultPromise; +export function UIntPointerInAndOutput($in: number | null): $CancellablePromise { + return $Call.ByName("main.GreetService.UIntPointerInAndOutput", $in); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts index f817be3c7..80bebe425 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts index f817be3c7..80bebe425 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_function/greetservice.ts @@ -8,12 +8,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; /** * Greet someone */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts index 4602f3a69..5a8e9adc3 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/greetservice.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -17,15 +17,13 @@ import * as $models from "./models.js"; /** * Greet does XYZ */ -export function Greet(name: string): Promise & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.Greet", name) as any; - return $resultPromise; +export function Greet(name: string): $CancellablePromise { + return $Call.ByName("main.GreetService.Greet", name); } /** * NewPerson creates a new person */ -export function NewPerson(name: string): Promise<$models.Person | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("main.GreetService.NewPerson", name) as any; - return $resultPromise; +export function NewPerson(name: string): $CancellablePromise<$models.Person | null> { + return $Call.ByName("main.GreetService.NewPerson", name); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts index 6af5a977a..c93f85314 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services/otherservice.ts @@ -9,7 +9,7 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports -import {Call as $Call} from "/wails/runtime.js"; +import { Call as $Call, CancellablePromise as $CancellablePromise } from "/wails/runtime.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports @@ -18,7 +18,6 @@ import * as $models from "./models.js"; /** * Yay does this and that */ -export function Yay(): Promise<$models.Address | null> & { cancel(): void } { - let $resultPromise = $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay") as any; - return $resultPromise; +export function Yay(): $CancellablePromise<$models.Address | null> { + return $Call.ByName("github.com/wailsapp/wails/v3/internal/generator/testcases/variable_single_from_other_function/services.OtherService.Yay"); } diff --git a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/warnings.log b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/warnings.log index dbefd8749..e802b6b63 100644 --- a/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/warnings.log +++ b/v3/internal/generator/testdata/output/lang=TS/UseInterfaces=true/UseNames=true/warnings.log @@ -33,11 +33,34 @@ package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type bool is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type complex64 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type float32 is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[T] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BadTildeCstrPtrAlias[struct{}] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[S] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.BasicCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[R] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ComparableCstrPtrAlias[int] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.EmbeddedPointer is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.GoodTildeCstrPtrAlias[U] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[Y] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfaceCstrPtrAlias[encoding.TextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.InterfacePtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[X] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.MixedCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.StringType] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[*github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonBasicCstrPtrAlias[V] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.NonTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[W] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointableCstrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerAlias is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[R, Z] is used as a map key, but some of its instantiations might not implement encoding.TextMarshaler: this might result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors +package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerCstrPtrAlias[github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler, *github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.ValueTextMarshaler] is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerPtrType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerTextMarshaler is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors package github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys: type github.com/wailsapp/wails/v3/internal/generator/testcases/map_keys.PointerType is used as a map key, but does not implement encoding.TextMarshaler: this will likely result in runtime errors diff --git a/v3/internal/generator/testdata/tsconfig.json b/v3/internal/generator/testdata/tsconfig.json index 8bfb46227..aa4939e6a 100644 --- a/v3/internal/generator/testdata/tsconfig.json +++ b/v3/internal/generator/testdata/tsconfig.json @@ -1,28 +1,35 @@ { - "compilerOptions": { - "allowJs": true, - "noEmit": true, - "skipLibCheck": true, + "include": ["output/**/*.js", "output/**/*.ts"], + "exclude": ["output/**/*.got.?s"], + "references": [ + { "path": "../../runtime/desktop/@wailsio/runtime" } + ], + "compilerOptions": { + "allowJs": true, - "target": "ES6", - "lib": ["ES6", "DOM"], + "noEmit": true, + "skipLibCheck": true, - "module": "ES6", - "moduleResolution": "Node", - "isolatedModules": true, - "esModuleInterop": true, + "target": "ES2015", + "module": "ES2015", + "moduleResolution": "bundler", + "isolatedModules": true, + "verbatimModuleSyntax": true, - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": false, - "noImplicitAny": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, + "lib": [ + "DOM", + "ESNext" + ], - "paths": { - "/wails/runtime.js": ["../../runtime/desktop/@wailsio/runtime/types/index.d.ts"] - } - }, - "include": ["output/**/*"], - "exclude": ["output/**/*.got.?s"] + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": false, + "noImplicitAny": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + + "paths": { + "/wails/runtime.js": ["../../runtime/desktop/@wailsio/runtime/src/index.ts"] + } + } } diff --git a/v3/internal/runtime/.gitignore b/v3/internal/runtime/.gitignore index cdd93f315..059d2134d 100644 --- a/v3/internal/runtime/.gitignore +++ b/v3/internal/runtime/.gitignore @@ -1,2 +1,5 @@ node_modules -.task \ No newline at end of file +.task +*.tsbuildinfo +desktop/@wailsio/runtime/dist/ +desktop/@wailsio/runtime/types/ diff --git a/v3/internal/runtime/Taskfile.yaml b/v3/internal/runtime/Taskfile.yaml index 1e5323ea7..47877d4ef 100644 --- a/v3/internal/runtime/Taskfile.yaml +++ b/v3/internal/runtime/Taskfile.yaml @@ -11,25 +11,29 @@ tasks: cmds: - npm install + check: + dir: desktop/@wailsio/runtime + deps: + - install-deps + cmds: + - npm run check + test: dir: desktop/@wailsio/runtime + deps: + - install-deps cmds: - - npx vitest run - - update: - dir: desktop/@wailsio/runtime - cmds: - - npx npm-check-updates -u + - npm test build:debug: internal: true cmds: - - npx esbuild@latest desktop/@wailsio/runtime/src/index.js --inject:desktop/compiled/main.js --format=esm --bundle --tree-shaking=true --sourcemap=inline --outfile=../assetserver/bundledassets/runtime.debug.js --define:DEBUG=true + - npx esbuild@latest desktop/@wailsio/runtime/src/index.ts --inject:desktop/compiled/main.js --format=esm --target=safari11 --bundle --ignore-annotations --tree-shaking=true --sourcemap=inline --outfile=../assetserver/bundledassets/runtime.debug.js --define:DEBUG=true build:production: internal: true cmds: - - npx esbuild@latest desktop/@wailsio/runtime/src/index.js --inject:desktop/compiled/main.js --format=esm --bundle --tree-shaking=true --minify --outfile=../assetserver/bundledassets/runtime.js --define:DEBUG=false --drop:console + - npx esbuild@latest desktop/@wailsio/runtime/src/index.ts --inject:desktop/compiled/main.js --format=esm --target=safari11 --bundle --ignore-annotations --tree-shaking=true --minify --outfile=../assetserver/bundledassets/runtime.js --define:DEBUG=false --drop:console build:all: internal: true diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/.npmignore b/v3/internal/runtime/desktop/@wailsio/runtime/.npmignore deleted file mode 100644 index a77a7c831..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -events.test.js -node_modules -types/drag.d.ts -types/contextmenu.d.ts -types/log.d.ts \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/hierarchy.js b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/hierarchy.js new file mode 100644 index 000000000..6eb336562 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJylk09PAjEQxb/LnAvSsv/Ym6jxgsGIF2MIqbuz0tDtmrZ4IfvdTSGSYljThVObNm/m9+a1O9BNYw3k7zGLCKWThNBRPCIZSwgdp9mSgMZKYmFFowzkO4hZ5BbFa4Qc7rgqUEr+IfFZN7UwOBMbBAIboUrIWZwQ2GoJOQhlUVe8QHNzXjRc21oCgUJyYyAHa8qBqzI4Kt3lWshSo3LAUbpsCcRR+i/PkYWy7Jdl3+IsSCfE4aAlkLHE6xduerXfKy5Xw+tNTxj1IJ6wFHzRbHXRA8ITBUC0BNy78Jo+fKOyr1x/og1v6on6Op8wSiilI2ffrR7KwcV0W1Wow1l8VeAE6MRve1uWez8zYSwq1POvwycJJugoEAyT/I3jYpILMU4CctPZh8Mif0ovyEv3wRZWI6+nb/OpO+kTVFeFwDmxOO3EuceKb6W9juikSCDUOM06oR5dCKK4DuqkSO8oWTQibnDLtm1/AIRmEWo=" \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/highlight.css b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/highlight.css index 5674cf392..878117697 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/highlight.css +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/highlight.css @@ -1,22 +1,64 @@ :root { + --light-hl-0: #0000FF; + --dark-hl-0: #569CD6; + --light-hl-1: #000000; + --dark-hl-1: #D4D4D4; + --light-hl-2: #001080; + --dark-hl-2: #9CDCFE; + --light-hl-3: #795E26; + --dark-hl-3: #DCDCAA; + --light-hl-4: #008000; + --dark-hl-4: #6A9955; + --light-hl-5: #AF00DB; + --dark-hl-5: #C586C0; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); --code-background: var(--light-code-background); } } @media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); --code-background: var(--dark-code-background); } } :root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); --code-background: var(--light-code-background); } :root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); --code-background: var(--dark-code-background); } +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } pre, code { background: var(--code-background); } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.js b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.js index b79c9e89f..58882d76d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.js @@ -1,15 +1,18 @@ -(function(svg) { - svg.innerHTML = ``; - svg.style.display = 'none'; - if (location.protocol === 'file:') { - if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); - else updateUseElements() - function updateUseElements() { - document.querySelectorAll('use').forEach(el => { - if (el.getAttribute('href').includes('#icon-')) { - el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); - } - }); - } +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); } -})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.svg b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.svg index 7dead6118..50ad5799d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.svg +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/icons.svg @@ -1 +1 @@ - \ No newline at end of file +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/main.js b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/main.js index 1daeb6900..2363f64c2 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/main.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/main.js @@ -1,8 +1,9 @@ "use strict"; -"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.scrollToHash(),this.updateIndexVisibility())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.scrollToHash(),this.updateIndexVisibility())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; +"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function A(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await A(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var H="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,be=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(be?"is-mobile":"not-mobile");be&&"ontouchstart"in document.documentElement&&(Xe=!0,H="touchstart",Ee="touchmove",B="touchend");document.addEventListener(H,t=>{ie=!0,D=!1;let e=H=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=H=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(H,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await A(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await A(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(_e(e,i,n))}function _e(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=_e(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var Oe=document.getElementById("tsd-theme");Oe&&Se(Oe);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/navigation.js b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/navigation.js index afd558a28..671dd0d8a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/navigation.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WYUU/bMBDHv0ue0aYxhibeCgWGRGBrN/UB7cFNr2DhOJHjFMq07z45jlOnOf7NnkC5//18Pp/vDA9/EkuvNjlLJmWpZCasLHRylJTCPiVnSV6sakXVx8j44cnmKjlKnqVeJWcnR0n2JNXKkE7OHjrYN7miHWVd68y59jlO04ednvw96hA/amkPIZwGIOZPxcshhNMMEL8jyLkpXioyw5y0hlH5uC9J/5rdcsEETCuBsVwIpYaBuK+jopjV2sqcLo0pov1kSlRVwMSSPvPT8de9SO7LZgc7ktSWzFpkARaJ+qzjL6dxhrc3Uy4zDcMZwRGfb+9EzpZa6+3MwL+f0T3vYWL3z0PJclkIs2IOJZhGncyc7E/3GxdJB2pFYDeHGSygtyVDwhKzn+b7qM1M9JYNwhMmegt2MDFGQG9nh/Vgaa5kxpeEZ3QawElFCQipKIHvXa2UWCoUQpCg5mVNnfGn6RleAA9zKoUqHqvhabaGUcd5Xlsbz4TolgeMl6A7fiUVXUll40bKgHYyBEupqsQjeSfUhQKWc0ALuF7sQhm/AuuBlpiLDf3fEqwHWmKvz+8KKBCZLt8rwRu9LpC/swP3kBOECBr4EKCq/yoZYoIG3ac2fQgTNACzEEZL/YgorQTezMsNactcTP991L1cCKmqRj+c5S1mJ0Gz/Oe2pCiUjTDS9aaO0tj7gM/H8V5y/qXWujszqpL1Gjjfr9fYd8LP7537hJnhEYEtq+CN6ulep7WysuQrqiMEESTx46pjwElVka3ZWdW6N3ZYi1dKcDOi+TyqEq/JOjEXhIe0AhjFPDNEmomjNYx74VI8MqMmGiBOANtyo4MI/xNC5BthhHwjBLgm+05dB4JXgLK4JntRG9PrDiymVWHUdyNzYdiHWYRqVfiYt5WlnDnl5vuoQ77UG2kKnZO2/QkVZ9rj9qRw5s8PwbwCMS5EKZZSSSvjhhrlyoNiGch7FDyARSo0yqtJOj09AZxWgRmzFBNm6SH/QzE4BWRMhXlOC/7fCx0miDCJljXbtHYYp4CMW6nrV8hoFJCRigwSUpFB/4XUq+IFFVynARypN8UzyqoXwMu9SG+HN3uR3o681u/90eQI3grin5EqxOo9d2/FwTcp4t5B3gJeQFLzLyD3fbjmP+Wr38F0EwAA" \ No newline at end of file +window.navigationData = "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" \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/search.js b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/search.js index ba19b9dbf..075d3a4de 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/search.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/style.css b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/style.css index 072daed85..2ab8b836e 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/style.css +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/assets/style.css @@ -1,87 +1,247 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: #a55c0e; - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: #e07d13; - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { +@layer typedoc { :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + html { + color-scheme: var(--color-scheme); + } + + body { + margin: 0; + } + + :root[data-theme="light"] { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); --color-background-warning: var(--light-color-background-warning); @@ -91,9 +251,16 @@ --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -105,6 +272,7 @@ --color-ts-constructor: var(--light-color-ts-constructor); --color-ts-property: var(--light-color-ts-property); --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); --color-ts-call-signature: var(--light-color-ts-call-signature); --color-ts-index-signature: var(--light-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -116,14 +284,19 @@ --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } -} -@media (prefers-color-scheme: dark) { - :root { + :root[data-theme="dark"] { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); --color-background-warning: var(--dark-color-background-warning); @@ -133,9 +306,16 @@ --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -147,6 +327,7 @@ --color-ts-constructor: var(--dark-color-ts-constructor); --color-ts-property: var(--dark-color-ts-property); --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); --color-ts-call-signature: var(--dark-color-ts-call-signature); --color-ts-index-signature: var(--dark-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -158,1258 +339,1273 @@ --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } -} -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a:not(.link), -h2 > a:not(.link), -h3 > a:not(.link), -h4 > a:not(.link), -h5 > a:not(.link), -h6 > a:not(.link) { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); } - to { + + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } + + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } + + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } + + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } + + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } + + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } + + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } + + dl, + menu, + ol, + ul { + margin: 1em 0; + } + + dd { + margin: 0 0 0 34px; + } + + .container { + max-width: 1700px; + padding: 0 2rem; + } + + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; + } + footer > p { + margin: 0 1em; + } + + .container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); + } + + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + } + + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } + + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } + + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; + } + pre:hover > button, + pre > button.visible { opacity: 1; } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; } - to { + + .tsd-typography { + line-height: 1.333em; + } + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; + } + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; + } + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; + } + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; + } + .tsd-typography table { + border-collapse: collapse; + border: none; + } + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); + } + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); + } + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); + } + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; + } + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; + } + + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } + + .tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } + + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } + + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } + + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } + + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; opacity: 0; } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-full-hierarchy:not(:last-child) { - margin-bottom: 1em; - padding-bottom: 1em; - border-bottom: 1px solid var(--color-accent); -} -.tsd-full-hierarchy, -.tsd-full-hierarchy ul { - list-style: none; - margin: 0; - padding: 0; -} -.tsd-full-hierarchy ul { - padding-left: 1.5rem; -} -.tsd-full-hierarchy a { - padding: 0.25rem 0 !important; - font-size: 1rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); + opacity: 0.99; } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.25rem); - display: flex; - align-items: center; -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: flex; - width: calc(100% - 0.25rem); - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { + .settings-label { + font-weight: bold; + text-transform: uppercase; display: inline-block; } - .container-main { + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } + + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } + + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } + + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } + + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } + + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; + } + .tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; + } + + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } + + .tsd-anchor { + position: relative; + top: -100px; + } + + .tsd-member { + position: relative; + } + .tsd-member .tsd-anchor + h3 { display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; } - html .col-content { - float: none; + + .tsd-navigation.settings { + margin: 1rem 0; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } + + .tsd-page-navigation-section { + margin-left: 10px; + } + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 20px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } + + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } + + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + .tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; + } + /* + * We need to be careful to target the arrow indicating whether the accordion + * is open, but not any other SVGs included in the details element. + */ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h5 > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + } + + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } + + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } + + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } + + #tsd-search { + transition: background-color 0.2s; + } + #tsd-search .title { + position: relative; + z-index: 2; + } + #tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; + } + #tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; + #tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; + } + #tsd-search .field input, + #tsd-search .title, + #tsd-toolbar-links a { + transition: opacity 0.2s; + } + #tsd-search .results { + position: absolute; visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + #tsd-search .results li { background-color: var(--color-background); - transform: translate(100%, 0); + line-height: initial; + padding: 4px; } - html .col-sidebar > *:last-child { - padding-bottom: 20px; + #tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); } - html .overlay { - content: ""; + #tsd-search .results li.state { + display: none; + } + #tsd-search .results li.current:not(.no-results), + #tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); + } + #tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; + } + #tsd-search .results a:before { + top: 10px; + } + #tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; + } + #tsd-search.has-focus { + background-color: var(--color-accent); + } + #tsd-search.has-focus .field input { + top: 0; + opacity: 1; + } + #tsd-search.has-focus .title, + #tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; + } + #tsd-search.has-focus .results { + visibility: visible; + } + #tsd-search.loading .results li.state.loading { display: block; - position: fixed; - z-index: 1023; + } + #tsd-search.failure .results li.state.failure { + display: block; + } + + #tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + } + #tsd-toolbar-links a { + margin-left: 1.5rem; + } + #tsd-toolbar-links a:hover { + text-decoration: underline; + } + + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } + + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } + + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } + + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } + + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } + + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } + + .tsd-page-toolbar { + position: sticky; + z-index: 1; top: 0; left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; + } + .tsd-page-toolbar a.title { + font-weight: bold; + } + .tsd-page-toolbar a.title:hover { + text-decoration: underline; + } + .tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; + } + .tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; + } + .tsd-page-toolbar .table-cell:first-child { + width: 100%; + } + .tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; + } + + .tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); + } + .tsd-widget.no-caption { + width: 40px; + } + .tsd-widget.no-caption:before { + margin: 0; + } + + .tsd-widget.options, + .tsd-widget.menu { + display: none; + } + input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; + } + input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; + } + + img { + max-width: 100%; + } + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; + } + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); + } + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; visibility: hidden; } - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg { visibility: visible; } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; + + .deprecated { + text-decoration: line-through !important; } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; + + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); + } + + .tsd-kind-project { + color: var(--color-ts-project); + } + .tsd-kind-module { + color: var(--color-ts-module); + } + .tsd-kind-namespace { + color: var(--color-ts-namespace); + } + .tsd-kind-enum { + color: var(--color-ts-enum); + } + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); + } + .tsd-kind-variable { + color: var(--color-ts-variable); + } + .tsd-kind-function { + color: var(--color-ts-function); + } + .tsd-kind-class { + color: var(--color-ts-class); + } + .tsd-kind-interface { + color: var(--color-ts-interface); + } + .tsd-kind-constructor { + color: var(--color-ts-constructor); + } + .tsd-kind-property { + color: var(--color-ts-property); + } + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); + } + + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); + } + + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); + } + + *::-webkit-scrollbar { + width: 0.75rem; + } + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); + } + + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); + } + + /* mobile */ + @media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } } } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Call.RuntimeError.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Call.RuntimeError.html index c48e109d2..c4e9ce71d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Call.RuntimeError.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Call.RuntimeError.html @@ -1,11 +1,11 @@ -RuntimeError | @wailsio/runtime

Exception class that will be thrown in case the bound method returns an error. +RuntimeError | @wailsio/runtime

Exception class that will be thrown in case the bound method returns an error. The value of the RuntimeError#name property is "RuntimeError".

-

Hierarchy

  • Error
    • RuntimeError

Constructors

Properties

Constructors

  • Constructs a new RuntimeError instance.

    -

    Parameters

    • message: string

      The error message.

      -
    • Rest ...args: any[]

      Optional arguments for the Error constructor.

      -

    Returns RuntimeError

Properties

cause?: unknown
message: string
name: string
stack?: string

Generated using TypeDoc

\ No newline at end of file +

Hierarchy

Constructors

Properties

Constructors

  • Constructs a new RuntimeError instance.

    +

    Parameters

    • Optionalmessage: string

      The error message.

      +
    • Optionaloptions: ErrorOptions

      Options to be forwarded to the Error constructor.

      +

    Returns RuntimeError

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelError.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelError.html new file mode 100644 index 000000000..b5c76bcea --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelError.html @@ -0,0 +1,13 @@ +CancelError | @wailsio/runtime

Exception class that will be used as rejection reason +in case a CancellablePromise is cancelled successfully.

+

The value of the name property is the string "CancelError". +The value of the cause property is the cause passed to the cancel method, if any.

+

Hierarchy

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancellablePromise.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancellablePromise.html new file mode 100644 index 000000000..2b8d294df --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancellablePromise.html @@ -0,0 +1,263 @@ +CancellablePromise | @wailsio/runtime

Class CancellablePromise<T>

A promise with an attached method for cancelling long-running operations (see CancellablePromise#cancel). +Cancellation can optionally be bound to an AbortSignal +for better composability (see CancellablePromise#cancelOn).

+

Cancelling a pending promise will result in an immediate rejection +with an instance of CancelError as reason, +but whoever started the promise will be responsible +for actually aborting the underlying operation. +To this purpose, the constructor and all chaining methods +accept optional cancellation callbacks.

+

If a CancellablePromise still resolves after having been cancelled, +the result will be discarded. If it rejects, the reason +will be reported as an unhandled rejection, +wrapped in a CancelledRejectionError instance. +To facilitate the handling of cancellation requests, +cancelled CancellablePromises will not report unhandled CancelErrors +whose cause field is the same as the one with which the current promise was cancelled.

+

All usual promise methods are defined and return a CancellablePromise +whose cancel method will cancel the parent operation as well, propagating the cancellation reason +upwards through promise chains. +Conversely, cancelling a promise will not automatically cancel dependent promises downstream:

+
let root = new CancellablePromise((resolve, reject) => { ... });
let child1 = root.then(() => { ... });
let child2 = child1.then(() => { ... });
let child3 = root.catch(() => { ... });
child1.cancel(); // Cancels child1 and root, but not child2 or child3 +
+ +

Cancelling a promise that has already settled is safe and has no consequence.

+

The cancel method returns a promise that always fulfills +after the whole chain has processed the cancel request +and all attached callbacks up to that moment have run.

+

All ES2024 promise methods (static and instance) are defined on CancellablePromise, +but actual availability may vary with OS/webview version.

+

In line with the proposal at https://github.com/tc39/proposal-rm-builtin-subclassing, +CancellablePromise does not support transparent subclassing. +Extenders should take care to provide their own method implementations. +This might be reconsidered in case the proposal is retired.

+

CancellablePromise is a wrapper around the DOM Promise object +and is compliant with the Promises/A+ specification +(it passes the compliance suite) +if so is the underlying implementation.

+

Type Parameters

  • T

Hierarchy

Implements

Constructors

  • Creates a new CancellablePromise.

    +

    Type Parameters

    • T

    Parameters

    • executor: CancellablePromiseExecutor<T>

      A callback used to initialize the promise. This callback is passed two arguments: +a resolve callback used to resolve the promise with a value +or the result of another promise (possibly cancellable), +and a reject callback used to reject the promise with a provided reason or error. +If the value provided to the resolve callback is a thenable and cancellable object +(it has a then and a cancel method), +cancellation requests will be forwarded to that object and the oncancelled will not be invoked anymore. +If any one of the two callbacks is called after the promise has been cancelled, +the provided values will be cancelled and resolved as usual, +but their results will be discarded. +However, if the resolution process ultimately ends up in a rejection +that is not due to cancellation, the rejection reason +will be wrapped in a CancelledRejectionError +and bubbled up as an unhandled rejection.

      +
    • Optionaloncancelled: CancellablePromiseCanceller

      It is the caller's responsibility to ensure that any operation +started by the executor is properly halted upon cancellation. +This optional callback can be used to that purpose. +It will be called synchronously with a cancellation cause +when cancellation is requested, after the promise has already rejected +with a CancelError, but before +any then/catch/finally callback runs. +If the callback returns a thenable, the promise returned from cancel +will only fulfill after the former has settled. +Unhandled exceptions or rejections from the callback will be wrapped +in a CancelledRejectionError and bubbled up as unhandled rejections. +If the resolve callback is called before cancellation with a cancellable promise, +cancellation requests on this promise will be diverted to that promise, +and the original oncancelled callback will be discarded.

      +

    Returns CancellablePromise<T>

Properties

"[toStringTag]": string
"[species]": PromiseConstructor

Methods

  • Cancels immediately the execution of the operation associated with this promise. +The promise rejects with a CancelError instance as reason, +with the CancelError#cause property set to the given argument, if any.

    +

    Has no effect if called after the promise has already settled; +repeated calls in particular are safe, but only the first one +will set the cancellation cause.

    +

    The CancelError exception need not be handled explicitly on the promises that are being cancelled: +cancelling a promise with no attached rejection handler does not trigger an unhandled rejection event. +Therefore, the following idioms are all equally correct:

    +
    new CancellablePromise((resolve, reject) => { ... }).cancel();
    new CancellablePromise((resolve, reject) => { ... }).then(...).cancel();
    new CancellablePromise((resolve, reject) => { ... }).then(...).catch(...).cancel(); +
    + +

    Whenever some cancelled promise in a chain rejects with a CancelError +with the same cancellation cause as itself, the error will be discarded silently. +However, the CancelError will still be delivered to all attached rejection handlers +added by then and related methods:

    +
    let cancellable = new CancellablePromise((resolve, reject) => { ... });
    cancellable.then(() => { ... }).catch(console.log);
    cancellable.cancel(); // A CancelError is printed to the console. +
    + +

    If the CancelError is not handled downstream by the time it reaches +a non-cancelled promise, it will trigger an unhandled rejection event, +just like normal rejections would:

    +
    let cancellable = new CancellablePromise((resolve, reject) => { ... });
    let chained = cancellable.then(() => { ... }).then(() => { ... }); // No catch...
    cancellable.cancel(); // Unhandled rejection event on chained! +
    + +

    Therefore, it is important to either cancel whole promise chains from their tail, +as shown in the correct idioms above, or take care of handling errors everywhere.

    +

    Parameters

    • Optionalcause: any

    Returns CancellablePromise<void>

    A cancellable promise that fulfills after the cancel callback (if any) +and all handlers attached up to the call to cancel have run. +If the cancel callback returns a thenable, the promise returned by cancel +will also wait for that thenable to settle. +This enables callers to wait for the cancelled operation to terminate +without being forced to handle potential errors at the call site.

    +
    cancellable.cancel().then(() => {
    // Cleanup finished, it's safe to do something else.
    }, (err) => {
    // Unreachable: the promise returned from cancel will never reject.
    }); +
    + +

    Note that the returned promise will not handle implicitly any rejection +that might have occurred already in the cancelled chain. +It will just track whether registered handlers have been executed or not. +Therefore, unhandled rejections will never be silently handled by calling cancel.

    +
  • Binds promise cancellation to the abort event of the given AbortSignal. +If the signal has already aborted, the promise will be cancelled immediately. +When either condition is verified, the cancellation cause will be set +to the signal's abort reason (see AbortSignal.reason).

    +

    Has no effect if called (or if the signal aborts) after the promise has already settled. +Only the first signal to abort will set the cancellation cause.

    +

    For more details about the cancellation process, +see cancel and the CancellablePromise constructor.

    +

    This method enables awaiting cancellable promises without having +to store them for future cancellation, e.g.:

    +
    await longRunningOperation().cancelOn(signal);
    +
    + +

    instead of:

    +
    let promiseToBeCancelled = longRunningOperation();
    await promiseToBeCancelled; +
    + +

    Parameters

    Returns CancellablePromise<T>

    This promise, for method chaining.

    +
  • Attaches a callback for only the rejection of the Promise.

    +

    The optional oncancelled argument will be invoked when the returned promise is cancelled, +with the same semantics as the oncancelled argument of the constructor. +When the parent promise rejects or is cancelled, the onrejected callback will run, +even after the returned promise has been cancelled: +in that case, should it reject or throw, the reason will be wrapped +in a CancelledRejectionError and bubbled up as an unhandled rejection.

    +

    It is equivalent to

    +
    cancellablePromise.then(undefined, onrejected, oncancelled);
    +
    + +

    and the same caveats apply.

    +

    Type Parameters

    • TResult = never

    Parameters

    Returns CancellablePromise<T | TResult>

    A Promise for the completion of the callback. +Cancellation requests on the returned promise +will propagate up the chain to the parent promise, +but not in the other direction.

    +

    The promise returned from cancel will fulfill only after all attached handlers +up the entire promise chain have been run.

    +

    If onrejected returns a cancellable promise, +cancellation requests will be diverted to it, +and the specified oncancelled callback will be discarded. +See then for more details.

    +
  • Attaches a callback that is invoked when the CancellablePromise is settled (fulfilled or rejected). The +resolved value cannot be accessed or modified from the callback. +The returned promise will settle in the same state as the original one +after the provided callback has completed execution, +unless the callback throws or returns a rejecting promise, +in which case the returned promise will reject as well.

    +

    The optional oncancelled argument will be invoked when the returned promise is cancelled, +with the same semantics as the oncancelled argument of the constructor. +Once the parent promise settles, the onfinally callback will run, +even after the returned promise has been cancelled: +in that case, should it reject or throw, the reason will be wrapped +in a CancelledRejectionError and bubbled up as an unhandled rejection.

    +

    This method is implemented in terms of then and the same caveats apply. +It is polyfilled, hence available in every OS/webview version.

    +

    Parameters

    Returns CancellablePromise<T>

    A Promise for the completion of the callback. +Cancellation requests on the returned promise +will propagate up the chain to the parent promise, +but not in the other direction.

    +

    The promise returned from cancel will fulfill only after all attached handlers +up the entire promise chain have been run.

    +

    If onfinally returns a cancellable promise, +cancellation requests will be diverted to it, +and the specified oncancelled callback will be discarded. +See then for more details.

    +
  • Attaches callbacks for the resolution and/or rejection of the CancellablePromise.

    +

    The optional oncancelled argument will be invoked when the returned promise is cancelled, +with the same semantics as the oncancelled argument of the constructor. +When the parent promise rejects or is cancelled, the onrejected callback will run, +even after the returned promise has been cancelled: +in that case, should it reject or throw, the reason will be wrapped +in a CancelledRejectionError and bubbled up as an unhandled rejection.

    +

    Type Parameters

    • TResult1 = T
    • TResult2 = never

    Parameters

    Returns CancellablePromise<TResult1 | TResult2>

    A CancellablePromise for the completion of whichever callback is executed. +The returned promise is hooked up to propagate cancellation requests up the chain, but not down:

    +
      +
    • if the parent promise is cancelled, the onrejected handler will be invoked with a CancelError +and the returned promise will resolve regularly with its result;
    • +
    • conversely, if the returned promise is cancelled, the parent promise is cancelled too; +the onrejected handler will still be invoked with the parent's CancelError, +but its result will be discarded +and the returned promise will reject with a CancelError as well.
    • +
    +

    The promise returned from cancel will fulfill only after all attached handlers +up the entire promise chain have been run.

    +

    If either callback returns a cancellable promise, +cancellation requests will be diverted to it, +and the specified oncancelled callback will be discarded.

    +

Static Methods

  • Creates a CancellablePromise that is resolved with an array of results +when all of the provided Promises resolve, or rejected when any Promise is rejected.

    +

    Every one of the provided objects that is a thenable and cancellable object +will be cancelled when the returned promise is cancelled, with the same cause.

    +

    Type Parameters

    • T

    Parameters

    Returns CancellablePromise<Awaited<T>[]>

  • Creates a Promise that is resolved with an array of results when all of the provided Promises +resolve, or rejected when any Promise is rejected.

    +

    Type Parameters

    • T extends [] | readonly unknown[]

    Parameters

    • values: T

      An array of Promises.

      +

    Returns CancellablePromise<
        { -readonly [P in string
        | number
        | symbol]: Awaited<T[P<P>]> },
    >

    A new Promise.

    +
  • The any function returns a promise that is fulfilled by the first given promise to be fulfilled, +or rejected with an AggregateError containing an array of rejection reasons +if all of the given promises are rejected. +It resolves all elements of the passed iterable to promises as it runs this algorithm.

    +

    Every one of the provided objects that is a thenable and cancellable object +will be cancelled when the returned promise is cancelled, with the same cause.

    +

    Type Parameters

    • T

    Parameters

    Returns CancellablePromise<Awaited<T>>

  • The any function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError containing an array of rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm.

    +

    Type Parameters

    • T extends [] | readonly unknown[]

    Parameters

    • values: T

      An array or iterable of Promises.

      +

    Returns CancellablePromise<Awaited<T[number]>>

    A new Promise.

    +
  • Creates a new CancellablePromise that resolves after the specified timeout. +The returned promise can be cancelled without consequences.

    +

    Parameters

    • milliseconds: number

    Returns CancellablePromise<void>

  • Creates a new CancellablePromise that resolves after +the specified timeout, with the provided value. +The returned promise can be cancelled without consequences.

    +

    Type Parameters

    • T

    Parameters

    • milliseconds: number
    • value: T

    Returns CancellablePromise<T>

  • Creates a new CancellablePromise that cancels +after the specified timeout, with the provided cause.

    +

    If the AbortSignal.timeout factory method is available, +it is used to base the timeout on active time rather than elapsed time. +Otherwise, timeout falls back to setTimeout.

    +

    Type Parameters

    • T = never

    Parameters

    • milliseconds: number
    • Optionalcause: any

    Returns CancellablePromise<T>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelledRejectionError.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelledRejectionError.html new file mode 100644 index 000000000..a13e5ba4c --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/CancelledRejectionError.html @@ -0,0 +1,21 @@ +CancelledRejectionError | @wailsio/runtime

Class CancelledRejectionError

Exception class that will be reported as an unhandled rejection +in case a CancellablePromise rejects after being cancelled, +or when the oncancelled callback throws or rejects.

+

The value of the name property is the string "CancelledRejectionError". +The value of the cause property is the reason the promise rejected with.

+

Because the original promise was cancelled, +a wrapper promise will be passed to the unhandled rejection listener instead. +The promise property holds a reference to the original promise.

+

Hierarchy

  • Error
    • CancelledRejectionError

Constructors

Properties

Constructors

  • Constructs a new CancelledRejectionError instance.

    +

    Parameters

    • promise: CancellablePromise<unknown>

      The promise that caused the error originally.

      +
    • Optionalreason: any

      The rejection reason.

      +
    • Optionalinfo: string

      An optional informative message specifying the circumstances in which the error was thrown. +Defaults to the string "Unhandled rejection in cancelled promise.".

      +

    Returns CancelledRejectionError

Properties

cause?: unknown
message: string
name: string
promise: CancellablePromise<unknown>

Holds a reference to the promise that was cancelled and then rejected.

+
stack?: string
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Events.WailsEvent.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Events.WailsEvent.html index 62aa8f9ad..57ba9c59f 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Events.WailsEvent.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/Events.WailsEvent.html @@ -1,4 +1,10 @@ -WailsEvent | @wailsio/runtime

Constructors

Properties

Constructors

Properties

data: any
name: any

Generated using TypeDoc

\ No newline at end of file +WailsEvent | @wailsio/runtime

Represents a system event or a custom event emitted through wails-provided facilities.

+

Constructors

Properties

Constructors

Properties

data: any

Optional data associated with the emitted event.

+
name: string

The name of the event.

+
sender?: string

Name of the originating window. Omitted for application events. +Will be overridden if set manually.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/_internal_.Window.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/_internal_.Window.html new file mode 100644 index 000000000..58decc6cd --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/classes/_internal_.Window.html @@ -0,0 +1,134 @@ +Window | @wailsio/runtime

Methods

  • Gets the specified window.

    +

    Parameters

    • name: string

      The name of the window to get.

      +

    Returns Window

    The corresponding window object.

    +
  • Returns true if the window is focused.

    +

    Returns Promise<boolean>

    Whether the window is currently focused.

    +
  • Returns true if the window is fullscreen.

    +

    Returns Promise<boolean>

    Whether the window is currently fullscreen.

    +
  • Returns true if the window is maximised.

    +

    Returns Promise<boolean>

    Whether the window is currently maximised.

    +
  • Returns true if the window is minimised.

    +

    Returns Promise<boolean>

    Whether the window is currently minimised.

    +
  • Returns true if the window is resizable.

    +

    Returns Promise<boolean>

    Whether the window is currently resizable.

    +
  • Restores the window to its previous state if it was previously minimised, maximised or fullscreen.

    +

    Returns Promise<void>

  • Sets the window to be always on top.

    +

    Parameters

    • alwaysOnTop: boolean

      Whether the window should stay on top.

      +

    Returns Promise<void>

  • Sets the background colour of the window.

    +

    Parameters

    • r: number

      The desired red component of the window background.

      +
    • g: number

      The desired green component of the window background.

      +
    • b: number

      The desired blue component of the window background.

      +
    • a: number

      The desired alpha component of the window background.

      +

    Returns Promise<void>

  • Removes the window frame and title bar.

    +

    Parameters

    • frameless: boolean

      Whether the window should be frameless.

      +

    Returns Promise<void>

  • Disables the system fullscreen button.

    +

    Parameters

    • enabled: boolean

      Whether the fullscreen button should be enabled.

      +

    Returns Promise<void>

  • Sets the maximum size of the window.

    +

    Parameters

    • width: number

      The desired maximum width of the window.

      +
    • height: number

      The desired maximum height of the window.

      +

    Returns Promise<void>

  • Sets the minimum size of the window.

    +

    Parameters

    • width: number

      The desired minimum width of the window.

      +
    • height: number

      The desired minimum height of the window.

      +

    Returns Promise<void>

  • Sets the absolute position of the window.

    +

    Parameters

    • x: number

      The desired horizontal absolute position of the window.

      +
    • y: number

      The desired vertical absolute position of the window.

      +

    Returns Promise<void>

  • Sets the relative position of the window to the screen.

    +

    Parameters

    • x: number

      The desired horizontal relative position of the window.

      +
    • y: number

      The desired vertical relative position of the window.

      +

    Returns Promise<void>

  • Sets whether the window is resizable.

    +

    Parameters

    • resizable: boolean

      Whether the window should be resizable.

      +

    Returns Promise<void>

  • Sets the size of the window.

    +

    Parameters

    • width: number

      The desired width of the window.

      +
    • height: number

      The desired height of the window.

      +

    Returns Promise<void>

  • Sets the title of the window.

    +

    Parameters

    • title: string

      The desired title of the window.

      +

    Returns Promise<void>

  • Sets the zoom level of the window.

    +

    Parameters

    • zoom: number

      The desired zoom level.

      +

    Returns Promise<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Hide.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Hide.html index a08585c2a..4828abe86 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Hide.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Hide.html @@ -1,2 +1,2 @@ -Hide | @wailsio/runtime
  • Hides a certain method by calling the HideMethod function.

    -

    Returns Promise<void>

Generated using TypeDoc

\ No newline at end of file +Hide | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Quit.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Quit.html index 01bd8f80e..bb3ec1cb1 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Quit.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Quit.html @@ -1,2 +1,2 @@ -Quit | @wailsio/runtime
  • Calls the QuitMethod to terminate the program.

    -

    Returns Promise<void>

Generated using TypeDoc

\ No newline at end of file +Quit | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Show.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Show.html index 17581c525..83e6d02be 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Show.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Application.Show.html @@ -1,2 +1,2 @@ -Show | @wailsio/runtime
  • Calls the ShowMethod and returns the result.

    -

    Returns Promise<void>

Generated using TypeDoc

\ No newline at end of file +Show | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Browser.OpenURL.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Browser.OpenURL.html index 37a530915..c489dc6af 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Browser.OpenURL.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Browser.OpenURL.html @@ -1,3 +1,3 @@ -OpenURL | @wailsio/runtime
  • Open a browser window to the given URL

    -

    Parameters

    • url: string

      The URL to open

      -

    Returns Promise<string>

Generated using TypeDoc

\ No newline at end of file +OpenURL | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByID.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByID.html index fc2e75e38..f155a72c4 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByID.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByID.html @@ -1,8 +1,6 @@ -ByID | @wailsio/runtime
  • Calls a method by its numeric ID with the specified arguments. +ByID | @wailsio/runtime

    • Calls a method by its numeric ID with the specified arguments. See Call for details.

      Parameters

      • methodID: number

        The ID of the method to call.

        -
      • Rest ...args: any[]

        The arguments to pass to the method.

        -

      Returns Promise<any>

        -
      • The result of the method call.
      • -
      -

    Generated using TypeDoc

    \ No newline at end of file +
  • ...args: any[]

    The arguments to pass to the method.

    +

Returns CancellablePromise<any>

The result of the method call.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByName.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByName.html index 33444099e..231587484 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByName.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.ByName.html @@ -1,6 +1,6 @@ -ByName | @wailsio/runtime
  • Calls a bound method by name with the specified arguments. +ByName | @wailsio/runtime

    • Calls a bound method by name with the specified arguments. See Call for details.

      -

      Parameters

      • methodName: string

        The name of the method in the format 'package.struct.method'.

        -
      • Rest ...args: any[]

        The arguments to pass to the method.

        -

      Returns Promise<any>

      The result of the method call.

      -

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    • methodName: string

      The name of the method in the format 'package.struct.method'.

      +
    • ...args: any[]

      The arguments to pass to the method.

      +

    Returns CancellablePromise<any>

    The result of the method call.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.Call.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.Call.html index 29f44519b..48ed3e3a0 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.Call.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Call.Call.html @@ -1,11 +1,9 @@ -Call | @wailsio/runtime
  • Call a bound method according to the given call options.

    +Call | @wailsio/runtime
    • Call a bound method according to the given call options.

      In case of failure, the returned promise will reject with an exception among ReferenceError (unknown method), TypeError (wrong argument count or type), RuntimeError (method returned an error), or other (network or internal errors). The exception might have a "cause" field with the value returned by the application- or service-level error marshaling functions.

      -

      Parameters

      Returns Promise<any>

        -
      • The result of the call.
      • -
      -

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    Returns CancellablePromise<any>

    The result of the call.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.SetText.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.SetText.html index f7dcf256a..681208368 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.SetText.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.SetText.html @@ -1,6 +1,4 @@ -SetText | @wailsio/runtime
  • Sets the text to the Clipboard.

    +SetText | @wailsio/runtime
    • Sets the text to the Clipboard.

      Parameters

      • text: string

        The text to be set to the Clipboard.

        -

      Returns Promise<any>

        -
      • A Promise that resolves when the operation is successful.
      • -
      -

    Generated using TypeDoc

    \ No newline at end of file +

Returns Promise<void>

A Promise that resolves when the operation is successful.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.Text.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.Text.html index dde4beeba..4e0514fe5 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.Text.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Clipboard.Text.html @@ -1,3 +1,3 @@ -Text | @wailsio/runtime
  • Get the Clipboard text

    -

    Returns Promise<string>

    A promise that resolves with the text from the Clipboard.

    -

Generated using TypeDoc

\ No newline at end of file +Text | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Any.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Any.html deleted file mode 100644 index 251ad8f36..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Any.html +++ /dev/null @@ -1,2 +0,0 @@ -Any | @wailsio/runtime
  • Any is a dummy creation function for simple or unknown types.

    -

    Type Parameters

    • T

    Parameters

    • source: any

    Returns T

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Array.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Array.html deleted file mode 100644 index 63151d29f..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Array.html +++ /dev/null @@ -1,4 +0,0 @@ -Array | @wailsio/runtime
  • Array takes a creation function for an arbitrary type -and returns an in-place creation function for an array -whose elements are of that type.

    -

    Type Parameters

    • T

    Parameters

    • element: ((source) => T)
        • (source): T
        • Parameters

          • source: any

          Returns T

    Returns ((source) => T[])

      • (source): T[]
      • Parameters

        • source: any

        Returns T[]

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.ByteSlice.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.ByteSlice.html deleted file mode 100644 index 72a9ad146..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.ByteSlice.html +++ /dev/null @@ -1,3 +0,0 @@ -ByteSlice | @wailsio/runtime
  • ByteSlice is a creation function that replaces -null strings with empty strings.

    -

    Parameters

    • source: any

    Returns string

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Map.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Map.html deleted file mode 100644 index a81270070..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Map.html +++ /dev/null @@ -1,4 +0,0 @@ -Map | @wailsio/runtime
  • Map takes creation functions for two arbitrary types -and returns an in-place creation function for an object -whose keys and values are of those types.

    -

    Type Parameters

    • K
    • V

    Parameters

    • key: ((source) => K)
        • (source): K
        • Parameters

          • source: any

          Returns K

    • value: ((source) => V)
        • (source): V
        • Parameters

          • source: any

          Returns V

    Returns ((source) => {
        [_: K]: V;
    })

      • (source): {
            [_: K]: V;
        }
      • Parameters

        • source: any

        Returns {
            [_: K]: V;
        }

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Nullable.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Nullable.html deleted file mode 100644 index 2174bef8f..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Nullable.html +++ /dev/null @@ -1,3 +0,0 @@ -Nullable | @wailsio/runtime
  • Nullable takes a creation function for an arbitrary type -and returns a creation function for a nullable value of that type.

    -

    Type Parameters

    • T

    Parameters

    • element: ((source) => T)
        • (source): T
        • Parameters

          • source: any

          Returns T

    Returns ((source) => null | T)

      • (source): null | T
      • Parameters

        • source: any

        Returns null | T

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Struct.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Struct.html deleted file mode 100644 index 9735e1941..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Create.Struct.html +++ /dev/null @@ -1,3 +0,0 @@ -Struct | @wailsio/runtime
  • Struct takes an object mapping field names to creation functions -and returns an in-place creation function for a struct.

    -

    Type Parameters

    • T extends {
          [_: string]: ((source) => any);
      }
    • U extends {
          [Key in string | number | symbol]?: ReturnType<T[Key]>
      }

    Parameters

    • createField: T

    Returns ((source) => U)

      • (source): U
      • Parameters

        • source: any

        Returns U

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Error.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Error.html index 6db728dcb..1fbdcf82e 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Error.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Error.html @@ -1,5 +1,4 @@ -Error | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Error | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Info.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Info.html index 14130d470..e8606ad19 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Info.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Info.html @@ -1,5 +1,4 @@ -Info | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Info | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.OpenFile.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.OpenFile.html index 821b85f04..13ba2d544 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.OpenFile.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.OpenFile.html @@ -1,3 +1,10 @@ -OpenFile | @wailsio/runtime
  • Parameters

    Returns Promise<string | string[]>

    Returns selected file or list of files. Returns blank string if no file is selected.

    -

Generated using TypeDoc

\ No newline at end of file +OpenFile | @wailsio/runtime
  • Presents a file selection dialog to pick one or more files to open.

    +

    Parameters

    Returns Promise<string[]>

    Selected file or list of files, or a blank string/empty list if no file has been selected.

    +
  • Presents a file selection dialog to pick one or more files to open.

    +

    Parameters

    Returns Promise<string>

    Selected file or list of files, or a blank string/empty list if no file has been selected.

    +
  • Presents a file selection dialog to pick one or more files to open.

    +

    Parameters

    Returns Promise<string | string[]>

    Selected file or list of files, or a blank string/empty list if no file has been selected.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Question.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Question.html index 17bc86219..cb7ad090a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Question.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Question.html @@ -1,5 +1,4 @@ -Question | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Question | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.SaveFile.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.SaveFile.html index 26bd93652..7e2ec1103 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.SaveFile.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.SaveFile.html @@ -1,3 +1,4 @@ -SaveFile | @wailsio/runtime
  • Parameters

    Returns Promise<string>

    Returns the selected file. Returns blank string if no file is selected.

    -

Generated using TypeDoc

\ No newline at end of file +SaveFile | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Warning.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Warning.html index 053cf106b..be1da407a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Warning.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Dialogs.Warning.html @@ -1,5 +1,4 @@ -Warning | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Warning | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Emit.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Emit.html index 542ab7a1e..9bb54d786 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Emit.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Emit.html @@ -1,6 +1,4 @@ -Emit | @wailsio/runtime
  • Emits an event using the given event name.

    +Emit | @wailsio/runtime

    Generated using TypeDoc

    \ No newline at end of file +

Returns Promise<void>

A promise that will be fulfilled once the event has been emitted.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Off.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Off.html index f1fcded3f..4be336e2a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Off.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Off.html @@ -1,4 +1,3 @@ -Off | @wailsio/runtime
  • Removes event listeners for the specified event names.

    -

    Parameters

    • eventName: string

      The name of the event to remove listeners for.

      -
    • Rest ...additionalEventNames: string[]

      Additional event names to remove listeners for.

      -

    Returns undefined

Generated using TypeDoc

\ No newline at end of file +Off | @wailsio/runtime
  • Removes event listeners for the specified event names.

    +

    Parameters

    • ...eventNames: [string, ...string[]]

      The name of the events to remove listeners for.

      +

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OffAll.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OffAll.html index cebf1d976..e1015a79b 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OffAll.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OffAll.html @@ -1,3 +1,2 @@ -OffAll | @wailsio/runtime
  • Removes all event listeners.

    -

    Returns void

    Function

    OffAll

    -

Generated using TypeDoc

\ No newline at end of file +OffAll | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.On.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.On.html index d75c76ad6..5d679cbd7 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.On.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.On.html @@ -1,7 +1,5 @@ -On | @wailsio/runtime
  • Registers a callback function to be executed when the specified event occurs.

    -

    Parameters

    • eventName: string

      The name of the event.

      -
    • callback: Function

      The callback function to be executed. It takes no parameters.

      -

    Returns Function

      -
    • A function that, when called, will unregister the callback from the event.
    • -
    -

Generated using TypeDoc

\ No newline at end of file +On | @wailsio/runtime
  • Registers a callback function to be executed when the specified event occurs.

    +

    Parameters

    • eventName: string

      The name of the event to register the callback for.

      +
    • callback: Callback

      The callback function to be called when the event is triggered.

      +

    Returns () => void

    A function that, when called, will unregister the callback from the event.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OnMultiple.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OnMultiple.html index 076aa9068..af4f37190 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OnMultiple.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.OnMultiple.html @@ -1,8 +1,6 @@ -OnMultiple | @wailsio/runtime
  • Register a callback function to be called multiple times for a specific event.

    +OnMultiple | @wailsio/runtime
    • Register a callback function to be called multiple times for a specific event.

      Parameters

      • eventName: string

        The name of the event to register the callback for.

        -
      • callback: Function

        The callback function to be called when the event is triggered.

        +
      • callback: Callback

        The callback function to be called when the event is triggered.

      • maxCallbacks: number

        The maximum number of times the callback can be called for the event. Once the maximum number is reached, the callback will no longer be called.

        -

      Returns Function

        -
      • A function that, when called, will unregister the callback from the event.
      • -
      -

    Generated using TypeDoc

    \ No newline at end of file +

Returns () => void

A function that, when called, will unregister the callback from the event.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Once.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Once.html index adb14bda4..33bf9a888 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Once.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.Once.html @@ -1,7 +1,5 @@ -Once | @wailsio/runtime
  • Registers a callback function to be executed only once for the specified event.

    -

    Parameters

    • eventName: string

      The name of the event.

      -
    • callback: Function

      The function to be executed when the event occurs.

      -

    Returns Function

      -
    • A function that, when called, will unregister the callback from the event.
    • -
    -

Generated using TypeDoc

\ No newline at end of file +Once | @wailsio/runtime
  • Registers a callback function to be executed only once for the specified event.

    +

    Parameters

    • eventName: string

      The name of the event to register the callback for.

      +
    • callback: Callback

      The callback function to be called when the event is triggered.

      +

    Returns () => void

    A function that, when called, will unregister the callback from the event.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.setup.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.setup.html deleted file mode 100644 index deae4ec72..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Events.setup.html +++ /dev/null @@ -1 +0,0 @@ -setup | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Flags.GetFlag.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Flags.GetFlag.html index bc2335a44..2c56d0f1b 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Flags.GetFlag.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Flags.GetFlag.html @@ -1,6 +1,4 @@ -GetFlag | @wailsio/runtime
  • Retrieves the value associated with the specified key from the flag map.

    -

    Parameters

    • keyString: string

      The key to retrieve the value for.

      -

    Returns any

      -
    • The value associated with the specified key.
    • -
    -

Generated using TypeDoc

\ No newline at end of file +GetFlag | @wailsio/runtime
  • Retrieves the value associated with the specified key from the flag map.

    +

    Parameters

    • key: string

      The key to retrieve the value for.

      +

    Returns any

    The value associated with the specified key.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetAll.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetAll.html index 5848da1ed..45d99bb96 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetAll.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetAll.html @@ -1,3 +1,3 @@ -GetAll | @wailsio/runtime
  • Gets all screens.

    -

    Returns Promise<Screen[]>

    A promise that resolves to an array of Screen objects.

    -

Generated using TypeDoc

\ No newline at end of file +GetAll | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetCurrent.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetCurrent.html index fc43c9176..b042871d5 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetCurrent.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetCurrent.html @@ -1,3 +1,3 @@ -GetCurrent | @wailsio/runtime
  • Gets the current active screen.

    -

    Returns Promise<Screen>

    A promise that resolves with the current active screen.

    -

Generated using TypeDoc

\ No newline at end of file +GetCurrent | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetPrimary.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetPrimary.html index 1bfa6606b..a7bb9f8c7 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetPrimary.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/Screens.GetPrimary.html @@ -1,3 +1,3 @@ -GetPrimary | @wailsio/runtime
  • Gets the primary screen.

    -

    Returns Promise<Screen>

    A promise that resolves to the primary screen.

    -

Generated using TypeDoc

\ No newline at end of file +GetPrimary | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Capabilities.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Capabilities.html index 9c93a483c..9127e3a45 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Capabilities.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Capabilities.html @@ -1,4 +1,3 @@ -Capabilities | @wailsio/runtime
  • Fetches the capabilities of the application from the server.

    -

    Returns Promise<Object>

    A promise that resolves to an object containing the capabilities.

    -

    Async

    Function

    Capabilities

    -

Generated using TypeDoc

\ No newline at end of file +Capabilities | @wailsio/runtime
  • Fetches the capabilities of the application from the server.

    +

    Returns Promise<Record<string, any>>

    A promise that resolves to an object containing the capabilities.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Environment.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Environment.html index c4359efa9..b98671991 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Environment.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.Environment.html @@ -1,5 +1,3 @@ -Environment | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Environment | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsAMD64.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsAMD64.html index 21801ee6c..2d6df4336 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsAMD64.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsAMD64.html @@ -1,3 +1,3 @@ -IsAMD64 | @wailsio/runtime
  • Checks if the current environment architecture is AMD64.

    +IsAMD64 | @wailsio/runtime
    • Checks if the current environment architecture is AMD64.

      Returns boolean

      True if the current environment architecture is AMD64, false otherwise.

      -

    Generated using TypeDoc

    \ No newline at end of file +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM.html index a94a24dc8..5083d6364 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM.html @@ -1,3 +1,3 @@ -IsARM | @wailsio/runtime
  • Checks if the current architecture is ARM.

    +IsARM | @wailsio/runtime
    • Checks if the current architecture is ARM.

      Returns boolean

      True if the current architecture is ARM, false otherwise.

      -

    Generated using TypeDoc

    \ No newline at end of file +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM64.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM64.html index c9386a5fa..eba6cd3e9 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM64.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsARM64.html @@ -1,5 +1,3 @@ -IsARM64 | @wailsio/runtime
  • Checks if the current environment is ARM64 architecture.

    -

    Returns boolean

      -
    • Returns true if the environment is ARM64 architecture, otherwise returns false.
    • -
    -

Generated using TypeDoc

\ No newline at end of file +IsARM64 | @wailsio/runtime
  • Checks if the current environment is ARM64 architecture.

    +

    Returns boolean

    Returns true if the environment is ARM64 architecture, otherwise returns false.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDarkMode.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDarkMode.html index 04672fe31..493882fb0 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDarkMode.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDarkMode.html @@ -1,5 +1,3 @@ -IsDarkMode | @wailsio/runtime
  • Returns Promise<boolean>

      -
    • A promise that resolves to a boolean value indicating if the system is in dark mode.
    • -
    -

    Function

    Retrieves the system dark mode status.

    -

Generated using TypeDoc

\ No newline at end of file +IsDarkMode | @wailsio/runtime
  • Retrieves the system dark mode status.

    +

    Returns Promise<boolean>

    A promise that resolves to a boolean value indicating if the system is in dark mode.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDebug.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDebug.html index ce780df72..0c0370239 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDebug.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsDebug.html @@ -1 +1,3 @@ -IsDebug | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +IsDebug | @wailsio/runtime
  • Reports whether the app is being run in debug mode.

    +

    Returns boolean

    True if the app is being run in debug mode.

    +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsLinux.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsLinux.html index c5ada1aa5..43e1498c5 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsLinux.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsLinux.html @@ -1,3 +1,3 @@ -IsLinux | @wailsio/runtime
  • Checks if the current operating system is Linux.

    +IsLinux | @wailsio/runtime
    • Checks if the current operating system is Linux.

      Returns boolean

      Returns true if the current operating system is Linux, false otherwise.

      -

    Generated using TypeDoc

    \ No newline at end of file +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsMac.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsMac.html index d7abc7b4a..d366be072 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsMac.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsMac.html @@ -1,3 +1,3 @@ -IsMac | @wailsio/runtime
  • Checks if the current environment is a macOS operating system.

    +IsMac | @wailsio/runtime
    • Checks if the current environment is a macOS operating system.

      Returns boolean

      True if the environment is macOS, false otherwise.

      -

    Generated using TypeDoc

    \ No newline at end of file +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsWindows.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsWindows.html index 73a038712..8948d39dc 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsWindows.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.IsWindows.html @@ -1,3 +1,3 @@ -IsWindows | @wailsio/runtime
  • Checks if the current operating system is Windows.

    +IsWindows | @wailsio/runtime
    • Checks if the current operating system is Windows.

      Returns boolean

      True if the operating system is Windows, otherwise false.

      -

    Generated using TypeDoc

    \ No newline at end of file +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.invoke.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.invoke.html index e922a2368..d7455476c 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.invoke.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/System.invoke.html @@ -1 +1 @@ -invoke | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +invoke | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Enable.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Enable.html index 0d1961d1a..46bffbe7d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Enable.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Enable.html @@ -1,2 +1,2 @@ -Enable | @wailsio/runtime
  • Schedules an automatic reload of WML to be performed as soon as the document is fully loaded.

    -

    Returns void

Generated using TypeDoc

\ No newline at end of file +Enable | @wailsio/runtime
  • Schedules an automatic reload of WML to be performed as soon as the document is fully loaded.

    +

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Reload.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Reload.html index 60a617d38..41478c379 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Reload.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/WML.Reload.html @@ -1,2 +1,2 @@ -Reload | @wailsio/runtime
  • Reloads the WML page by adding necessary event listeners and browser listeners.

    -

    Returns void

Generated using TypeDoc

\ No newline at end of file +Reload | @wailsio/runtime
  • Reloads the WML page by adding necessary event listeners and browser listeners.

    +

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/init.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/init.html deleted file mode 100644 index fe15a9f06..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/functions/init.html +++ /dev/null @@ -1 +0,0 @@ -init | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/hierarchy.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/hierarchy.html new file mode 100644 index 000000000..860256700 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/hierarchy.html @@ -0,0 +1 @@ +@wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/index.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/index.html index eba5c3b45..90f345405 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/index.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/index.html @@ -1,5 +1,7 @@ -@wailsio/runtime

@wailsio/runtime

README

The main.js file in this directory is the entrypoint for the runtime.js file that may be +@wailsio/runtime

@wailsio/runtime

README

The index.js file in the compiled directory is the entrypoint for the runtime.js file that may be loaded at runtime. This will add window.wails and window._wails to the global scope.

NOTE: It is preferable to use the @wailsio/runtime package to use the runtime.

-

After updating any files in this directory, you must run wails3 task build:runtime to regenerate the compiled JS.

-

Generated using TypeDoc

\ No newline at end of file +

⚠️ Do not rebuild the runtime manually after updating TS code: +the CI pipeline will take care of this. +PRs that touch build artifacts will be blocked from merging.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Call.CallOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Call.CallOptions.html deleted file mode 100644 index dad01b74b..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Call.CallOptions.html +++ /dev/null @@ -1,7 +0,0 @@ -CallOptions | @wailsio/runtime

Interface CallOptions

interface CallOptions {
    args: any[];
    methodID: undefined | number;
    methodName: undefined | string;
}

Properties

Properties

args: any[]

Arguments to be passed into the bound method.

-
methodID: undefined | number

The numeric ID of the bound method to call.

-
methodName: undefined | string

The fully qualified name of the bound method to call.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseLike.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseLike.html new file mode 100644 index 000000000..e7a8ca6f3 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseLike.html @@ -0,0 +1,3 @@ +CancellablePromiseLike | @wailsio/runtime

Interface CancellablePromiseLike<T>

interface CancellablePromiseLike<T> {
    cancel(cause?: any): void | PromiseLike<void>;
    then<TResult1 = T, TResult2 = never>(
        onfulfilled?:
            | null
            | (
                value: T,
            ) => TResult1 | PromiseLike<TResult1> | CancellablePromiseLike<TResult1>,
        onrejected?:
            | null
            | (
                reason: any,
            ) => TResult2 | PromiseLike<TResult2> | CancellablePromiseLike<TResult2>,
    ): CancellablePromiseLike<TResult1 | TResult2>;
}

Type Parameters

  • T

Implemented by

Methods

Methods

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseWithResolvers.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseWithResolvers.html new file mode 100644 index 000000000..3bd162eae --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/CancellablePromiseWithResolvers.html @@ -0,0 +1,7 @@ +CancellablePromiseWithResolvers | @wailsio/runtime

Interface CancellablePromiseWithResolvers<T>

Wraps a cancellable promise along with its resolution methods. +The oncancelled field will be null initially but may be set to provide a custom cancellation function.

+
interface CancellablePromiseWithResolvers<T> {
    oncancelled: null | CancellablePromiseCanceller;
    promise: CancellablePromise<T>;
    reject: CancellablePromiseRejector;
    resolve: CancellablePromiseResolver<T>;
}

Type Parameters

  • T

Properties

oncancelled: null | CancellablePromiseCanceller
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.Button.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.Button.html index 9b82a7b58..925410339 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.Button.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.Button.html @@ -1,7 +1,7 @@ -Button | @wailsio/runtime
interface Button {
    IsCancel: undefined | boolean;
    IsDefault: undefined | boolean;
    Label: undefined | string;
}

Properties

Properties

IsCancel: undefined | boolean

True if the button should cancel an operation when clicked.

-
IsDefault: undefined | boolean

True if the button should be the default action when the user presses enter.

-
Label: undefined | string

Text that appears within the button.

-

Generated using TypeDoc

\ No newline at end of file +Button | @wailsio/runtime
interface Button {
    IsCancel?: boolean;
    IsDefault?: boolean;
    Label?: string;
}

Properties

IsCancel?: boolean

True if the button should cancel an operation when clicked.

+
IsDefault?: boolean

True if the button should be the default action when the user presses enter.

+
Label?: string

Text that appears within the button.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.FileFilter.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.FileFilter.html index 19eea827a..09958a9cd 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.FileFilter.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.FileFilter.html @@ -1,5 +1,5 @@ -FileFilter | @wailsio/runtime
interface FileFilter {
    DisplayName: undefined | string;
    Pattern: undefined | string;
}

Properties

Properties

DisplayName: undefined | string

Display name for the filter, it could be "Text Files", "Images" etc.

-
Pattern: undefined | string

Pattern to match for the filter, e.g. ".txt;.md" for text markdown files.

-

Generated using TypeDoc

\ No newline at end of file +FileFilter | @wailsio/runtime
interface FileFilter {
    DisplayName?: string;
    Pattern?: string;
}

Properties

Properties

DisplayName?: string

Display name for the filter, it could be "Text Files", "Images" etc.

+
Pattern?: string

Pattern to match for the filter, e.g. ".txt;.md" for text markdown files.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.MessageDialogOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.MessageDialogOptions.html index 609c7b979..27ccf9d7a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.MessageDialogOptions.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.MessageDialogOptions.html @@ -1,9 +1,9 @@ -MessageDialogOptions | @wailsio/runtime

Interface MessageDialogOptions

interface MessageDialogOptions {
    Buttons: undefined | Button[];
    Detached: undefined | boolean;
    Message: undefined | string;
    Title: undefined | string;
}

Properties

Properties

Buttons: undefined | Button[]

Array of button options to show in the dialog.

-
Detached: undefined | boolean

True if the dialog should appear detached from the main window (if applicable).

-
Message: undefined | string

The main message to show in the dialog.

-
Title: undefined | string

The title of the dialog window.

-

Generated using TypeDoc

\ No newline at end of file +MessageDialogOptions | @wailsio/runtime

Interface MessageDialogOptions

interface MessageDialogOptions {
    Buttons?: Button[];
    Detached?: boolean;
    Message?: string;
    Title?: string;
}

Properties

Buttons?: Button[]

Array of button options to show in the dialog.

+
Detached?: boolean

True if the dialog should appear detached from the main window (if applicable).

+
Message?: string

The main message to show in the dialog.

+
Title?: string

The title of the dialog window.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.OpenFileDialogOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.OpenFileDialogOptions.html index 19bf1ba42..3dd409a4f 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.OpenFileDialogOptions.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.OpenFileDialogOptions.html @@ -1,33 +1,33 @@ -OpenFileDialogOptions | @wailsio/runtime

Interface OpenFileDialogOptions

interface OpenFileDialogOptions {
    AllowsMultipleSelection: undefined | boolean;
    AllowsOtherFiletypes: undefined | boolean;
    ButtonText: undefined | string;
    CanChooseDirectories: undefined | boolean;
    CanChooseFiles: undefined | boolean;
    CanCreateDirectories: undefined | boolean;
    CanSelectHiddenExtension: undefined | boolean;
    Detached: undefined | boolean;
    Directory: undefined | string;
    Filters: undefined | FileFilter[];
    HideExtension: undefined | boolean;
    Message: undefined | string;
    ResolvesAliases: undefined | boolean;
    ShowHiddenFiles: undefined | boolean;
    Title: undefined | string;
    TreatsFilePackagesAsDirectories: undefined | boolean;
}

Properties

AllowsMultipleSelection: undefined | boolean

Indicates if multiple selection is allowed.

-
AllowsOtherFiletypes: undefined | boolean

Indicates if other file types are allowed.

-
ButtonText: undefined | string

Text to display on the button.

-
CanChooseDirectories: undefined | boolean

Indicates if directories can be chosen.

-
CanChooseFiles: undefined | boolean

Indicates if files can be chosen.

-
CanCreateDirectories: undefined | boolean

Indicates if directories can be created.

-
CanSelectHiddenExtension: undefined | boolean

Indicates if hidden extensions can be selected.

-
Detached: undefined | boolean

Indicates if the dialog should appear detached from the main window.

-
Directory: undefined | string

Directory to open in the dialog.

-
Filters: undefined | FileFilter[]

Array of file filters.

-
HideExtension: undefined | boolean

Indicates if the extension should be hidden.

-
Message: undefined | string

Message to show in the dialog.

-
ResolvesAliases: undefined | boolean

Indicates if aliases should be resolved.

-
ShowHiddenFiles: undefined | boolean

Indicates if hidden files should be shown.

-
Title: undefined | string

Title of the dialog.

-
TreatsFilePackagesAsDirectories: undefined | boolean

Indicates if file packages should be treated as directories.

-

Generated using TypeDoc

\ No newline at end of file +OpenFileDialogOptions | @wailsio/runtime

Interface OpenFileDialogOptions

interface OpenFileDialogOptions {
    AllowsMultipleSelection?: boolean;
    AllowsOtherFiletypes?: boolean;
    ButtonText?: string;
    CanChooseDirectories?: boolean;
    CanChooseFiles?: boolean;
    CanCreateDirectories?: boolean;
    CanSelectHiddenExtension?: boolean;
    Detached?: boolean;
    Directory?: string;
    Filters?: FileFilter[];
    HideExtension?: boolean;
    Message?: string;
    ResolvesAliases?: boolean;
    ShowHiddenFiles?: boolean;
    Title?: string;
    TreatsFilePackagesAsDirectories?: boolean;
}

Properties

AllowsMultipleSelection?: boolean

Indicates if multiple selection is allowed.

+
AllowsOtherFiletypes?: boolean

Indicates if other file types are allowed.

+
ButtonText?: string

Text to display on the button.

+
CanChooseDirectories?: boolean

Indicates if directories can be chosen.

+
CanChooseFiles?: boolean

Indicates if files can be chosen.

+
CanCreateDirectories?: boolean

Indicates if directories can be created.

+
CanSelectHiddenExtension?: boolean

Indicates if hidden extensions can be selected.

+
Detached?: boolean

Indicates if the dialog should appear detached from the main window.

+
Directory?: string

Directory to open in the dialog.

+
Filters?: FileFilter[]

Array of file filters.

+
HideExtension?: boolean

Indicates if the extension should be hidden.

+
Message?: string

Message to show in the dialog.

+
ResolvesAliases?: boolean

Indicates if aliases should be resolved.

+
ShowHiddenFiles?: boolean

Indicates if hidden files should be shown.

+
Title?: string

Title of the dialog.

+
TreatsFilePackagesAsDirectories?: boolean

Indicates if file packages should be treated as directories.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.SaveFileDialogOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.SaveFileDialogOptions.html index 99d04ff77..6752aefc3 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.SaveFileDialogOptions.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Dialogs.SaveFileDialogOptions.html @@ -1,35 +1,33 @@ -SaveFileDialogOptions | @wailsio/runtime

Interface SaveFileDialogOptions

interface SaveFileDialogOptions {
    AllowsMultipleSelection: undefined | boolean;
    AllowsOtherFiletypes: undefined | boolean;
    ButtonText: undefined | string;
    CanChooseDirectories: undefined | boolean;
    CanChooseFiles: undefined | boolean;
    CanCreateDirectories: undefined | boolean;
    CanSelectHiddenExtension: undefined | boolean;
    Detached: undefined | boolean;
    Directory: undefined | string;
    Filename: undefined | string;
    Filters: undefined | FileFilter[];
    HideExtension: undefined | boolean;
    Message: undefined | string;
    ResolvesAliases: undefined | boolean;
    ShowHiddenFiles: undefined | boolean;
    Title: undefined | string;
    TreatsFilePackagesAsDirectories: undefined | boolean;
}

Properties

AllowsMultipleSelection: undefined | boolean

Indicates if multiple selection is allowed.

-
AllowsOtherFiletypes: undefined | boolean

Indicates if other file types are allowed.

-
ButtonText: undefined | string

Text to display on the button.

-
CanChooseDirectories: undefined | boolean

Indicates if directories can be chosen.

-
CanChooseFiles: undefined | boolean

Indicates if files can be chosen.

-
CanCreateDirectories: undefined | boolean

Indicates if directories can be created.

-
CanSelectHiddenExtension: undefined | boolean

Indicates if hidden extensions can be selected.

-
Detached: undefined | boolean

Indicates if the dialog should appear detached from the main window.

-
Directory: undefined | string

Directory to open in the dialog.

-
Filename: undefined | string

Default filename to use in the dialog.

-
Filters: undefined | FileFilter[]

Array of file filters.

-
HideExtension: undefined | boolean

Indicates if the extension should be hidden.

-
Message: undefined | string

Message to show in the dialog.

-
ResolvesAliases: undefined | boolean

Indicates if aliases should be resolved.

-
ShowHiddenFiles: undefined | boolean

Indicates if hidden files should be shown.

-
Title: undefined | string

Title of the dialog.

-
TreatsFilePackagesAsDirectories: undefined | boolean

Indicates if file packages should be treated as directories.

-

Generated using TypeDoc

\ No newline at end of file +SaveFileDialogOptions | @wailsio/runtime

Interface SaveFileDialogOptions

interface SaveFileDialogOptions {
    AllowsOtherFiletypes?: boolean;
    ButtonText?: string;
    CanChooseDirectories?: boolean;
    CanChooseFiles?: boolean;
    CanCreateDirectories?: boolean;
    CanSelectHiddenExtension?: boolean;
    Detached?: boolean;
    Directory?: string;
    Filename?: string;
    Filters?: FileFilter[];
    HideExtension?: boolean;
    Message?: string;
    ResolvesAliases?: boolean;
    ShowHiddenFiles?: boolean;
    Title?: string;
    TreatsFilePackagesAsDirectories?: boolean;
}

Properties

AllowsOtherFiletypes?: boolean

Indicates if other file types are allowed.

+
ButtonText?: string

Text to display on the button.

+
CanChooseDirectories?: boolean

Indicates if directories can be chosen.

+
CanChooseFiles?: boolean

Indicates if files can be chosen.

+
CanCreateDirectories?: boolean

Indicates if directories can be created.

+
CanSelectHiddenExtension?: boolean

Indicates if hidden extensions can be selected.

+
Detached?: boolean

Indicates if the dialog should appear detached from the main window.

+
Directory?: string

Directory to open in the dialog.

+
Filename?: string

Default filename to use in the dialog.

+
Filters?: FileFilter[]

Array of file filters.

+
HideExtension?: boolean

Indicates if the extension should be hidden.

+
Message?: string

Message to show in the dialog.

+
ResolvesAliases?: boolean

Indicates if aliases should be resolved.

+
ShowHiddenFiles?: boolean

Indicates if hidden files should be shown.

+
Title?: string

Title of the dialog.

+
TreatsFilePackagesAsDirectories?: boolean

Indicates if file packages should be treated as directories.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Rect.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Rect.html index 061657146..3c3b36416 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Rect.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Rect.html @@ -1,9 +1,9 @@ -Rect | @wailsio/runtime
interface Rect {
    Height: number;
    Width: number;
    X: number;
    Y: number;
}

Properties

Properties

Height: number

The height of the rectangle.

-
Width: number

The width of the rectangle.

-
X: number

The X coordinate of the origin.

-
Y: number

The Y coordinate of the origin.

-

Generated using TypeDoc

\ No newline at end of file +Rect | @wailsio/runtime
interface Rect {
    Height: number;
    Width: number;
    X: number;
    Y: number;
}

Properties

Properties

Height: number

The height of the rectangle.

+
Width: number

The width of the rectangle.

+
X: number

The X coordinate of the origin.

+
Y: number

The Y coordinate of the origin.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Screen.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Screen.html index 152f5c183..78e0df769 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Screen.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Screen.html @@ -1,25 +1,25 @@ -Screen | @wailsio/runtime
interface Screen {
    Bounds: Rect;
    ID: string;
    IsPrimary: boolean;
    Name: string;
    PhysicalBounds: Rect;
    PhysicalWorkArea: Rect;
    Rotation: number;
    ScaleFactor: number;
    Size: Size;
    WorkArea: Rect;
    X: number;
    Y: number;
}

Properties

Bounds: Rect

Contains the bounds of the screen in terms of X, Y, Width, and Height.

-
ID: string

Unique identifier for the screen.

-
IsPrimary: boolean

True if this is the primary monitor selected by the user in the operating system.

-
Name: string

Human readable name of the screen.

-
PhysicalBounds: Rect

Contains the physical bounds of the screen in terms of X, Y, Width, and Height (before scaling).

-
PhysicalWorkArea: Rect

Contains the physical WorkArea of the screen (before scaling).

-
Rotation: number

The rotation of the screen.

-
ScaleFactor: number

The scale factor of the screen (DPI/96). 1 = standard DPI, 2 = HiDPI (Retina), etc.

-
Size: Size

Contains the width and height of the screen.

-
WorkArea: Rect

Contains the area of the screen that is actually usable (excluding taskbar and other system UI).

-
X: number

The X coordinate of the screen.

-
Y: number

The Y coordinate of the screen.

-

Generated using TypeDoc

\ No newline at end of file +Screen | @wailsio/runtime
interface Screen {
    Bounds: Rect;
    ID: string;
    IsPrimary: boolean;
    Name: string;
    PhysicalBounds: Rect;
    PhysicalWorkArea: Rect;
    Rotation: number;
    ScaleFactor: number;
    Size: Screens.Size;
    WorkArea: Rect;
    X: number;
    Y: number;
}

Properties

Bounds: Rect

Contains the bounds of the screen in terms of X, Y, Width, and Height.

+
ID: string

Unique identifier for the screen.

+
IsPrimary: boolean

True if this is the primary monitor selected by the user in the operating system.

+
Name: string

Human-readable name of the screen.

+
PhysicalBounds: Rect

Contains the physical bounds of the screen in terms of X, Y, Width, and Height (before scaling).

+
PhysicalWorkArea: Rect

Contains the physical WorkArea of the screen (before scaling).

+
Rotation: number

The rotation of the screen.

+
ScaleFactor: number

The scale factor of the screen (DPI/96). 1 = standard DPI, 2 = HiDPI (Retina), etc.

+

Contains the width and height of the screen.

+
WorkArea: Rect

Contains the area of the screen that is actually usable (excluding taskbar and other system UI).

+
X: number

The X coordinate of the screen.

+
Y: number

The Y coordinate of the screen.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Size.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Size.html index df8d06084..03f72fcaf 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Size.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/Screens.Size.html @@ -1,5 +1,5 @@ -Size | @wailsio/runtime
interface Size {
    Height: number;
    Width: number;
}

Properties

Properties

Height: number

The height.

-
Width: number

The width.

-

Generated using TypeDoc

\ No newline at end of file +Size | @wailsio/runtime
interface Size {
    Height: number;
    Width: number;
}

Properties

Properties

Height: number

The height of a rectangular area.

+
Width: number

The width of a rectangular area.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.EnvironmentInfo.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.EnvironmentInfo.html index f34fccb77..891e7dcaa 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.EnvironmentInfo.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.EnvironmentInfo.html @@ -1,11 +1,11 @@ -EnvironmentInfo | @wailsio/runtime

Interface EnvironmentInfo

interface EnvironmentInfo {
    Arch: string;
    Debug: boolean;
    OS: string;
    OSInfo: OSInfo;
    PlatformInfo: Object;
}

Properties

Properties

Arch: string

The architecture of the system.

-
Debug: boolean

True if the application is running in debug mode, otherwise false.

-
OS: string

The operating system in use.

-
OSInfo: OSInfo

Details of the operating system.

-
PlatformInfo: Object

Additional platform information.

-

Generated using TypeDoc

\ No newline at end of file +EnvironmentInfo | @wailsio/runtime

Interface EnvironmentInfo

interface EnvironmentInfo {
    Arch: string;
    Debug: boolean;
    OS: string;
    OSInfo: OSInfo;
    PlatformInfo: Record<string, any>;
}

Properties

Properties

Arch: string

The architecture of the system.

+
Debug: boolean

True if the application is running in debug mode, otherwise false.

+
OS: string

The operating system in use.

+
OSInfo: OSInfo

Details of the operating system.

+
PlatformInfo: Record<string, any>

Additional platform information.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.OSInfo.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.OSInfo.html index b08a3cd05..3f2b84f9e 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.OSInfo.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/System.OSInfo.html @@ -1,9 +1,9 @@ -OSInfo | @wailsio/runtime
interface OSInfo {
    Branding: string;
    ID: string;
    Name: string;
    Version: string;
}

Properties

Properties

Branding: string

The branding of the OS.

-
ID: string

The ID of the OS.

-
Name: string

The name of the OS.

-
Version: string

The version of the OS.

-

Generated using TypeDoc

\ No newline at end of file +OSInfo | @wailsio/runtime
interface OSInfo {
    Branding: string;
    ID: string;
    Name: string;
    Version: string;
}

Properties

Properties

Branding: string

The branding of the OS.

+
ID: string

The ID of the OS.

+
Name: string

The name of the OS.

+
Version: string

The version of the OS.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.AddEventListenerOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.AddEventListenerOptions.html new file mode 100644 index 000000000..7ea29bc1b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.AddEventListenerOptions.html @@ -0,0 +1,5 @@ +AddEventListenerOptions | @wailsio/runtime

Interface AddEventListenerOptions

interface AddEventListenerOptions {
    capture?: boolean;
    once?: boolean;
    passive?: boolean;
    signal?: AbortSignal;
}

Hierarchy (View Summary)

Properties

capture?: boolean
once?: boolean
passive?: boolean
signal?: AbortSignal
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ArrayBufferView.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ArrayBufferView.html new file mode 100644 index 000000000..34cc95d72 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ArrayBufferView.html @@ -0,0 +1,7 @@ +ArrayBufferView | @wailsio/runtime

Interface ArrayBufferView<TArrayBuffer>

interface ArrayBufferView<
    TArrayBuffer extends ArrayBufferLike = ArrayBufferLike,
> {
    buffer: TArrayBuffer;
    byteLength: number;
    byteOffset: number;
}

Type Parameters

Properties

buffer: TArrayBuffer

The ArrayBuffer instance referenced by the array.

+
byteLength: number

The length in bytes of the array.

+
byteOffset: number

The offset in bytes of the array.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Blob.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Blob.html new file mode 100644 index 000000000..051fea2a3 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Blob.html @@ -0,0 +1,17 @@ +Blob | @wailsio/runtime

A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system.

+

MDN Reference

+
interface Blob {
    size: number;
    type: string;
    arrayBuffer(): Promise<ArrayBuffer>;
    bytes(): Promise<Uint8Array<ArrayBufferLike>>;
    slice(start?: number, end?: number, contentType?: string): Blob;
    stream(): ReadableStream<Uint8Array<ArrayBufferLike>>;
    text(): Promise<string>;
}

Properties

Methods

Properties

size: number
type: string

Methods

  • Parameters

    • Optionalstart: number
    • Optionalend: number
    • OptionalcontentType: string

    Returns Blob

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.BlobPropertyBag.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.BlobPropertyBag.html new file mode 100644 index 000000000..6fdfdc2d7 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.BlobPropertyBag.html @@ -0,0 +1,3 @@ +BlobPropertyBag | @wailsio/runtime
interface BlobPropertyBag {
    endings?: EndingType;
    type?: string;
}

Properties

Properties

endings?: EndingType
type?: string
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ErrorOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ErrorOptions.html new file mode 100644 index 000000000..12c1c1dec --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ErrorOptions.html @@ -0,0 +1,2 @@ +ErrorOptions | @wailsio/runtime
interface ErrorOptions {
    cause?: unknown;
}

Properties

Properties

cause?: unknown
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Event.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Event.html new file mode 100644 index 000000000..658cc399a --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Event.html @@ -0,0 +1,57 @@ +Event | @wailsio/runtime

An event which takes place in the DOM.

+

MDN Reference

+
interface Event {
    AT_TARGET: 2;
    bubbles: boolean;
    BUBBLING_PHASE: 3;
    cancelable: boolean;
    cancelBubble: boolean;
    CAPTURING_PHASE: 1;
    composed: boolean;
    currentTarget: null | EventTarget;
    defaultPrevented: boolean;
    eventPhase: number;
    isTrusted: boolean;
    NONE: 0;
    returnValue: boolean;
    srcElement: null | EventTarget;
    target: null | EventTarget;
    timeStamp: number;
    type: string;
    composedPath(): EventTarget[];
    initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
    preventDefault(): void;
    stopImmediatePropagation(): void;
    stopPropagation(): void;
}

Properties

AT_TARGET: 2
bubbles: boolean

Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise.

+

MDN Reference

+
BUBBLING_PHASE: 3
cancelable: boolean

Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method.

+

MDN Reference

+
cancelBubble: boolean

MDN Reference

+
CAPTURING_PHASE: 1
composed: boolean

Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise.

+

MDN Reference

+
currentTarget: null | EventTarget

Returns the object whose event listener's callback is currently being invoked.

+

MDN Reference

+
defaultPrevented: boolean

Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise.

+

MDN Reference

+
eventPhase: number

Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE.

+

MDN Reference

+
isTrusted: boolean

Returns true if event was dispatched by the user agent, and false otherwise.

+

MDN Reference

+
NONE: 0
returnValue: boolean

MDN Reference

+
srcElement: null | EventTarget

MDN Reference

+
target: null | EventTarget

Returns the object to which event is dispatched (its target).

+

MDN Reference

+
timeStamp: number

Returns the event's timestamp as the number of milliseconds measured relative to the time origin.

+

MDN Reference

+
type: string

Returns the type of event, e.g. "click", "hashchange", or "submit".

+

MDN Reference

+

Methods

  • Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget.

    +

    MDN Reference

    +

    Returns EventTarget[]

  • Parameters

    • type: string
    • Optionalbubbles: boolean
    • Optionalcancelable: boolean

    Returns void

    MDN Reference

    +
  • If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.

    +

    MDN Reference

    +

    Returns void

  • Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects.

    +

    MDN Reference

    +

    Returns void

  • When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object.

    +

    MDN Reference

    +

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventInit.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventInit.html new file mode 100644 index 000000000..27cc94ba8 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventInit.html @@ -0,0 +1,4 @@ +EventInit | @wailsio/runtime
interface EventInit {
    bubbles?: boolean;
    cancelable?: boolean;
    composed?: boolean;
}

Properties

bubbles?: boolean
cancelable?: boolean
composed?: boolean
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListener.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListener.html new file mode 100644 index 000000000..aa2f55376 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListener.html @@ -0,0 +1 @@ +EventListener | @wailsio/runtime
  • Parameters

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerObject.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerObject.html new file mode 100644 index 000000000..c644929fd --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerObject.html @@ -0,0 +1,2 @@ +EventListenerObject | @wailsio/runtime
interface EventListenerObject {
    handleEvent(object: Event): void;
}

Methods

Methods

  • Parameters

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerOptions.html new file mode 100644 index 000000000..4554d1cfd --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventListenerOptions.html @@ -0,0 +1,2 @@ +EventListenerOptions | @wailsio/runtime
interface EventListenerOptions {
    capture?: boolean;
}

Hierarchy (View Summary)

Properties

Properties

capture?: boolean
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventTarget.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventTarget.html new file mode 100644 index 000000000..c2d97cd5f --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.EventTarget.html @@ -0,0 +1,18 @@ +EventTarget | @wailsio/runtime

EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them.

+

MDN Reference

+
interface EventTarget {
    addEventListener(
        type: string,
        callback: null | EventListenerOrEventListenerObject,
        options?: boolean | AddEventListenerOptions,
    ): void;
    dispatchEvent(event: Event): boolean;
    removeEventListener(
        type: string,
        callback: null | EventListenerOrEventListenerObject,
        options?: boolean | EventListenerOptions,
    ): void;
}

Hierarchy (View Summary)

Methods

  • Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

    +

    The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

    +

    When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

    +

    When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

    +

    When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

    +

    If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

    +

    The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.

    +

    MDN Reference

    +

    Parameters

    Returns void

  • Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.

    +

    MDN Reference

    +

    Parameters

    Returns boolean

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Iterable.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Iterable.html new file mode 100644 index 000000000..02cc4cf80 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Iterable.html @@ -0,0 +1,2 @@ +Iterable | @wailsio/runtime

Interface Iterable<T, TReturn, TNext>

interface Iterable<T, TReturn = any, TNext = any> {
    "[iterator]"(): Iterator<T, TReturn, TNext>;
}

Type Parameters

  • T
  • TReturn = any
  • TNext = any

Methods

Methods

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSource.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSource.html new file mode 100644 index 000000000..b277e5271 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSource.html @@ -0,0 +1,49 @@ +MediaSource | @wailsio/runtime

This Media Source Extensions API interface represents a source of media data for an HTMLMediaElement object. A MediaSource object can be attached to a HTMLMediaElement to be played in the user agent.

+

MDN Reference

+
interface MediaSource {
    activeSourceBuffers: SourceBufferList;
    duration: number;
    onsourceclose: null | (this: MediaSource, ev: Event) => any;
    onsourceended: null | (this: MediaSource, ev: Event) => any;
    onsourceopen: null | (this: MediaSource, ev: Event) => any;
    readyState: ReadyState;
    sourceBuffers: SourceBufferList;
    addEventListener<K extends keyof MediaSourceEventMap>(
        type: K,
        listener: (this: MediaSource, ev: MediaSourceEventMap[K]) => any,
        options?: boolean | AddEventListenerOptions,
    ): void;
    addEventListener(
        type: string,
        listener: EventListenerOrEventListenerObject,
        options?: boolean | AddEventListenerOptions,
    ): void;
    addSourceBuffer(type: string): SourceBuffer;
    clearLiveSeekableRange(): void;
    dispatchEvent(event: Event): boolean;
    endOfStream(error?: EndOfStreamError): void;
    removeEventListener<K extends keyof MediaSourceEventMap>(
        type: K,
        listener: (this: MediaSource, ev: MediaSourceEventMap[K]) => any,
        options?: boolean | EventListenerOptions,
    ): void;
    removeEventListener(
        type: string,
        listener: EventListenerOrEventListenerObject,
        options?: boolean | EventListenerOptions,
    ): void;
    removeSourceBuffer(sourceBuffer: SourceBuffer): void;
    setLiveSeekableRange(start: number, end: number): void;
}

Hierarchy (View Summary)

Properties

activeSourceBuffers: SourceBufferList
duration: number
onsourceclose: null | (this: MediaSource, ev: Event) => any
onsourceended: null | (this: MediaSource, ev: Event) => any
onsourceopen: null | (this: MediaSource, ev: Event) => any
readyState: ReadyState
sourceBuffers: SourceBufferList

Methods

  • Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

    +

    The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

    +

    When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

    +

    When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

    +

    When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

    +

    If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

    +

    The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.

    +

    MDN Reference

    +

    Type Parameters

    Parameters

    Returns void

  • Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

    +

    The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

    +

    When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

    +

    When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

    +

    When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

    +

    If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

    +

    The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.

    +

    MDN Reference

    +

    Parameters

    Returns void

  • Returns void

  • Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.

    +

    MDN Reference

    +

    Parameters

    Returns boolean

  • Parameters

    • start: number
    • end: number

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSourceEventMap.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSourceEventMap.html new file mode 100644 index 000000000..ece981957 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.MediaSourceEventMap.html @@ -0,0 +1,4 @@ +MediaSourceEventMap | @wailsio/runtime
interface MediaSourceEventMap {
    sourceclose: Event;
    sourceended: Event;
    sourceopen: Event;
}

Properties

sourceclose: Event
sourceended: Event
sourceopen: Event
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Position.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Position.html new file mode 100644 index 000000000..5318385e9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Position.html @@ -0,0 +1,6 @@ +Position | @wailsio/runtime

A record describing the position of a window.

+
interface Position {
    x: number;
    y: number;
}

Properties

x +y +

Properties

x: number

The horizontal position of the window.

+
y: number

The vertical position of the window.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseFulfilledResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseFulfilledResult.html new file mode 100644 index 000000000..0f1002ee8 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseFulfilledResult.html @@ -0,0 +1,3 @@ +PromiseFulfilledResult | @wailsio/runtime

Interface PromiseFulfilledResult<T>

interface PromiseFulfilledResult<T> {
    status: "fulfilled";
    value: T;
}

Type Parameters

  • T

Properties

Properties

status: "fulfilled"
value: T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseLike.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseLike.html new file mode 100644 index 000000000..4add9f58e --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseLike.html @@ -0,0 +1,6 @@ +PromiseLike | @wailsio/runtime
interface PromiseLike<T> {
    then<TResult1 = T, TResult2 = never>(
        onfulfilled?: null | (value: T) => TResult1 | PromiseLike<TResult1>,
        onrejected?: null | (reason: any) => TResult2 | PromiseLike<TResult2>,
    ): PromiseLike<TResult1 | TResult2>;
}

Type Parameters

  • T

Implemented by

Methods

Methods

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseRejectedResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseRejectedResult.html new file mode 100644 index 000000000..a364e257f --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseRejectedResult.html @@ -0,0 +1,3 @@ +PromiseRejectedResult | @wailsio/runtime
interface PromiseRejectedResult {
    reason: any;
    status: "rejected";
}

Properties

Properties

reason: any
status: "rejected"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseWithResolvers.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseWithResolvers.html new file mode 100644 index 000000000..b942f497b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.PromiseWithResolvers.html @@ -0,0 +1,4 @@ +PromiseWithResolvers | @wailsio/runtime

Interface PromiseWithResolvers<T>

interface PromiseWithResolvers<T> {
    promise: Promise<T>;
    reject: (reason?: any) => void;
    resolve: (value: T | PromiseLike<T>) => void;
}

Type Parameters

  • T

Properties

Properties

promise: Promise<T>
reject: (reason?: any) => void
resolve: (value: T | PromiseLike<T>) => void
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategy.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategy.html new file mode 100644 index 000000000..149c55d8c --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategy.html @@ -0,0 +1,3 @@ +QueuingStrategy | @wailsio/runtime

Interface QueuingStrategy<T>

interface QueuingStrategy<T = any> {
    highWaterMark?: number;
    size?: QueuingStrategySize<T>;
}

Type Parameters

  • T = any

Properties

Properties

highWaterMark?: number
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategySize.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategySize.html new file mode 100644 index 000000000..5f653c14e --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.QueuingStrategySize.html @@ -0,0 +1 @@ +QueuingStrategySize | @wailsio/runtime

Interface QueuingStrategySize<T>

Type Parameters

  • T = any
  • Parameters

    • chunk: T

    Returns number

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableByteStreamController.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableByteStreamController.html new file mode 100644 index 000000000..5dce85cc7 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableByteStreamController.html @@ -0,0 +1,12 @@ +ReadableByteStreamController | @wailsio/runtime

Interface ReadableByteStreamController

interface ReadableByteStreamController {
    byobRequest: null | ReadableStreamBYOBRequest;
    desiredSize: null | number;
    close(): void;
    enqueue(chunk: ArrayBufferView): void;
    error(e?: any): void;
}

Properties

Methods

Properties

byobRequest: null | ReadableStreamBYOBRequest
desiredSize: null | number

Methods

  • Returns void

  • Parameters

    • Optionale: any

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStream.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStream.html new file mode 100644 index 000000000..b7d1939f3 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStream.html @@ -0,0 +1,15 @@ +ReadableStream | @wailsio/runtime

Interface ReadableStream<R>

This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object.

+

MDN Reference

+
interface ReadableStream<R = any> {
    locked: boolean;
    cancel(reason?: any): Promise<void>;
    getReader(options: { mode: "byob" }): ReadableStreamBYOBReader;
    getReader(): ReadableStreamDefaultReader<R>;
    getReader(
        options?: ReadableStreamGetReaderOptions,
    ): ReadableStreamReader<R>;
    pipeThrough<T>(
        transform: ReadableWritablePair<T, R>,
        options?: StreamPipeOptions,
    ): ReadableStream<T>;
    pipeTo(
        destination: WritableStream<R>,
        options?: StreamPipeOptions,
    ): Promise<void>;
    tee(): [ReadableStream<R>, ReadableStream<R>];
}

Type Parameters

  • R = any

Properties

Methods

Properties

locked: boolean

Methods

  • Parameters

    • Optionalreason: any

    Returns Promise<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBReader.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBReader.html new file mode 100644 index 000000000..75028ddd9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBReader.html @@ -0,0 +1,10 @@ +ReadableStreamBYOBReader | @wailsio/runtime

Interface ReadableStreamBYOBReader

interface ReadableStreamBYOBReader {
    closed: Promise<undefined>;
    cancel(reason?: any): Promise<void>;
    read<T extends ArrayBufferView<ArrayBufferLike>>(
        view: T,
    ): Promise<ReadableStreamReadResult<T>>;
    releaseLock(): void;
}

Hierarchy (View Summary)

Properties

Methods

Properties

closed: Promise<undefined>

Methods

  • Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBRequest.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBRequest.html new file mode 100644 index 000000000..a0085f9a8 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamBYOBRequest.html @@ -0,0 +1,8 @@ +ReadableStreamBYOBRequest | @wailsio/runtime

Interface ReadableStreamBYOBRequest

interface ReadableStreamBYOBRequest {
    view: null | ArrayBufferView<ArrayBufferLike>;
    respond(bytesWritten: number): void;
    respondWithNewView(view: ArrayBufferView): void;
}

Properties

Methods

Properties

Methods

  • Parameters

    • bytesWritten: number

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultController.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultController.html new file mode 100644 index 000000000..0dc9a2850 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultController.html @@ -0,0 +1,10 @@ +ReadableStreamDefaultController | @wailsio/runtime

Interface ReadableStreamDefaultController<R>

interface ReadableStreamDefaultController<R = any> {
    desiredSize: null | number;
    close(): void;
    enqueue(chunk?: R): void;
    error(e?: any): void;
}

Type Parameters

  • R = any

Properties

Methods

Properties

desiredSize: null | number

Methods

  • Returns void

  • Parameters

    • Optionalchunk: R

    Returns void

  • Parameters

    • Optionale: any

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultReader.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultReader.html new file mode 100644 index 000000000..06db8c0bb --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamDefaultReader.html @@ -0,0 +1,10 @@ +ReadableStreamDefaultReader | @wailsio/runtime

Interface ReadableStreamDefaultReader<R>

interface ReadableStreamDefaultReader<R = any> {
    closed: Promise<undefined>;
    cancel(reason?: any): Promise<void>;
    read(): Promise<ReadableStreamReadResult<R>>;
    releaseLock(): void;
}

Type Parameters

  • R = any

Hierarchy (View Summary)

Properties

Methods

Properties

closed: Promise<undefined>

Methods

  • Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGenericReader.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGenericReader.html new file mode 100644 index 000000000..556ee2394 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGenericReader.html @@ -0,0 +1,5 @@ +ReadableStreamGenericReader | @wailsio/runtime

Interface ReadableStreamGenericReader

interface ReadableStreamGenericReader {
    closed: Promise<undefined>;
    cancel(reason?: any): Promise<void>;
}

Hierarchy (View Summary)

Properties

Methods

Properties

closed: Promise<undefined>

Methods

  • Parameters

    • Optionalreason: any

    Returns Promise<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGetReaderOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGetReaderOptions.html new file mode 100644 index 000000000..f71b8b580 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamGetReaderOptions.html @@ -0,0 +1,4 @@ +ReadableStreamGetReaderOptions | @wailsio/runtime

Interface ReadableStreamGetReaderOptions

interface ReadableStreamGetReaderOptions {
    mode?: "byob";
}

Properties

Properties

mode?: "byob"

Creates a ReadableStreamBYOBReader and locks the stream to the new reader.

+

This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle "bring your own buffer" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadDoneResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadDoneResult.html new file mode 100644 index 000000000..d844ef013 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadDoneResult.html @@ -0,0 +1,3 @@ +ReadableStreamReadDoneResult | @wailsio/runtime

Interface ReadableStreamReadDoneResult<T>

interface ReadableStreamReadDoneResult<T> {
    done: true;
    value?: T;
}

Type Parameters

  • T

Properties

Properties

done: true
value?: T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadValueResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadValueResult.html new file mode 100644 index 000000000..a9b44ff4e --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableStreamReadValueResult.html @@ -0,0 +1,3 @@ +ReadableStreamReadValueResult | @wailsio/runtime

Interface ReadableStreamReadValueResult<T>

interface ReadableStreamReadValueResult<T> {
    done: false;
    value: T;
}

Type Parameters

  • T

Properties

Properties

done: false
value: T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableWritablePair.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableWritablePair.html new file mode 100644 index 000000000..33668f35b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.ReadableWritablePair.html @@ -0,0 +1,5 @@ +ReadableWritablePair | @wailsio/runtime

Interface ReadableWritablePair<R, W>

interface ReadableWritablePair<R = any, W = any> {
    readable: ReadableStream<R>;
    writable: WritableStream<W>;
}

Type Parameters

  • R = any
  • W = any

Properties

Properties

readable: ReadableStream<R>
writable: WritableStream<W>

Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.

+

Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Size.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Size.html new file mode 100644 index 000000000..7faa0d375 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.Size.html @@ -0,0 +1,6 @@ +Size | @wailsio/runtime

A record describing the size of a window.

+
interface Size {
    height: number;
    width: number;
}

Properties

Properties

height: number

The height of the window.

+
width: number

The width of the window.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBuffer.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBuffer.html new file mode 100644 index 000000000..97fa41789 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBuffer.html @@ -0,0 +1,53 @@ +SourceBuffer | @wailsio/runtime

A chunk of media to be passed into an HTMLMediaElement and played, via a MediaSource object. This can be made up of one or several media segments.

+

MDN Reference

+
interface SourceBuffer {
    appendWindowEnd: number;
    appendWindowStart: number;
    buffered: TimeRanges;
    mode: AppendMode;
    onabort: null | (this: SourceBuffer, ev: Event) => any;
    onerror: null | (this: SourceBuffer, ev: Event) => any;
    onupdate: null | (this: SourceBuffer, ev: Event) => any;
    onupdateend: null | (this: SourceBuffer, ev: Event) => any;
    onupdatestart: null | (this: SourceBuffer, ev: Event) => any;
    timestampOffset: number;
    updating: boolean;
    abort(): void;
    addEventListener<K extends keyof SourceBufferEventMap>(
        type: K,
        listener: (this: SourceBuffer, ev: SourceBufferEventMap[K]) => any,
        options?: boolean | AddEventListenerOptions,
    ): void;
    addEventListener(
        type: string,
        listener: EventListenerOrEventListenerObject,
        options?: boolean | AddEventListenerOptions,
    ): void;
    appendBuffer(data: BufferSource): void;
    changeType(type: string): void;
    dispatchEvent(event: Event): boolean;
    remove(start: number, end: number): void;
    removeEventListener<K extends keyof SourceBufferEventMap>(
        type: K,
        listener: (this: SourceBuffer, ev: SourceBufferEventMap[K]) => any,
        options?: boolean | EventListenerOptions,
    ): void;
    removeEventListener(
        type: string,
        listener: EventListenerOrEventListenerObject,
        options?: boolean | EventListenerOptions,
    ): void;
}

Hierarchy (View Summary)

Properties

appendWindowEnd: number
appendWindowStart: number
buffered: TimeRanges
onabort: null | (this: SourceBuffer, ev: Event) => any
onerror: null | (this: SourceBuffer, ev: Event) => any
onupdate: null | (this: SourceBuffer, ev: Event) => any
onupdateend: null | (this: SourceBuffer, ev: Event) => any
onupdatestart: null | (this: SourceBuffer, ev: Event) => any
timestampOffset: number
updating: boolean

Methods

  • Returns void

  • Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

    +

    The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

    +

    When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

    +

    When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

    +

    When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

    +

    If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

    +

    The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.

    +

    MDN Reference

    +

    Type Parameters

    Parameters

    Returns void

  • Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

    +

    The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

    +

    When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

    +

    When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

    +

    When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

    +

    If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

    +

    The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.

    +

    MDN Reference

    +

    Parameters

    Returns void

  • Parameters

    • type: string

    Returns void

  • Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.

    +

    MDN Reference

    +

    Parameters

    Returns boolean

  • Parameters

    • start: number
    • end: number

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBufferEventMap.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBufferEventMap.html new file mode 100644 index 000000000..95e9fee8d --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.SourceBufferEventMap.html @@ -0,0 +1,6 @@ +SourceBufferEventMap | @wailsio/runtime
interface SourceBufferEventMap {
    abort: Event;
    error: Event;
    update: Event;
    updateend: Event;
    updatestart: Event;
}

Properties

abort: Event
error: Event
update: Event
updateend: Event
updatestart: Event
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.StreamPipeOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.StreamPipeOptions.html new file mode 100644 index 000000000..ec92b448b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.StreamPipeOptions.html @@ -0,0 +1,13 @@ +StreamPipeOptions | @wailsio/runtime
interface StreamPipeOptions {
    preventAbort?: boolean;
    preventCancel?: boolean;
    preventClose?: boolean;
    signal?: AbortSignal;
}

Properties

preventAbort?: boolean
preventCancel?: boolean
preventClose?: boolean

Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.

+

Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.

+

Errors and closures of the source and destination streams propagate as follows:

+

An error in this source readable stream will abort destination, unless preventAbort is truthy. The returned promise will be rejected with the source's error, or with any error that occurs during aborting the destination.

+

An error in destination will cancel this source readable stream, unless preventCancel is truthy. The returned promise will be rejected with the destination's error, or with any error that occurs during canceling the source.

+

When this source readable stream closes, destination will be closed, unless preventClose is truthy. The returned promise will be fulfilled once this process completes, unless an error is encountered while closing the destination, in which case it will be rejected with that error.

+

If destination starts out closed or closing, this source readable stream will be canceled, unless preventCancel is true. The returned promise will be rejected with an error indicating piping to a closed stream failed, or with any error that occurs during canceling the source.

+

The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.

+
signal?: AbortSignal
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.TimeRanges.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.TimeRanges.html new file mode 100644 index 000000000..f93dd4e77 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.TimeRanges.html @@ -0,0 +1,14 @@ +TimeRanges | @wailsio/runtime

Used to represent a set of time ranges, primarily for the purpose of tracking which portions of media have been buffered when loading it for use by the

+

MDN Reference

+
interface TimeRanges {
    length: number;
    end(index: number): number;
    start(index: number): number;
}

Properties

Methods

Properties

length: number

Returns the number of ranges in the object.

+

MDN Reference

+

Methods

  • Returns the time for the end of the range with the given index.

    +

    Throws an "IndexSizeError" DOMException if the index is out of range.

    +

    MDN Reference

    +

    Parameters

    • index: number

    Returns number

  • Returns the time for the start of the range with the given index.

    +

    Throws an "IndexSizeError" DOMException if the index is out of range.

    +

    MDN Reference

    +

    Parameters

    • index: number

    Returns number

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.URL.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.URL.html new file mode 100644 index 000000000..171f46a55 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.URL.html @@ -0,0 +1,30 @@ +URL | @wailsio/runtime

The URL interface represents an object providing static methods used for creating object URLs.

+

MDN Reference

+
interface URL {
    hash: string;
    host: string;
    hostname: string;
    href: string;
    origin: string;
    password: string;
    pathname: string;
    port: string;
    protocol: string;
    search: string;
    searchParams: URLSearchParams;
    username: string;
    toJSON(): string;
    toString(): string;
}

Properties

hash: string
host: string
hostname: string
href: string
origin: string
password: string
pathname: string
port: string
protocol: string
search: string
searchParams: URLSearchParams
username: string

Methods

  • Returns string

  • Returns string

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingByteSource.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingByteSource.html new file mode 100644 index 000000000..f4d07fbf6 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingByteSource.html @@ -0,0 +1,6 @@ +UnderlyingByteSource | @wailsio/runtime
interface UnderlyingByteSource {
    autoAllocateChunkSize?: number;
    cancel?: UnderlyingSourceCancelCallback;
    pull?: (
        controller: ReadableByteStreamController,
    ) => void | PromiseLike<void>;
    start?: (controller: ReadableByteStreamController) => any;
    type: "bytes";
}

Properties

autoAllocateChunkSize?: number
pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>
start?: (controller: ReadableByteStreamController) => any
type: "bytes"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingDefaultSource.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingDefaultSource.html new file mode 100644 index 000000000..d282894c4 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingDefaultSource.html @@ -0,0 +1,5 @@ +UnderlyingDefaultSource | @wailsio/runtime

Interface UnderlyingDefaultSource<R>

interface UnderlyingDefaultSource<R = any> {
    cancel?: UnderlyingSourceCancelCallback;
    pull?: (
        controller: ReadableStreamDefaultController<R>,
    ) => void | PromiseLike<void>;
    start?: (controller: ReadableStreamDefaultController<R>) => any;
    type?: undefined;
}

Type Parameters

  • R = any

Properties

Properties

pull?: (
    controller: ReadableStreamDefaultController<R>,
) => void | PromiseLike<void>
start?: (controller: ReadableStreamDefaultController<R>) => any
type?: undefined
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSink.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSink.html new file mode 100644 index 000000000..d6da3c8d4 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSink.html @@ -0,0 +1,6 @@ +UnderlyingSink | @wailsio/runtime

Interface UnderlyingSink<W>

interface UnderlyingSink<W = any> {
    abort?: UnderlyingSinkAbortCallback;
    close?: UnderlyingSinkCloseCallback;
    start?: UnderlyingSinkStartCallback;
    type?: undefined;
    write?: UnderlyingSinkWriteCallback<W>;
}

Type Parameters

  • W = any

Properties

Properties

type?: undefined
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkAbortCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkAbortCallback.html new file mode 100644 index 000000000..e45d9d445 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkAbortCallback.html @@ -0,0 +1 @@ +UnderlyingSinkAbortCallback | @wailsio/runtime

Interface UnderlyingSinkAbortCallback

  • Parameters

    • Optionalreason: any

    Returns void | PromiseLike<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkCloseCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkCloseCallback.html new file mode 100644 index 000000000..06c0a3608 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkCloseCallback.html @@ -0,0 +1 @@ +UnderlyingSinkCloseCallback | @wailsio/runtime

Interface UnderlyingSinkCloseCallback

  • Returns void | PromiseLike<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkStartCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkStartCallback.html new file mode 100644 index 000000000..b3fa49c5c --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkStartCallback.html @@ -0,0 +1 @@ +UnderlyingSinkStartCallback | @wailsio/runtime

Interface UnderlyingSinkStartCallback

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkWriteCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkWriteCallback.html new file mode 100644 index 000000000..81ad323e5 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSinkWriteCallback.html @@ -0,0 +1 @@ +UnderlyingSinkWriteCallback | @wailsio/runtime

Interface UnderlyingSinkWriteCallback<W>

Type Parameters

  • W
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSource.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSource.html new file mode 100644 index 000000000..c95e2903c --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSource.html @@ -0,0 +1,6 @@ +UnderlyingSource | @wailsio/runtime

Interface UnderlyingSource<R>

interface UnderlyingSource<R = any> {
    autoAllocateChunkSize?: number;
    cancel?: UnderlyingSourceCancelCallback;
    pull?: UnderlyingSourcePullCallback<R>;
    start?: UnderlyingSourceStartCallback<R>;
    type?: "bytes";
}

Type Parameters

  • R = any

Properties

autoAllocateChunkSize?: number
type?: "bytes"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceCancelCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceCancelCallback.html new file mode 100644 index 000000000..978b039e9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceCancelCallback.html @@ -0,0 +1 @@ +UnderlyingSourceCancelCallback | @wailsio/runtime

Interface UnderlyingSourceCancelCallback

  • Parameters

    • Optionalreason: any

    Returns void | PromiseLike<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourcePullCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourcePullCallback.html new file mode 100644 index 000000000..8779e3a64 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourcePullCallback.html @@ -0,0 +1 @@ +UnderlyingSourcePullCallback | @wailsio/runtime

Interface UnderlyingSourcePullCallback<R>

Type Parameters

  • R
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceStartCallback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceStartCallback.html new file mode 100644 index 000000000..acfdef628 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.UnderlyingSourceStartCallback.html @@ -0,0 +1 @@ +UnderlyingSourceStartCallback | @wailsio/runtime

Interface UnderlyingSourceStartCallback<R>

Type Parameters

  • R
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStream.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStream.html new file mode 100644 index 000000000..fcaeff279 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStream.html @@ -0,0 +1,11 @@ +WritableStream | @wailsio/runtime

Interface WritableStream<W>

This Streams API interface provides a standard abstraction for writing streaming data to a destination, known as a sink. This object comes with built-in backpressure and queuing.

+

MDN Reference

+
interface WritableStream<W = any> {
    locked: boolean;
    abort(reason?: any): Promise<void>;
    close(): Promise<void>;
    getWriter(): WritableStreamDefaultWriter<W>;
}

Type Parameters

  • W = any

Properties

Methods

Properties

locked: boolean

Methods

  • Parameters

    • Optionalreason: any

    Returns Promise<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultController.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultController.html new file mode 100644 index 000000000..c51cc6c16 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultController.html @@ -0,0 +1,7 @@ +WritableStreamDefaultController | @wailsio/runtime

Interface WritableStreamDefaultController

This Streams API interface represents a controller allowing control of a WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate.

+

MDN Reference

+
interface WritableStreamDefaultController {
    signal: AbortSignal;
    error(e?: any): void;
}

Properties

Methods

Properties

signal: AbortSignal

Methods

  • Parameters

    • Optionale: any

    Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultWriter.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultWriter.html new file mode 100644 index 000000000..d0d4f5ed7 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/interfaces/_internal_.WritableStreamDefaultWriter.html @@ -0,0 +1,17 @@ +WritableStreamDefaultWriter | @wailsio/runtime

Interface WritableStreamDefaultWriter<W>

This Streams API interface is the object returned by WritableStream.getWriter() and once created locks the < writer to the WritableStream ensuring that no other streams can write to the underlying sink.

+

MDN Reference

+
interface WritableStreamDefaultWriter<W = any> {
    closed: Promise<undefined>;
    desiredSize: null | number;
    ready: Promise<undefined>;
    abort(reason?: any): Promise<void>;
    close(): Promise<void>;
    releaseLock(): void;
    write(chunk?: W): Promise<void>;
}

Type Parameters

  • W = any

Properties

closed: Promise<undefined>
desiredSize: null | number
ready: Promise<undefined>

Methods

  • Parameters

    • Optionalreason: any

    Returns Promise<void>

  • Returns void

  • Parameters

    • Optionalchunk: W

    Returns Promise<void>

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules.html index 8f724e236..4248cf28d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules.html @@ -1,14 +1 @@ -@wailsio/runtime

@wailsio/runtime

Index

Namespaces

Variables

Functions

Generated using TypeDoc

\ No newline at end of file +@wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Application.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Application.html index c2e707da7..e6b5d57c5 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Application.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Application.html @@ -1,4 +1 @@ -Application | @wailsio/runtime

Namespace Application

Index

Functions

Generated using TypeDoc

\ No newline at end of file +Application | @wailsio/runtime

Namespace Application

Functions

Hide
Quit
Show
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Browser.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Browser.html index d7a4db8d3..757bf8469 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Browser.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Browser.html @@ -1,2 +1 @@ -Browser | @wailsio/runtime

Namespace Browser

Index

Functions

Generated using TypeDoc

\ No newline at end of file +Browser | @wailsio/runtime

Namespace Browser

Functions

OpenURL
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Call.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Call.html index 57343eecc..8d06195ea 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Call.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Call.html @@ -1,6 +1 @@ -Call | @wailsio/runtime

Namespace Call

Index

Classes

Interfaces

Functions

Generated using TypeDoc

\ No newline at end of file +Call | @wailsio/runtime

Namespace Call

Classes

RuntimeError

Type Aliases

CallOptions

Functions

ByID
ByName
Call
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Clipboard.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Clipboard.html index 3fbf76e42..1d15bfa14 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Clipboard.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Clipboard.html @@ -1,3 +1 @@ -Clipboard | @wailsio/runtime

Namespace Clipboard

Index

Functions

Generated using TypeDoc

\ No newline at end of file +Clipboard | @wailsio/runtime

Namespace Clipboard

Functions

SetText
Text
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Create.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Create.html deleted file mode 100644 index 7a552333c..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Create.html +++ /dev/null @@ -1,7 +0,0 @@ -Create | @wailsio/runtime

Namespace Create

Index

Functions

Generated using TypeDoc

\ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Dialogs.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Dialogs.html index 559d76c10..256f30a47 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Dialogs.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Dialogs.html @@ -1,12 +1 @@ -Dialogs | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +Dialogs | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Events.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Events.html index 9eb586414..cd12fa65d 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Events.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Events.html @@ -1,10 +1 @@ -Events | @wailsio/runtime

Namespace Events

Index

Classes

Variables

Functions

Generated using TypeDoc

\ No newline at end of file +Events | @wailsio/runtime

Namespace Events

Classes

WailsEvent

Type Aliases

Callback

Variables

Types

Functions

Emit
Off
OffAll
On
Once
OnMultiple
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Flags.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Flags.html index 21e0baf68..2004c8692 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Flags.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Flags.html @@ -1,2 +1 @@ -Flags | @wailsio/runtime

Namespace Flags

Index

Functions

Generated using TypeDoc

\ No newline at end of file +Flags | @wailsio/runtime

Namespace Flags

Functions

GetFlag
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Screens.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Screens.html index b05971b6b..f25eaabb3 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Screens.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/Screens.html @@ -1,7 +1 @@ -Screens | @wailsio/runtime

Namespace Screens

Index

Interfaces

Functions

Generated using TypeDoc

\ No newline at end of file +Screens | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/System.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/System.html index 593bb0241..bc891a645 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/System.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/System.html @@ -1,14 +1 @@ -System | @wailsio/runtime

Generated using TypeDoc

\ No newline at end of file +System | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/WML.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/WML.html index 57e00073a..e2d7d3912 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/WML.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/WML.html @@ -1,3 +1 @@ -WML | @wailsio/runtime

Namespace WML

Index

Functions

Generated using TypeDoc

\ No newline at end of file +WML | @wailsio/runtime

Namespace WML

Functions

Enable
Reload
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/_internal_.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/_internal_.html new file mode 100644 index 000000000..9707760fd --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/modules/_internal_.html @@ -0,0 +1 @@ +<internal> | @wailsio/runtime

Classes

Window

Interfaces

AddEventListenerOptions
ArrayBufferView
Blob
BlobPropertyBag
ErrorOptions
Event
EventInit
EventListener
EventListenerObject
EventListenerOptions
EventTarget
Iterable
MediaSource
MediaSourceEventMap
Position
PromiseFulfilledResult
PromiseLike
PromiseRejectedResult
PromiseWithResolvers
QueuingStrategy
QueuingStrategySize
ReadableByteStreamController
ReadableStream
ReadableStreamBYOBReader
ReadableStreamBYOBRequest
ReadableStreamDefaultController
ReadableStreamDefaultReader
ReadableStreamGenericReader
ReadableStreamGetReaderOptions
ReadableStreamReadDoneResult
ReadableStreamReadValueResult
ReadableWritablePair
Size
SourceBuffer
SourceBufferEventMap
StreamPipeOptions
TimeRanges
UnderlyingByteSource
UnderlyingDefaultSource
UnderlyingSink
UnderlyingSinkAbortCallback
UnderlyingSinkCloseCallback
UnderlyingSinkStartCallback
UnderlyingSinkWriteCallback
UnderlyingSource
UnderlyingSourceCancelCallback
UnderlyingSourcePullCallback
UnderlyingSourceStartCallback
URL
WritableStream
WritableStreamDefaultController
WritableStreamDefaultWriter

Type Aliases

AppendMode
ArrayBufferLike
Awaited
BlobPart
BufferSource
CancellablePromiseCanceller
CancellablePromiseExecutor
CancellablePromiseRejector
CancellablePromiseResolver
EndingType
EndOfStreamError
EventListenerOrEventListenerObject
Partial
PromiseSettledResult
ReadableStreamController
ReadableStreamReader
ReadableStreamReadResult
Readonly
ReadyState
Record

Variables

Blob
Event
EventTarget
MediaSource
ReadableByteStreamController
ReadableStream
ReadableStreamBYOBReader
ReadableStreamBYOBRequest
ReadableStreamDefaultController
ReadableStreamDefaultReader
SourceBuffer
TimeRanges
URL
WritableStream
WritableStreamDefaultController
WritableStreamDefaultWriter
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Call.CallOptions.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Call.CallOptions.html new file mode 100644 index 000000000..8bb2ba3c9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Call.CallOptions.html @@ -0,0 +1,9 @@ +CallOptions | @wailsio/runtime

Type Alias CallOptions

CallOptions:
    | { args: any[]; methodID: number; methodName?: never }
    | { args: any[]; methodID?: never; methodName: string }

Holds all required information for a binding call. +May provide either a method ID or a method name, but not both.

+

Type declaration

  • { args: any[]; methodID: number; methodName?: never }
    • args: any[]

      Arguments to be passed into the bound method.

      +
    • methodID: number

      The numeric ID of the bound method to call.

      +
    • OptionalmethodName?: never

      The fully qualified name of the bound method to call.

      +
  • { args: any[]; methodID?: never; methodName: string }
    • args: any[]

      Arguments to be passed into the bound method.

      +
    • OptionalmethodID?: never

      The numeric ID of the bound method to call.

      +
    • methodName: string

      The fully qualified name of the bound method to call.

      +
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Events.Callback.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Events.Callback.html new file mode 100644 index 000000000..03c56fff2 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/Events.Callback.html @@ -0,0 +1,2 @@ +Callback | @wailsio/runtime
Callback: (ev: WailsEvent) => void

The type of handlers for a given event.

+

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.AppendMode.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.AppendMode.html new file mode 100644 index 000000000..21279131a --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.AppendMode.html @@ -0,0 +1 @@ +AppendMode | @wailsio/runtime
AppendMode: "segments" | "sequence"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ArrayBufferLike.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ArrayBufferLike.html new file mode 100644 index 000000000..27533a820 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ArrayBufferLike.html @@ -0,0 +1 @@ +ArrayBufferLike | @wailsio/runtime
ArrayBufferLike: ArrayBufferTypes[keyof ArrayBufferTypes]
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Awaited.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Awaited.html new file mode 100644 index 000000000..7d51c3785 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Awaited.html @@ -0,0 +1,2 @@ +Awaited | @wailsio/runtime
Awaited: T extends null
| undefined
    ? T
    : T extends object & { then(onfulfilled: F, ...args: _): any }
        ? F extends (value: infer V, ...args: infer _) => any
            ? Awaited<V>
            : never
        : T

Recursively unwraps the "awaited type" of a type. Non-promise "thenables" should resolve to never. This emulates the behavior of await.

+

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BlobPart.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BlobPart.html new file mode 100644 index 000000000..116be5557 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BlobPart.html @@ -0,0 +1 @@ +BlobPart | @wailsio/runtime
BlobPart: BufferSource | Blob | string
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BufferSource.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BufferSource.html new file mode 100644 index 000000000..c4ad275f4 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.BufferSource.html @@ -0,0 +1 @@ +BufferSource | @wailsio/runtime
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseCanceller.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseCanceller.html new file mode 100644 index 000000000..3258a70d0 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseCanceller.html @@ -0,0 +1 @@ +CancellablePromiseCanceller | @wailsio/runtime

Type Alias CancellablePromiseCanceller

CancellablePromiseCanceller: (cause?: any) => void | PromiseLike<void>

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseExecutor.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseExecutor.html new file mode 100644 index 000000000..85b0f8526 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseExecutor.html @@ -0,0 +1 @@ +CancellablePromiseExecutor | @wailsio/runtime

Type Alias CancellablePromiseExecutor<T>

CancellablePromiseExecutor: (
    resolve: CancellablePromiseResolver<T>,
    reject: CancellablePromiseRejector,
) => void

Type Parameters

  • T

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseRejector.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseRejector.html new file mode 100644 index 000000000..b75c628c3 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseRejector.html @@ -0,0 +1 @@ +CancellablePromiseRejector | @wailsio/runtime

Type Alias CancellablePromiseRejector

CancellablePromiseRejector: (reason?: any) => void

Type declaration

    • (reason?: any): void
    • Parameters

      • Optionalreason: any

      Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseResolver.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseResolver.html new file mode 100644 index 000000000..81f2b806b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.CancellablePromiseResolver.html @@ -0,0 +1 @@ +CancellablePromiseResolver | @wailsio/runtime

Type Alias CancellablePromiseResolver<T>

CancellablePromiseResolver: (
    value: T | PromiseLike<T> | CancellablePromiseLike<T>,
) => void

Type Parameters

  • T

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndOfStreamError.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndOfStreamError.html new file mode 100644 index 000000000..df2e1e6b6 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndOfStreamError.html @@ -0,0 +1 @@ +EndOfStreamError | @wailsio/runtime
EndOfStreamError: "decode" | "network"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndingType.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndingType.html new file mode 100644 index 000000000..97b2a0bfe --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EndingType.html @@ -0,0 +1 @@ +EndingType | @wailsio/runtime
EndingType: "native" | "transparent"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EventListenerOrEventListenerObject.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EventListenerOrEventListenerObject.html new file mode 100644 index 000000000..c0e2bfa6d --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.EventListenerOrEventListenerObject.html @@ -0,0 +1 @@ +EventListenerOrEventListenerObject | @wailsio/runtime

Type Alias EventListenerOrEventListenerObject

EventListenerOrEventListenerObject: EventListener | EventListenerObject
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Partial.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Partial.html new file mode 100644 index 000000000..c2c89e799 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Partial.html @@ -0,0 +1,2 @@ +Partial | @wailsio/runtime
Partial: { [P in keyof T]?: T[P] }

Make all properties in T optional

+

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.PromiseSettledResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.PromiseSettledResult.html new file mode 100644 index 000000000..c71a7894b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.PromiseSettledResult.html @@ -0,0 +1 @@ +PromiseSettledResult | @wailsio/runtime

Type Alias PromiseSettledResult<T>

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamController.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamController.html new file mode 100644 index 000000000..03ff250f6 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamController.html @@ -0,0 +1 @@ +ReadableStreamController | @wailsio/runtime

Type Alias ReadableStreamController<T>

ReadableStreamController:
    | ReadableStreamDefaultController<T>
    | ReadableByteStreamController

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReadResult.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReadResult.html new file mode 100644 index 000000000..300a4a370 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReadResult.html @@ -0,0 +1 @@ +ReadableStreamReadResult | @wailsio/runtime

Type Alias ReadableStreamReadResult<T>

ReadableStreamReadResult:
    | ReadableStreamReadValueResult<T>
    | ReadableStreamReadDoneResult<T>

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReader.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReader.html new file mode 100644 index 000000000..a6eb2921a --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadableStreamReader.html @@ -0,0 +1 @@ +ReadableStreamReader | @wailsio/runtime

Type Alias ReadableStreamReader<T>

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Readonly.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Readonly.html new file mode 100644 index 000000000..3f66bd1ba --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Readonly.html @@ -0,0 +1,2 @@ +Readonly | @wailsio/runtime
Readonly: { readonly [P in keyof T]: T[P] }

Make all properties in T readonly

+

Type Parameters

  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadyState.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadyState.html new file mode 100644 index 000000000..cab35e873 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.ReadyState.html @@ -0,0 +1 @@ +ReadyState | @wailsio/runtime
ReadyState: "closed" | "ended" | "open"
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Record.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Record.html new file mode 100644 index 000000000..8930f14b9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/types/_internal_.Record.html @@ -0,0 +1,2 @@ +Record | @wailsio/runtime

Type Alias Record<K, T>

Record: { [P in K]: T }

Construct a type with a set of properties K of type T

+

Type Parameters

  • K extends keyof any
  • T
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Events.Types.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Events.Types.html index 9ad714080..4060af3dc 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Events.Types.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Events.Types.html @@ -1 +1 @@ -Types | @wailsio/runtime

Variable TypesConst

Types: {
    Common: {
        ApplicationOpenedWithFile: string;
        ApplicationStarted: string;
        ThemeChanged: string;
        WindowClosing: string;
        WindowDPIChanged: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowFilesDropped: string;
        WindowFocus: string;
        WindowFullscreen: string;
        WindowHide: string;
        WindowLostFocus: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowRestore: string;
        WindowRuntimeReady: string;
        WindowShow: string;
        WindowUnFullscreen: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowZoom: string;
        WindowZoomIn: string;
        WindowZoomOut: string;
        WindowZoomReset: string;
    };
    Linux: {
        ApplicationStartup: string;
        SystemThemeChanged: string;
        WindowDeleteEvent: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowFocusIn: string;
        WindowFocusOut: string;
        WindowLoadChanged: string;
    };
    Mac: {
        ApplicationDidBecomeActive: string;
        ApplicationDidChangeBackingProperties: string;
        ApplicationDidChangeEffectiveAppearance: string;
        ApplicationDidChangeIcon: string;
        ApplicationDidChangeOcclusionState: string;
        ApplicationDidChangeScreenParameters: string;
        ApplicationDidChangeStatusBarFrame: string;
        ApplicationDidChangeStatusBarOrientation: string;
        ApplicationDidChangeTheme: string;
        ApplicationDidFinishLaunching: string;
        ApplicationDidHide: string;
        ApplicationDidResignActive: string;
        ApplicationDidUnhide: string;
        ApplicationDidUpdate: string;
        ApplicationShouldHandleReopen: string;
        ApplicationWillBecomeActive: string;
        ApplicationWillFinishLaunching: string;
        ApplicationWillHide: string;
        ApplicationWillResignActive: string;
        ApplicationWillTerminate: string;
        ApplicationWillUnhide: string;
        ApplicationWillUpdate: string;
        MenuDidAddItem: string;
        MenuDidBeginTracking: string;
        MenuDidClose: string;
        MenuDidDisplayItem: string;
        MenuDidEndTracking: string;
        MenuDidHighlightItem: string;
        MenuDidOpen: string;
        MenuDidPopUp: string;
        MenuDidRemoveItem: string;
        MenuDidSendAction: string;
        MenuDidSendActionToItem: string;
        MenuDidUpdate: string;
        MenuWillAddItem: string;
        MenuWillBeginTracking: string;
        MenuWillDisplayItem: string;
        MenuWillEndTracking: string;
        MenuWillHighlightItem: string;
        MenuWillOpen: string;
        MenuWillPopUp: string;
        MenuWillRemoveItem: string;
        MenuWillSendAction: string;
        MenuWillSendActionToItem: string;
        MenuWillUpdate: string;
        WebViewDidCommitNavigation: string;
        WebViewDidFinishNavigation: string;
        WebViewDidReceiveServerRedirectForProvisionalNavigation: string;
        WebViewDidStartProvisionalNavigation: string;
        WindowDidBecomeKey: string;
        WindowDidBecomeMain: string;
        WindowDidBeginSheet: string;
        WindowDidChangeAlpha: string;
        WindowDidChangeBackingLocation: string;
        WindowDidChangeBackingProperties: string;
        WindowDidChangeCollectionBehavior: string;
        WindowDidChangeEffectiveAppearance: string;
        WindowDidChangeOcclusionState: string;
        WindowDidChangeOrderingMode: string;
        WindowDidChangeScreen: string;
        WindowDidChangeScreenParameters: string;
        WindowDidChangeScreenProfile: string;
        WindowDidChangeScreenSpace: string;
        WindowDidChangeScreenSpaceProperties: string;
        WindowDidChangeSharingType: string;
        WindowDidChangeSpace: string;
        WindowDidChangeSpaceOrderingMode: string;
        WindowDidChangeTitle: string;
        WindowDidChangeToolbar: string;
        WindowDidDeminiaturize: string;
        WindowDidEndSheet: string;
        WindowDidEnterFullScreen: string;
        WindowDidEnterVersionBrowser: string;
        WindowDidExitFullScreen: string;
        WindowDidExitVersionBrowser: string;
        WindowDidExpose: string;
        WindowDidFocus: string;
        WindowDidMiniaturize: string;
        WindowDidMove: string;
        WindowDidOrderOffScreen: string;
        WindowDidOrderOnScreen: string;
        WindowDidResignKey: string;
        WindowDidResignMain: string;
        WindowDidResize: string;
        WindowDidUpdate: string;
        WindowDidUpdateAlpha: string;
        WindowDidUpdateCollectionBehavior: string;
        WindowDidUpdateCollectionProperties: string;
        WindowDidUpdateShadow: string;
        WindowDidUpdateTitle: string;
        WindowDidUpdateToolbar: string;
        WindowDidZoom: string;
        WindowFileDraggingEntered: string;
        WindowFileDraggingExited: string;
        WindowFileDraggingPerformed: string;
        WindowHide: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowShouldClose: string;
        WindowShow: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowWillBecomeKey: string;
        WindowWillBecomeMain: string;
        WindowWillBeginSheet: string;
        WindowWillChangeOrderingMode: string;
        WindowWillClose: string;
        WindowWillDeminiaturize: string;
        WindowWillEnterFullScreen: string;
        WindowWillEnterVersionBrowser: string;
        WindowWillExitFullScreen: string;
        WindowWillExitVersionBrowser: string;
        WindowWillFocus: string;
        WindowWillMiniaturize: string;
        WindowWillMove: string;
        WindowWillOrderOffScreen: string;
        WindowWillOrderOnScreen: string;
        WindowWillResignMain: string;
        WindowWillResize: string;
        WindowWillUnfocus: string;
        WindowWillUpdate: string;
        WindowWillUpdateAlpha: string;
        WindowWillUpdateCollectionBehavior: string;
        WindowWillUpdateCollectionProperties: string;
        WindowWillUpdateShadow: string;
        WindowWillUpdateTitle: string;
        WindowWillUpdateToolbar: string;
        WindowWillUpdateVisibility: string;
        WindowWillUseStandardFrame: string;
        WindowZoomIn: string;
        WindowZoomOut: string;
        WindowZoomReset: string;
    };
    Windows: {
        APMPowerSettingChange: string;
        APMPowerStatusChange: string;
        APMResumeAutomatic: string;
        APMResumeSuspend: string;
        APMSuspend: string;
        ApplicationStarted: string;
        SystemThemeChanged: string;
        WebViewNavigationCompleted: string;
        WindowActive: string;
        WindowBackgroundErase: string;
        WindowClickActive: string;
        WindowClosing: string;
        WindowDPIChanged: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowDragDrop: string;
        WindowDragEnter: string;
        WindowDragLeave: string;
        WindowDragOver: string;
        WindowEndMove: string;
        WindowEndResize: string;
        WindowFullscreen: string;
        WindowHide: string;
        WindowInactive: string;
        WindowKeyDown: string;
        WindowKeyUp: string;
        WindowKillFocus: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowNonClientHit: string;
        WindowNonClientMouseDown: string;
        WindowNonClientMouseLeave: string;
        WindowNonClientMouseMove: string;
        WindowNonClientMouseUp: string;
        WindowPaint: string;
        WindowRestore: string;
        WindowSetFocus: string;
        WindowShow: string;
        WindowStartMove: string;
        WindowStartResize: string;
        WindowUnFullscreen: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowZOrderChanged: string;
    };
} = EventTypes

Type declaration

  • Common: {
        ApplicationOpenedWithFile: string;
        ApplicationStarted: string;
        ThemeChanged: string;
        WindowClosing: string;
        WindowDPIChanged: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowFilesDropped: string;
        WindowFocus: string;
        WindowFullscreen: string;
        WindowHide: string;
        WindowLostFocus: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowRestore: string;
        WindowRuntimeReady: string;
        WindowShow: string;
        WindowUnFullscreen: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowZoom: string;
        WindowZoomIn: string;
        WindowZoomOut: string;
        WindowZoomReset: string;
    }
    • ApplicationOpenedWithFile: string
    • ApplicationStarted: string
    • ThemeChanged: string
    • WindowClosing: string
    • WindowDPIChanged: string
    • WindowDidMove: string
    • WindowDidResize: string
    • WindowFilesDropped: string
    • WindowFocus: string
    • WindowFullscreen: string
    • WindowHide: string
    • WindowLostFocus: string
    • WindowMaximise: string
    • WindowMinimise: string
    • WindowRestore: string
    • WindowRuntimeReady: string
    • WindowShow: string
    • WindowUnFullscreen: string
    • WindowUnMaximise: string
    • WindowUnMinimise: string
    • WindowZoom: string
    • WindowZoomIn: string
    • WindowZoomOut: string
    • WindowZoomReset: string
  • Linux: {
        ApplicationStartup: string;
        SystemThemeChanged: string;
        WindowDeleteEvent: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowFocusIn: string;
        WindowFocusOut: string;
        WindowLoadChanged: string;
    }
    • ApplicationStartup: string
    • SystemThemeChanged: string
    • WindowDeleteEvent: string
    • WindowDidMove: string
    • WindowDidResize: string
    • WindowFocusIn: string
    • WindowFocusOut: string
    • WindowLoadChanged: string
  • Mac: {
        ApplicationDidBecomeActive: string;
        ApplicationDidChangeBackingProperties: string;
        ApplicationDidChangeEffectiveAppearance: string;
        ApplicationDidChangeIcon: string;
        ApplicationDidChangeOcclusionState: string;
        ApplicationDidChangeScreenParameters: string;
        ApplicationDidChangeStatusBarFrame: string;
        ApplicationDidChangeStatusBarOrientation: string;
        ApplicationDidChangeTheme: string;
        ApplicationDidFinishLaunching: string;
        ApplicationDidHide: string;
        ApplicationDidResignActive: string;
        ApplicationDidUnhide: string;
        ApplicationDidUpdate: string;
        ApplicationShouldHandleReopen: string;
        ApplicationWillBecomeActive: string;
        ApplicationWillFinishLaunching: string;
        ApplicationWillHide: string;
        ApplicationWillResignActive: string;
        ApplicationWillTerminate: string;
        ApplicationWillUnhide: string;
        ApplicationWillUpdate: string;
        MenuDidAddItem: string;
        MenuDidBeginTracking: string;
        MenuDidClose: string;
        MenuDidDisplayItem: string;
        MenuDidEndTracking: string;
        MenuDidHighlightItem: string;
        MenuDidOpen: string;
        MenuDidPopUp: string;
        MenuDidRemoveItem: string;
        MenuDidSendAction: string;
        MenuDidSendActionToItem: string;
        MenuDidUpdate: string;
        MenuWillAddItem: string;
        MenuWillBeginTracking: string;
        MenuWillDisplayItem: string;
        MenuWillEndTracking: string;
        MenuWillHighlightItem: string;
        MenuWillOpen: string;
        MenuWillPopUp: string;
        MenuWillRemoveItem: string;
        MenuWillSendAction: string;
        MenuWillSendActionToItem: string;
        MenuWillUpdate: string;
        WebViewDidCommitNavigation: string;
        WebViewDidFinishNavigation: string;
        WebViewDidReceiveServerRedirectForProvisionalNavigation: string;
        WebViewDidStartProvisionalNavigation: string;
        WindowDidBecomeKey: string;
        WindowDidBecomeMain: string;
        WindowDidBeginSheet: string;
        WindowDidChangeAlpha: string;
        WindowDidChangeBackingLocation: string;
        WindowDidChangeBackingProperties: string;
        WindowDidChangeCollectionBehavior: string;
        WindowDidChangeEffectiveAppearance: string;
        WindowDidChangeOcclusionState: string;
        WindowDidChangeOrderingMode: string;
        WindowDidChangeScreen: string;
        WindowDidChangeScreenParameters: string;
        WindowDidChangeScreenProfile: string;
        WindowDidChangeScreenSpace: string;
        WindowDidChangeScreenSpaceProperties: string;
        WindowDidChangeSharingType: string;
        WindowDidChangeSpace: string;
        WindowDidChangeSpaceOrderingMode: string;
        WindowDidChangeTitle: string;
        WindowDidChangeToolbar: string;
        WindowDidDeminiaturize: string;
        WindowDidEndSheet: string;
        WindowDidEnterFullScreen: string;
        WindowDidEnterVersionBrowser: string;
        WindowDidExitFullScreen: string;
        WindowDidExitVersionBrowser: string;
        WindowDidExpose: string;
        WindowDidFocus: string;
        WindowDidMiniaturize: string;
        WindowDidMove: string;
        WindowDidOrderOffScreen: string;
        WindowDidOrderOnScreen: string;
        WindowDidResignKey: string;
        WindowDidResignMain: string;
        WindowDidResize: string;
        WindowDidUpdate: string;
        WindowDidUpdateAlpha: string;
        WindowDidUpdateCollectionBehavior: string;
        WindowDidUpdateCollectionProperties: string;
        WindowDidUpdateShadow: string;
        WindowDidUpdateTitle: string;
        WindowDidUpdateToolbar: string;
        WindowDidZoom: string;
        WindowFileDraggingEntered: string;
        WindowFileDraggingExited: string;
        WindowFileDraggingPerformed: string;
        WindowHide: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowShouldClose: string;
        WindowShow: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowWillBecomeKey: string;
        WindowWillBecomeMain: string;
        WindowWillBeginSheet: string;
        WindowWillChangeOrderingMode: string;
        WindowWillClose: string;
        WindowWillDeminiaturize: string;
        WindowWillEnterFullScreen: string;
        WindowWillEnterVersionBrowser: string;
        WindowWillExitFullScreen: string;
        WindowWillExitVersionBrowser: string;
        WindowWillFocus: string;
        WindowWillMiniaturize: string;
        WindowWillMove: string;
        WindowWillOrderOffScreen: string;
        WindowWillOrderOnScreen: string;
        WindowWillResignMain: string;
        WindowWillResize: string;
        WindowWillUnfocus: string;
        WindowWillUpdate: string;
        WindowWillUpdateAlpha: string;
        WindowWillUpdateCollectionBehavior: string;
        WindowWillUpdateCollectionProperties: string;
        WindowWillUpdateShadow: string;
        WindowWillUpdateTitle: string;
        WindowWillUpdateToolbar: string;
        WindowWillUpdateVisibility: string;
        WindowWillUseStandardFrame: string;
        WindowZoomIn: string;
        WindowZoomOut: string;
        WindowZoomReset: string;
    }
    • ApplicationDidBecomeActive: string
    • ApplicationDidChangeBackingProperties: string
    • ApplicationDidChangeEffectiveAppearance: string
    • ApplicationDidChangeIcon: string
    • ApplicationDidChangeOcclusionState: string
    • ApplicationDidChangeScreenParameters: string
    • ApplicationDidChangeStatusBarFrame: string
    • ApplicationDidChangeStatusBarOrientation: string
    • ApplicationDidChangeTheme: string
    • ApplicationDidFinishLaunching: string
    • ApplicationDidHide: string
    • ApplicationDidResignActive: string
    • ApplicationDidUnhide: string
    • ApplicationDidUpdate: string
    • ApplicationShouldHandleReopen: string
    • ApplicationWillBecomeActive: string
    • ApplicationWillFinishLaunching: string
    • ApplicationWillHide: string
    • ApplicationWillResignActive: string
    • ApplicationWillTerminate: string
    • ApplicationWillUnhide: string
    • ApplicationWillUpdate: string
    • MenuDidAddItem: string
    • MenuDidBeginTracking: string
    • MenuDidClose: string
    • MenuDidDisplayItem: string
    • MenuDidEndTracking: string
    • MenuDidHighlightItem: string
    • MenuDidOpen: string
    • MenuDidPopUp: string
    • MenuDidRemoveItem: string
    • MenuDidSendAction: string
    • MenuDidSendActionToItem: string
    • MenuDidUpdate: string
    • MenuWillAddItem: string
    • MenuWillBeginTracking: string
    • MenuWillDisplayItem: string
    • MenuWillEndTracking: string
    • MenuWillHighlightItem: string
    • MenuWillOpen: string
    • MenuWillPopUp: string
    • MenuWillRemoveItem: string
    • MenuWillSendAction: string
    • MenuWillSendActionToItem: string
    • MenuWillUpdate: string
    • WebViewDidCommitNavigation: string
    • WebViewDidFinishNavigation: string
    • WebViewDidReceiveServerRedirectForProvisionalNavigation: string
    • WebViewDidStartProvisionalNavigation: string
    • WindowDidBecomeKey: string
    • WindowDidBecomeMain: string
    • WindowDidBeginSheet: string
    • WindowDidChangeAlpha: string
    • WindowDidChangeBackingLocation: string
    • WindowDidChangeBackingProperties: string
    • WindowDidChangeCollectionBehavior: string
    • WindowDidChangeEffectiveAppearance: string
    • WindowDidChangeOcclusionState: string
    • WindowDidChangeOrderingMode: string
    • WindowDidChangeScreen: string
    • WindowDidChangeScreenParameters: string
    • WindowDidChangeScreenProfile: string
    • WindowDidChangeScreenSpace: string
    • WindowDidChangeScreenSpaceProperties: string
    • WindowDidChangeSharingType: string
    • WindowDidChangeSpace: string
    • WindowDidChangeSpaceOrderingMode: string
    • WindowDidChangeTitle: string
    • WindowDidChangeToolbar: string
    • WindowDidDeminiaturize: string
    • WindowDidEndSheet: string
    • WindowDidEnterFullScreen: string
    • WindowDidEnterVersionBrowser: string
    • WindowDidExitFullScreen: string
    • WindowDidExitVersionBrowser: string
    • WindowDidExpose: string
    • WindowDidFocus: string
    • WindowDidMiniaturize: string
    • WindowDidMove: string
    • WindowDidOrderOffScreen: string
    • WindowDidOrderOnScreen: string
    • WindowDidResignKey: string
    • WindowDidResignMain: string
    • WindowDidResize: string
    • WindowDidUpdate: string
    • WindowDidUpdateAlpha: string
    • WindowDidUpdateCollectionBehavior: string
    • WindowDidUpdateCollectionProperties: string
    • WindowDidUpdateShadow: string
    • WindowDidUpdateTitle: string
    • WindowDidUpdateToolbar: string
    • WindowDidZoom: string
    • WindowFileDraggingEntered: string
    • WindowFileDraggingExited: string
    • WindowFileDraggingPerformed: string
    • WindowHide: string
    • WindowMaximise: string
    • WindowMinimise: string
    • WindowShouldClose: string
    • WindowShow: string
    • WindowUnMaximise: string
    • WindowUnMinimise: string
    • WindowWillBecomeKey: string
    • WindowWillBecomeMain: string
    • WindowWillBeginSheet: string
    • WindowWillChangeOrderingMode: string
    • WindowWillClose: string
    • WindowWillDeminiaturize: string
    • WindowWillEnterFullScreen: string
    • WindowWillEnterVersionBrowser: string
    • WindowWillExitFullScreen: string
    • WindowWillExitVersionBrowser: string
    • WindowWillFocus: string
    • WindowWillMiniaturize: string
    • WindowWillMove: string
    • WindowWillOrderOffScreen: string
    • WindowWillOrderOnScreen: string
    • WindowWillResignMain: string
    • WindowWillResize: string
    • WindowWillUnfocus: string
    • WindowWillUpdate: string
    • WindowWillUpdateAlpha: string
    • WindowWillUpdateCollectionBehavior: string
    • WindowWillUpdateCollectionProperties: string
    • WindowWillUpdateShadow: string
    • WindowWillUpdateTitle: string
    • WindowWillUpdateToolbar: string
    • WindowWillUpdateVisibility: string
    • WindowWillUseStandardFrame: string
    • WindowZoomIn: string
    • WindowZoomOut: string
    • WindowZoomReset: string
  • Windows: {
        APMPowerSettingChange: string;
        APMPowerStatusChange: string;
        APMResumeAutomatic: string;
        APMResumeSuspend: string;
        APMSuspend: string;
        ApplicationStarted: string;
        SystemThemeChanged: string;
        WebViewNavigationCompleted: string;
        WindowActive: string;
        WindowBackgroundErase: string;
        WindowClickActive: string;
        WindowClosing: string;
        WindowDPIChanged: string;
        WindowDidMove: string;
        WindowDidResize: string;
        WindowDragDrop: string;
        WindowDragEnter: string;
        WindowDragLeave: string;
        WindowDragOver: string;
        WindowEndMove: string;
        WindowEndResize: string;
        WindowFullscreen: string;
        WindowHide: string;
        WindowInactive: string;
        WindowKeyDown: string;
        WindowKeyUp: string;
        WindowKillFocus: string;
        WindowMaximise: string;
        WindowMinimise: string;
        WindowNonClientHit: string;
        WindowNonClientMouseDown: string;
        WindowNonClientMouseLeave: string;
        WindowNonClientMouseMove: string;
        WindowNonClientMouseUp: string;
        WindowPaint: string;
        WindowRestore: string;
        WindowSetFocus: string;
        WindowShow: string;
        WindowStartMove: string;
        WindowStartResize: string;
        WindowUnFullscreen: string;
        WindowUnMaximise: string;
        WindowUnMinimise: string;
        WindowZOrderChanged: string;
    }
    • APMPowerSettingChange: string
    • APMPowerStatusChange: string
    • APMResumeAutomatic: string
    • APMResumeSuspend: string
    • APMSuspend: string
    • ApplicationStarted: string
    • SystemThemeChanged: string
    • WebViewNavigationCompleted: string
    • WindowActive: string
    • WindowBackgroundErase: string
    • WindowClickActive: string
    • WindowClosing: string
    • WindowDPIChanged: string
    • WindowDidMove: string
    • WindowDidResize: string
    • WindowDragDrop: string
    • WindowDragEnter: string
    • WindowDragLeave: string
    • WindowDragOver: string
    • WindowEndMove: string
    • WindowEndResize: string
    • WindowFullscreen: string
    • WindowHide: string
    • WindowInactive: string
    • WindowKeyDown: string
    • WindowKeyUp: string
    • WindowKillFocus: string
    • WindowMaximise: string
    • WindowMinimise: string
    • WindowNonClientHit: string
    • WindowNonClientMouseDown: string
    • WindowNonClientMouseLeave: string
    • WindowNonClientMouseMove: string
    • WindowNonClientMouseUp: string
    • WindowPaint: string
    • WindowRestore: string
    • WindowSetFocus: string
    • WindowShow: string
    • WindowStartMove: string
    • WindowStartResize: string
    • WindowUnFullscreen: string
    • WindowUnMaximise: string
    • WindowUnMinimise: string
    • WindowZOrderChanged: string

Generated using TypeDoc

\ No newline at end of file +Types | @wailsio/runtime

Variable TypesConst

Types: Readonly<
    {
        Common: Readonly<
            {
                ApplicationOpenedWithFile: "common:ApplicationOpenedWithFile";
                ApplicationStarted: "common:ApplicationStarted";
                ThemeChanged: "common:ThemeChanged";
                WindowClosing: "common:WindowClosing";
                WindowDidMove: "common:WindowDidMove";
                WindowDidResize: "common:WindowDidResize";
                WindowDPIChanged: "common:WindowDPIChanged";
                WindowFilesDropped: "common:WindowFilesDropped";
                WindowFocus: "common:WindowFocus";
                WindowFullscreen: "common:WindowFullscreen";
                WindowHide: "common:WindowHide";
                WindowLostFocus: "common:WindowLostFocus";
                WindowMaximise: "common:WindowMaximise";
                WindowMinimise: "common:WindowMinimise";
                WindowRestore: "common:WindowRestore";
                WindowRuntimeReady: "common:WindowRuntimeReady";
                WindowShow: "common:WindowShow";
                WindowUnFullscreen: "common:WindowUnFullscreen";
                WindowUnMaximise: "common:WindowUnMaximise";
                WindowUnMinimise: "common:WindowUnMinimise";
                WindowZoom: "common:WindowZoom";
                WindowZoomIn: "common:WindowZoomIn";
                WindowZoomOut: "common:WindowZoomOut";
                WindowZoomReset: "common:WindowZoomReset";
            },
        >;
        Linux: Readonly<
            {
                ApplicationStartup: "linux:ApplicationStartup";
                SystemThemeChanged: "linux:SystemThemeChanged";
                WindowDeleteEvent: "linux:WindowDeleteEvent";
                WindowDidMove: "linux:WindowDidMove";
                WindowDidResize: "linux:WindowDidResize";
                WindowFocusIn: "linux:WindowFocusIn";
                WindowFocusOut: "linux:WindowFocusOut";
                WindowLoadChanged: "linux:WindowLoadChanged";
            },
        >;
        Mac: Readonly<
            {
                ApplicationDidBecomeActive: "mac:ApplicationDidBecomeActive";
                ApplicationDidChangeBackingProperties: "mac:ApplicationDidChangeBackingProperties";
                ApplicationDidChangeEffectiveAppearance: "mac:ApplicationDidChangeEffectiveAppearance";
                ApplicationDidChangeIcon: "mac:ApplicationDidChangeIcon";
                ApplicationDidChangeOcclusionState: "mac:ApplicationDidChangeOcclusionState";
                ApplicationDidChangeScreenParameters: "mac:ApplicationDidChangeScreenParameters";
                ApplicationDidChangeStatusBarFrame: "mac:ApplicationDidChangeStatusBarFrame";
                ApplicationDidChangeStatusBarOrientation: "mac:ApplicationDidChangeStatusBarOrientation";
                ApplicationDidChangeTheme: "mac:ApplicationDidChangeTheme";
                ApplicationDidFinishLaunching: "mac:ApplicationDidFinishLaunching";
                ApplicationDidHide: "mac:ApplicationDidHide";
                ApplicationDidResignActive: "mac:ApplicationDidResignActive";
                ApplicationDidUnhide: "mac:ApplicationDidUnhide";
                ApplicationDidUpdate: "mac:ApplicationDidUpdate";
                ApplicationShouldHandleReopen: "mac:ApplicationShouldHandleReopen";
                ApplicationWillBecomeActive: "mac:ApplicationWillBecomeActive";
                ApplicationWillFinishLaunching: "mac:ApplicationWillFinishLaunching";
                ApplicationWillHide: "mac:ApplicationWillHide";
                ApplicationWillResignActive: "mac:ApplicationWillResignActive";
                ApplicationWillTerminate: "mac:ApplicationWillTerminate";
                ApplicationWillUnhide: "mac:ApplicationWillUnhide";
                ApplicationWillUpdate: "mac:ApplicationWillUpdate";
                MenuDidAddItem: "mac:MenuDidAddItem";
                MenuDidBeginTracking: "mac:MenuDidBeginTracking";
                MenuDidClose: "mac:MenuDidClose";
                MenuDidDisplayItem: "mac:MenuDidDisplayItem";
                MenuDidEndTracking: "mac:MenuDidEndTracking";
                MenuDidHighlightItem: "mac:MenuDidHighlightItem";
                MenuDidOpen: "mac:MenuDidOpen";
                MenuDidPopUp: "mac:MenuDidPopUp";
                MenuDidRemoveItem: "mac:MenuDidRemoveItem";
                MenuDidSendAction: "mac:MenuDidSendAction";
                MenuDidSendActionToItem: "mac:MenuDidSendActionToItem";
                MenuDidUpdate: "mac:MenuDidUpdate";
                MenuWillAddItem: "mac:MenuWillAddItem";
                MenuWillBeginTracking: "mac:MenuWillBeginTracking";
                MenuWillDisplayItem: "mac:MenuWillDisplayItem";
                MenuWillEndTracking: "mac:MenuWillEndTracking";
                MenuWillHighlightItem: "mac:MenuWillHighlightItem";
                MenuWillOpen: "mac:MenuWillOpen";
                MenuWillPopUp: "mac:MenuWillPopUp";
                MenuWillRemoveItem: "mac:MenuWillRemoveItem";
                MenuWillSendAction: "mac:MenuWillSendAction";
                MenuWillSendActionToItem: "mac:MenuWillSendActionToItem";
                MenuWillUpdate: "mac:MenuWillUpdate";
                WebViewDidCommitNavigation: "mac:WebViewDidCommitNavigation";
                WebViewDidFinishNavigation: "mac:WebViewDidFinishNavigation";
                WebViewDidReceiveServerRedirectForProvisionalNavigation: "mac:WebViewDidReceiveServerRedirectForProvisionalNavigation";
                WebViewDidStartProvisionalNavigation: "mac:WebViewDidStartProvisionalNavigation";
                WindowDidBecomeKey: "mac:WindowDidBecomeKey";
                WindowDidBecomeMain: "mac:WindowDidBecomeMain";
                WindowDidBeginSheet: "mac:WindowDidBeginSheet";
                WindowDidChangeAlpha: "mac:WindowDidChangeAlpha";
                WindowDidChangeBackingLocation: "mac:WindowDidChangeBackingLocation";
                WindowDidChangeBackingProperties: "mac:WindowDidChangeBackingProperties";
                WindowDidChangeCollectionBehavior: "mac:WindowDidChangeCollectionBehavior";
                WindowDidChangeEffectiveAppearance: "mac:WindowDidChangeEffectiveAppearance";
                WindowDidChangeOcclusionState: "mac:WindowDidChangeOcclusionState";
                WindowDidChangeOrderingMode: "mac:WindowDidChangeOrderingMode";
                WindowDidChangeScreen: "mac:WindowDidChangeScreen";
                WindowDidChangeScreenParameters: "mac:WindowDidChangeScreenParameters";
                WindowDidChangeScreenProfile: "mac:WindowDidChangeScreenProfile";
                WindowDidChangeScreenSpace: "mac:WindowDidChangeScreenSpace";
                WindowDidChangeScreenSpaceProperties: "mac:WindowDidChangeScreenSpaceProperties";
                WindowDidChangeSharingType: "mac:WindowDidChangeSharingType";
                WindowDidChangeSpace: "mac:WindowDidChangeSpace";
                WindowDidChangeSpaceOrderingMode: "mac:WindowDidChangeSpaceOrderingMode";
                WindowDidChangeTitle: "mac:WindowDidChangeTitle";
                WindowDidChangeToolbar: "mac:WindowDidChangeToolbar";
                WindowDidDeminiaturize: "mac:WindowDidDeminiaturize";
                WindowDidEndSheet: "mac:WindowDidEndSheet";
                WindowDidEnterFullScreen: "mac:WindowDidEnterFullScreen";
                WindowDidEnterVersionBrowser: "mac:WindowDidEnterVersionBrowser";
                WindowDidExitFullScreen: "mac:WindowDidExitFullScreen";
                WindowDidExitVersionBrowser: "mac:WindowDidExitVersionBrowser";
                WindowDidExpose: "mac:WindowDidExpose";
                WindowDidFocus: "mac:WindowDidFocus";
                WindowDidMiniaturize: "mac:WindowDidMiniaturize";
                WindowDidMove: "mac:WindowDidMove";
                WindowDidOrderOffScreen: "mac:WindowDidOrderOffScreen";
                WindowDidOrderOnScreen: "mac:WindowDidOrderOnScreen";
                WindowDidResignKey: "mac:WindowDidResignKey";
                WindowDidResignMain: "mac:WindowDidResignMain";
                WindowDidResize: "mac:WindowDidResize";
                WindowDidUpdate: "mac:WindowDidUpdate";
                WindowDidUpdateAlpha: "mac:WindowDidUpdateAlpha";
                WindowDidUpdateCollectionBehavior: "mac:WindowDidUpdateCollectionBehavior";
                WindowDidUpdateCollectionProperties: "mac:WindowDidUpdateCollectionProperties";
                WindowDidUpdateShadow: "mac:WindowDidUpdateShadow";
                WindowDidUpdateTitle: "mac:WindowDidUpdateTitle";
                WindowDidUpdateToolbar: "mac:WindowDidUpdateToolbar";
                WindowDidZoom: "mac:WindowDidZoom";
                WindowFileDraggingEntered: "mac:WindowFileDraggingEntered";
                WindowFileDraggingExited: "mac:WindowFileDraggingExited";
                WindowFileDraggingPerformed: "mac:WindowFileDraggingPerformed";
                WindowHide: "mac:WindowHide";
                WindowMaximise: "mac:WindowMaximise";
                WindowMinimise: "mac:WindowMinimise";
                WindowShouldClose: "mac:WindowShouldClose";
                WindowShow: "mac:WindowShow";
                WindowUnMaximise: "mac:WindowUnMaximise";
                WindowUnMinimise: "mac:WindowUnMinimise";
                WindowWillBecomeKey: "mac:WindowWillBecomeKey";
                WindowWillBecomeMain: "mac:WindowWillBecomeMain";
                WindowWillBeginSheet: "mac:WindowWillBeginSheet";
                WindowWillChangeOrderingMode: "mac:WindowWillChangeOrderingMode";
                WindowWillClose: "mac:WindowWillClose";
                WindowWillDeminiaturize: "mac:WindowWillDeminiaturize";
                WindowWillEnterFullScreen: "mac:WindowWillEnterFullScreen";
                WindowWillEnterVersionBrowser: "mac:WindowWillEnterVersionBrowser";
                WindowWillExitFullScreen: "mac:WindowWillExitFullScreen";
                WindowWillExitVersionBrowser: "mac:WindowWillExitVersionBrowser";
                WindowWillFocus: "mac:WindowWillFocus";
                WindowWillMiniaturize: "mac:WindowWillMiniaturize";
                WindowWillMove: "mac:WindowWillMove";
                WindowWillOrderOffScreen: "mac:WindowWillOrderOffScreen";
                WindowWillOrderOnScreen: "mac:WindowWillOrderOnScreen";
                WindowWillResignMain: "mac:WindowWillResignMain";
                WindowWillResize: "mac:WindowWillResize";
                WindowWillUnfocus: "mac:WindowWillUnfocus";
                WindowWillUpdate: "mac:WindowWillUpdate";
                WindowWillUpdateAlpha: "mac:WindowWillUpdateAlpha";
                WindowWillUpdateCollectionBehavior: "mac:WindowWillUpdateCollectionBehavior";
                WindowWillUpdateCollectionProperties: "mac:WindowWillUpdateCollectionProperties";
                WindowWillUpdateShadow: "mac:WindowWillUpdateShadow";
                WindowWillUpdateTitle: "mac:WindowWillUpdateTitle";
                WindowWillUpdateToolbar: "mac:WindowWillUpdateToolbar";
                WindowWillUpdateVisibility: "mac:WindowWillUpdateVisibility";
                WindowWillUseStandardFrame: "mac:WindowWillUseStandardFrame";
                WindowZoomIn: "mac:WindowZoomIn";
                WindowZoomOut: "mac:WindowZoomOut";
                WindowZoomReset: "mac:WindowZoomReset";
            },
        >;
        Windows: Readonly<
            {
                APMPowerSettingChange: "windows:APMPowerSettingChange";
                APMPowerStatusChange: "windows:APMPowerStatusChange";
                APMResumeAutomatic: "windows:APMResumeAutomatic";
                APMResumeSuspend: "windows:APMResumeSuspend";
                APMSuspend: "windows:APMSuspend";
                ApplicationStarted: "windows:ApplicationStarted";
                SystemThemeChanged: "windows:SystemThemeChanged";
                WebViewNavigationCompleted: "windows:WebViewNavigationCompleted";
                WindowActive: "windows:WindowActive";
                WindowBackgroundErase: "windows:WindowBackgroundErase";
                WindowClickActive: "windows:WindowClickActive";
                WindowClosing: "windows:WindowClosing";
                WindowDidMove: "windows:WindowDidMove";
                WindowDidResize: "windows:WindowDidResize";
                WindowDPIChanged: "windows:WindowDPIChanged";
                WindowDragDrop: "windows:WindowDragDrop";
                WindowDragEnter: "windows:WindowDragEnter";
                WindowDragLeave: "windows:WindowDragLeave";
                WindowDragOver: "windows:WindowDragOver";
                WindowEndMove: "windows:WindowEndMove";
                WindowEndResize: "windows:WindowEndResize";
                WindowFullscreen: "windows:WindowFullscreen";
                WindowHide: "windows:WindowHide";
                WindowInactive: "windows:WindowInactive";
                WindowKeyDown: "windows:WindowKeyDown";
                WindowKeyUp: "windows:WindowKeyUp";
                WindowKillFocus: "windows:WindowKillFocus";
                WindowMaximise: "windows:WindowMaximise";
                WindowMinimise: "windows:WindowMinimise";
                WindowNonClientHit: "windows:WindowNonClientHit";
                WindowNonClientMouseDown: "windows:WindowNonClientMouseDown";
                WindowNonClientMouseLeave: "windows:WindowNonClientMouseLeave";
                WindowNonClientMouseMove: "windows:WindowNonClientMouseMove";
                WindowNonClientMouseUp: "windows:WindowNonClientMouseUp";
                WindowPaint: "windows:WindowPaint";
                WindowRestore: "windows:WindowRestore";
                WindowSetFocus: "windows:WindowSetFocus";
                WindowShow: "windows:WindowShow";
                WindowStartMove: "windows:WindowStartMove";
                WindowStartResize: "windows:WindowStartResize";
                WindowUnFullscreen: "windows:WindowUnFullscreen";
                WindowUnMaximise: "windows:WindowUnMaximise";
                WindowUnMinimise: "windows:WindowUnMinimise";
                WindowZOrderChanged: "windows:WindowZOrderChanged";
            },
        >;
    },
> = ...
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Window.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Window.html index 5e8b5d684..feed497e8 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Window.html +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/Window.html @@ -1,2 +1,2 @@ -Window | @wailsio/runtime

Variable WindowConst

Window: Window = ...

The window within which the script is running.

-

Generated using TypeDoc

\ No newline at end of file +Window | @wailsio/runtime

Variable WindowConst

Window: Window = ...

The window within which the script is running.

+
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Blob-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Blob-1.html new file mode 100644 index 000000000..7a6dca0a7 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Blob-1.html @@ -0,0 +1 @@ +Blob | @wailsio/runtime
Blob: {
    prototype: Blob;
    new (blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Event-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Event-1.html new file mode 100644 index 000000000..10a91c579 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.Event-1.html @@ -0,0 +1 @@ +Event | @wailsio/runtime
Event: {
    AT_TARGET: 2;
    BUBBLING_PHASE: 3;
    CAPTURING_PHASE: 1;
    NONE: 0;
    prototype: Event;
    new (type: string, eventInitDict?: EventInit): Event;
}

Type declaration

  • ReadonlyAT_TARGET: 2
  • ReadonlyBUBBLING_PHASE: 3
  • ReadonlyCAPTURING_PHASE: 1
  • ReadonlyNONE: 0
  • prototype: Event
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.EventTarget-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.EventTarget-1.html new file mode 100644 index 000000000..b260ea11e --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.EventTarget-1.html @@ -0,0 +1 @@ +EventTarget | @wailsio/runtime
EventTarget: { prototype: EventTarget; new (): EventTarget }

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.MediaSource-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.MediaSource-1.html new file mode 100644 index 000000000..ff20149ac --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.MediaSource-1.html @@ -0,0 +1,3 @@ +MediaSource | @wailsio/runtime
MediaSource: {
    canConstructInDedicatedWorker: boolean;
    prototype: MediaSource;
    isTypeSupported(type: string): boolean;
    new (): MediaSource;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableByteStreamController-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableByteStreamController-1.html new file mode 100644 index 000000000..03abf22d0 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableByteStreamController-1.html @@ -0,0 +1 @@ +ReadableByteStreamController | @wailsio/runtime

Variable ReadableByteStreamController

ReadableByteStreamController: {
    prototype: ReadableByteStreamController;
    new (): ReadableByteStreamController;
}
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStream-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStream-1.html new file mode 100644 index 000000000..ff895225a --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStream-1.html @@ -0,0 +1 @@ +ReadableStream | @wailsio/runtime
ReadableStream: {
    prototype: ReadableStream;
    new (
        underlyingSource: UnderlyingByteSource,
        strategy?: { highWaterMark?: number },
    ): ReadableStream<Uint8Array<ArrayBufferLike>>;
    new <R = any>(
        underlyingSource: UnderlyingDefaultSource<R>,
        strategy?: QueuingStrategy<R>,
    ): ReadableStream<R>;
    new <R = any>(
        underlyingSource?: UnderlyingSource<R>,
        strategy?: QueuingStrategy<R>,
    ): ReadableStream<R>;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBReader-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBReader-1.html new file mode 100644 index 000000000..97d078bc2 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBReader-1.html @@ -0,0 +1 @@ +ReadableStreamBYOBReader | @wailsio/runtime
ReadableStreamBYOBReader: {
    prototype: ReadableStreamBYOBReader;
    new (
        stream: ReadableStream<Uint8Array<ArrayBufferLike>>,
    ): ReadableStreamBYOBReader;
}
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBRequest-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBRequest-1.html new file mode 100644 index 000000000..bcda606c6 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamBYOBRequest-1.html @@ -0,0 +1 @@ +ReadableStreamBYOBRequest | @wailsio/runtime

Variable ReadableStreamBYOBRequest

ReadableStreamBYOBRequest: {
    prototype: ReadableStreamBYOBRequest;
    new (): ReadableStreamBYOBRequest;
}
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultController-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultController-1.html new file mode 100644 index 000000000..b96ea63f8 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultController-1.html @@ -0,0 +1 @@ +ReadableStreamDefaultController | @wailsio/runtime

Variable ReadableStreamDefaultController

ReadableStreamDefaultController: {
    prototype: ReadableStreamDefaultController;
    new (): ReadableStreamDefaultController;
}
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultReader-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultReader-1.html new file mode 100644 index 000000000..a7d746f8d --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.ReadableStreamDefaultReader-1.html @@ -0,0 +1 @@ +ReadableStreamDefaultReader | @wailsio/runtime

Variable ReadableStreamDefaultReader

ReadableStreamDefaultReader: {
    prototype: ReadableStreamDefaultReader;
    new <R = any>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.SourceBuffer-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.SourceBuffer-1.html new file mode 100644 index 000000000..ca7e84af9 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.SourceBuffer-1.html @@ -0,0 +1 @@ +SourceBuffer | @wailsio/runtime
SourceBuffer: { prototype: SourceBuffer; new (): SourceBuffer }

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.TimeRanges-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.TimeRanges-1.html new file mode 100644 index 000000000..9d9e6fa1b --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.TimeRanges-1.html @@ -0,0 +1 @@ +TimeRanges | @wailsio/runtime
TimeRanges: { prototype: TimeRanges; new (): TimeRanges }

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.URL-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.URL-1.html new file mode 100644 index 000000000..a0f9adf7d --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.URL-1.html @@ -0,0 +1,5 @@ +URL | @wailsio/runtime
URL: {
    prototype: URL;
    canParse(url: string | URL, base?: string | URL): boolean;
    createObjectURL(obj: Blob | MediaSource): string;
    parse(url: string | URL, base?: string | URL): null | URL;
    revokeObjectURL(url: string): void;
    new (url: string | URL, base?: string | URL): URL;
}

Type declaration

    • new (url: string | URL, base?: string | URL): URL
    • Parameters

      • url: string | URL
      • Optionalbase: string | URL

      Returns URL

  • prototype: URL
  • canParse:function
    • Parameters

      • url: string | URL
      • Optionalbase: string | URL

      Returns boolean

  • createObjectURL:function
  • parse:function
    • Parameters

      • url: string | URL
      • Optionalbase: string | URL

      Returns null | URL

  • revokeObjectURL:function
    • Parameters

      • url: string

      Returns void

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStream-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStream-1.html new file mode 100644 index 000000000..e31a06f97 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStream-1.html @@ -0,0 +1 @@ +WritableStream | @wailsio/runtime
WritableStream: {
    prototype: WritableStream;
    new <W = any>(
        underlyingSink?: UnderlyingSink<W>,
        strategy?: QueuingStrategy<W>,
    ): WritableStream<W>;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultController-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultController-1.html new file mode 100644 index 000000000..98ec3ec27 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultController-1.html @@ -0,0 +1 @@ +WritableStreamDefaultController | @wailsio/runtime

Variable WritableStreamDefaultController

WritableStreamDefaultController: {
    prototype: WritableStreamDefaultController;
    new (): WritableStreamDefaultController;
}
diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultWriter-1.html b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultWriter-1.html new file mode 100644 index 000000000..286db85ef --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/docs/variables/_internal_.WritableStreamDefaultWriter-1.html @@ -0,0 +1 @@ +WritableStreamDefaultWriter | @wailsio/runtime

Variable WritableStreamDefaultWriter

WritableStreamDefaultWriter: {
    prototype: WritableStreamDefaultWriter;
    new <W = any>(stream: WritableStream<W>): WritableStreamDefaultWriter<W>;
}

Type declaration

diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json b/v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json index 9f8307460..a0f7d5801 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json +++ b/v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json @@ -1,18 +1,460 @@ { "name": "@wailsio/runtime", - "version": "3.0.0-alpha.55", + "version": "3.0.0-alpha.67", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@wailsio/runtime", - "version": "3.0.0-alpha.55", + "version": "3.0.0-alpha.67", "license": "MIT", "devDependencies": { + "happy-dom": "^17.1.1", + "promises-aplus-tests": "2.1.2", "rimraf": "^5.0.5", - "typedoc": "^0.25.7", - "typedoc-plugin-markdown": "^3.17.1", - "typescript": "^5.3.3" + "typedoc": "^0.27.7", + "typedoc-plugin-markdown": "^4.4.2", + "typedoc-plugin-mdn-links": "^4.0.13", + "typedoc-plugin-missing-exports": "^3.1.0", + "typescript": "^5.7.3", + "vitest": "^3.0.6" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@gerrit0/mini-shiki": { + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz", + "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^1.27.2", + "@shikijs/types": "^1.27.2", + "@shikijs/vscode-textmate": "^10.0.1" } }, "node_modules/@isaacs/cliui": { @@ -20,6 +462,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -32,21 +475,521 @@ "node": ">=12" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@shikijs/types": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.7.tgz", + "integrity": "sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.0.7", + "@vitest/utils": "3.0.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.7.tgz", + "integrity": "sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.0.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", + "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.7.tgz", + "integrity": "sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.0.7", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.7.tgz", + "integrity": "sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.0.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.7.tgz", + "integrity": "sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.7.tgz", + "integrity": "sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.0.7", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -54,44 +997,292 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -103,13 +1294,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -119,25 +1312,223 @@ "node": ">= 8" } }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -147,120 +1538,71 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">= 6" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -271,78 +1613,680 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/happy-dom": { + "version": "17.1.8", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-17.1.8.tgz", + "integrity": "sha512-Yxbq/FG79z1rhAf/iB6YM8wO2JB/JDQBy99RiLSs+2siEAi5J05x9eW1nnASHZJbpldjJE2KuFLsLZ+AzX/IxA==", "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "node_modules/mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", - "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/promises-aplus-tests": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/promises-aplus-tests/-/promises-aplus-tests-2.1.2.tgz", + "integrity": "sha512-XiDfjQqx+rHLof8CU9xPOMLsjiXXxr3fkjE7WJjUzXttffB8K/nsnNsPTcwS4VvHliSjGVsYVqIjFeTHw53f5w==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "mocha": "^2.5.3", + "sinon": "^1.10.3", + "underscore": "~1.8.3" + }, + "bin": { + "promises-aplus-tests": "lib/cli.js" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -355,27 +2299,24 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } + "license": "ISC" }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -383,20 +2324,78 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/sinon": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", + "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -415,6 +2414,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -429,6 +2429,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -437,13 +2438,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -456,6 +2459,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -472,6 +2476,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -484,48 +2489,185 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/typedoc": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.12.tgz", - "integrity": "sha512-F+qhkK2VoTweDXd1c42GS/By2DvI2uDF4/EpG424dTexSHdtCH52C6IcAvMA6jR3DzAWZjHpUOW+E02kyPNUNw==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typedoc": { + "version": "0.27.9", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.9.tgz", + "integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^1.24.0", "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.6.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 16" + "node": ">= 18" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" } }, "node_modules/typedoc-plugin-markdown": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", - "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.2.tgz", + "integrity": "sha512-kJVkU2Wd+AXQpyL6DlYXXRrfNrHrEIUgiABWH8Z+2Lz5Sq6an4dQ/hfvP75bbokjNDUskOdFlEEm/0fSVyC7eg==", "dev": true, - "dependencies": { - "handlebars": "^4.7.7" + "license": "MIT", + "engines": { + "node": ">= 18" }, "peerDependencies": { - "typedoc": ">=0.24.0" + "typedoc": "0.27.x" + } + }, + "node_modules/typedoc-plugin-mdn-links": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/typedoc-plugin-mdn-links/-/typedoc-plugin-mdn-links-4.0.14.tgz", + "integrity": "sha512-IDILzJr4OzNb5uAWWRMZYny80Q6jUQerAwskdYbNMwaHMRwsB3+y8oqYYE7/PyH+kJVvJnCC4G2wnAQ3CLdgqA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typedoc": "0.26.x || 0.27.x" + } + }, + "node_modules/typedoc-plugin-missing-exports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-3.1.0.tgz", + "integrity": "sha512-Sogbaj+qDa21NjB3SlIw4JXSwmcl/WOjwiPNaVEcPhpNG/MiRTtpwV81cT7h1cbu9StpONFPbddYWR0KV/fTWA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typedoc": "0.26.x || 0.27.x" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -534,36 +2676,211 @@ "node": ">=14.17" } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true, - "optional": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.5.2", + "rollup": "^4.30.1" + }, "bin": { - "uglifyjs": "bin/uglifyjs" + "vite": "bin/vite.js" }, "engines": { - "node": ">=0.8.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true + "node_modules/vite-node": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", + "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true + "node_modules/vitest": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.7.tgz", + "integrity": "sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "3.0.7", + "@vitest/mocker": "3.0.7", + "@vitest/pretty-format": "^3.0.7", + "@vitest/runner": "3.0.7", + "@vitest/snapshot": "3.0.7", + "@vitest/spy": "3.0.7", + "@vitest/utils": "3.0.7", + "chai": "^5.2.0", + "debug": "^4.4.0", + "expect-type": "^1.1.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.7", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.7", + "@vitest/ui": "3.0.7", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -574,17 +2891,36 @@ "node": ">= 8" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -603,6 +2939,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -620,36 +2957,24 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -664,12 +2989,152 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/package.json b/v3/internal/runtime/desktop/@wailsio/runtime/package.json index 4c3544130..b416a4327 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/package.json +++ b/v3/internal/runtime/desktop/@wailsio/runtime/package.json @@ -1,38 +1,62 @@ { "name": "@wailsio/runtime", "type": "module", - "version": "3.0.0-alpha.56", + "version": "3.0.0-alpha.67", "description": "Wails Runtime", "types": "types/index.d.ts", "exports": { - ".": { - "types": "./types/index.d.ts", - "require": "./src/index.js", - "import": "./src/index.js" - } + "types": "./types/index.d.ts", + "import": "./dist/index.js" }, "repository": { "type": "git", - "url": "git+https://github.com/wailsapp/wails.git" - }, - "scripts": { - "prebuild:types": "rimraf ./types", - "build:types": "npx -p typescript tsc src/index.js --declaration --allowJs --emitDeclarationOnly --outDir types", - "postbuild:types": "task generate:events", - "build:docs": "npx typedoc ./src/index.js", - "build:docs:md": "npx typedoc ./src/index.js" + "url": "git+https://github.com/wailsapp/wails.git", + "directory": "v3/internal/runtime/desktop/@wailsio/runtime" }, "author": "The Wails Team", "license": "MIT", + "homepage": "https://v3.wails.io", "bugs": { "url": "https://github.com/wailsapp/wails/issues" }, - "homepage": "https://wails.io", - "private": false, + "files": [ + "./dist", + "./types" + ], + "sideEffects": [ + "./dist/index.js", + "./dist/contextmenu.js", + "./dist/drag.js" + ], + "scripts": { + "check": "npx tsc --noEmit", + "test": "npx vitest run", + "clean": "npx rimraf ./dist ./docs ./types ./tsconfig.tsbuildinfo", + "generate:events": "task generate:events", + "generate": "npm run generate:events", + "prebuild": "npm run clean && npm run generate", + "build:code": "npx tsc", + "build:docs": "npx typedoc --gitRevision v3-alpha --plugin typedoc-plugin-mdn-links --plugin typedoc-plugin-missing-exports ./src/index.ts", + "build:docs:md": "npx typedoc --gitRevision v3-alpha --plugin typedoc-plugin-markdown --plugin typedoc-plugin-mdn-links --plugin typedoc-plugin-missing-exports ./src/index.ts", + "build": "npm run build:code & npm run build:docs & wait", + "prepack": "npm run build" + }, "devDependencies": { + "happy-dom": "^17.1.1", + "promises-aplus-tests": "2.1.2", "rimraf": "^5.0.5", - "typedoc": "^0.25.7", - "typedoc-plugin-markdown": "^3.17.1", - "typescript": "^5.3.3" + "typedoc": "^0.27.7", + "typedoc-plugin-markdown": "^4.4.2", + "typedoc-plugin-mdn-links": "^4.0.13", + "typedoc-plugin-missing-exports": "^3.1.0", + "typescript": "^5.7.3", + "vitest": "^3.0.6" + }, + "overrides": { + "promises-aplus-tests": { + "mocha": "^11.1.0", + "sinon": "^19.0.2", + "underscore": "^1.13.7" + } } } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/application.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/application.ts similarity index 61% rename from v3/internal/runtime/desktop/@wailsio/runtime/src/application.js rename to v3/internal/runtime/desktop/@wailsio/runtime/src/application.ts index 8f650e287..57a41ac9e 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/application.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/application.ts @@ -8,10 +8,8 @@ The electron alternative for Go (c) Lea Anthony 2019-present */ -/* jshint esversion: 9 */ - -import { newRuntimeCallerWithID, objectNames } from "./runtime"; -const call = newRuntimeCallerWithID(objectNames.Application, ''); +import { newRuntimeCaller, objectNames } from "./runtime.js"; +const call = newRuntimeCaller(objectNames.Application); const HideMethod = 0; const ShowMethod = 1; @@ -19,28 +17,21 @@ const QuitMethod = 2; /** * Hides a certain method by calling the HideMethod function. - * - * @return {Promise} - * */ -export function Hide() { +export function Hide(): Promise { return call(HideMethod); } /** * Calls the ShowMethod and returns the result. - * - * @return {Promise} */ -export function Show() { +export function Show(): Promise { return call(ShowMethod); } /** * Calls the QuitMethod to terminate the program. - * - * @return {Promise} */ -export function Quit() { +export function Quit(): Promise { return call(QuitMethod); } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.js deleted file mode 100644 index 64d80c986..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ -import {newRuntimeCallerWithID, objectNames} from "./runtime"; - -const call = newRuntimeCallerWithID(objectNames.Browser, ''); -const BrowserOpenURL = 0; - -/** - * Open a browser window to the given URL - * @param {string} url - The URL to open - * @returns {Promise} - */ -export function OpenURL(url) { - return call(BrowserOpenURL, {url}); -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.ts new file mode 100644 index 000000000..465310d3d --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/browser.ts @@ -0,0 +1,24 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { newRuntimeCaller, objectNames } from "./runtime.js"; + +const call = newRuntimeCaller(objectNames.Browser); + +const BrowserOpenURL = 0; + +/** + * Open a browser window to the given URL. + * + * @param url - The URL to open + */ +export function OpenURL(url: string | URL): Promise { + return call(BrowserOpenURL, {url: url.toString()}); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/callable.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/callable.ts new file mode 100644 index 000000000..e8e2e4087 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/callable.ts @@ -0,0 +1,125 @@ +// Source: https://github.com/inspect-js/is-callable + +// The MIT License (MIT) +// +// Copyright (c) 2015 Jordan Harband +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +var fnToStr = Function.prototype.toString; +var reflectApply: typeof Reflect.apply | false | null = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; +var badArrayLike: any; +var isCallableMarker: any; +if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { + try { + badArrayLike = Object.defineProperty({}, 'length', { + get: function () { + throw isCallableMarker; + } + }); + isCallableMarker = {}; + // eslint-disable-next-line no-throw-literal + reflectApply(function () { throw 42; }, null, badArrayLike); + } catch (_) { + if (_ !== isCallableMarker) { + reflectApply = null; + } + } +} else { + reflectApply = null; +} + +var constructorRegex = /^\s*class\b/; +var isES6ClassFn = function isES6ClassFunction(value: any): boolean { + try { + var fnStr = fnToStr.call(value); + return constructorRegex.test(fnStr); + } catch (e) { + return false; // not a function + } +}; + +var tryFunctionObject = function tryFunctionToStr(value: any): boolean { + try { + if (isES6ClassFn(value)) { return false; } + fnToStr.call(value); + return true; + } catch (e) { + return false; + } +}; +var toStr = Object.prototype.toString; +var objectClass = '[object Object]'; +var fnClass = '[object Function]'; +var genClass = '[object GeneratorFunction]'; +var ddaClass = '[object HTMLAllCollection]'; // IE 11 +var ddaClass2 = '[object HTML document.all class]'; +var ddaClass3 = '[object HTMLCollection]'; // IE 9-10 +var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag` + +var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing + +var isDDA: (value: any) => boolean = function isDocumentDotAll() { return false; }; +if (typeof document === 'object') { + // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly + var all = document.all; + if (toStr.call(all) === toStr.call(document.all)) { + isDDA = function isDocumentDotAll(value) { + /* globals document: false */ + // in IE 6-8, typeof document.all is "object" and it's truthy + if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) { + try { + var str = toStr.call(value); + return ( + str === ddaClass + || str === ddaClass2 + || str === ddaClass3 // opera 12.16 + || str === objectClass // IE 6-8 + ) && value('') == null; // eslint-disable-line eqeqeq + } catch (e) { /**/ } + } + return false; + }; + } +} + +function isCallableRefApply(value: T | unknown): value is (...args: any[]) => any { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + try { + (reflectApply as any)(value, null, badArrayLike); + } catch (e) { + if (e !== isCallableMarker) { return false; } + } + return !isES6ClassFn(value) && tryFunctionObject(value); +} + +function isCallableNoRefApply(value: T | unknown): value is (...args: any[]) => any { + if (isDDA(value)) { return true; } + if (!value) { return false; } + if (typeof value !== 'function' && typeof value !== 'object') { return false; } + if (hasToStringTag) { return tryFunctionObject(value); } + if (isES6ClassFn(value)) { return false; } + var strClass = toStr.call(value); + if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; } + return tryFunctionObject(value); +}; + +export default reflectApply ? isCallableRefApply : isCallableNoRefApply; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.js deleted file mode 100644 index dad53bb02..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.js +++ /dev/null @@ -1,221 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ -import { newRuntimeCallerWithID, objectNames } from "./runtime"; -import { nanoid } from './nanoid.js'; - -// Setup -window._wails = window._wails || {}; -window._wails.callResultHandler = resultHandler; -window._wails.callErrorHandler = errorHandler; - - -const CallBinding = 0; -const call = newRuntimeCallerWithID(objectNames.Call, ''); -const cancelCall = newRuntimeCallerWithID(objectNames.CancelCall, ''); -let callResponses = new Map(); - -/** - * Generates a unique ID using the nanoid library. - * - * @return {string} - A unique ID that does not exist in the callResponses set. - */ -function generateID() { - let result; - do { - result = nanoid(); - } while (callResponses.has(result)); - return result; -} - -/** - * Handles the result of a call request. - * - * @param {string} id - The id of the request to handle the result for. - * @param {string} data - The result data of the request. - * @param {boolean} isJSON - Indicates whether the data is JSON or not. - * - * @return {undefined} - This method does not return any value. - */ -function resultHandler(id, data, isJSON) { - const promiseHandler = getAndDeleteResponse(id); - if (promiseHandler) { - if (!data) { - promiseHandler.resolve(); - } else if (!isJSON) { - promiseHandler.resolve(data); - } else { - try { - promiseHandler.resolve(JSON.parse(data)); - } catch (err) { - promiseHandler.reject(new TypeError("could not parse result: " + err.message, { cause: err })); - } - } - } -} - -/** - * Handles the error from a call request. - * - * @param {string} id - The id of the promise handler. - * @param {string} data - The error data to reject the promise handler with. - * @param {boolean} isJSON - Indicates whether the data is JSON or not. - * - * @return {void} - */ -function errorHandler(id, data, isJSON) { - const promiseHandler = getAndDeleteResponse(id); - if (promiseHandler) { - if (!isJSON) { - promiseHandler.reject(new Error(data)); - } else { - let error; - try { - error = JSON.parse(data); - } catch (err) { - promiseHandler.reject(new TypeError("could not parse error: " + err.message, { cause: err })); - return; - } - - let options = {}; - if (error.cause) { - options.cause = error.cause; - } - - let exception; - switch (error.kind) { - case "ReferenceError": - exception = new ReferenceError(error.message, options); - break; - case "TypeError": - exception = new TypeError(error.message, options); - break; - case "RuntimeError": - exception = new RuntimeError(error.message, options); - break; - default: - exception = new Error(error.message, options); - break; - } - - promiseHandler.reject(exception); - } - } -} - -/** - * Retrieves and removes the response associated with the given ID from the callResponses map. - * - * @param {any} id - The ID of the response to be retrieved and removed. - * - * @returns {any} The response object associated with the given ID. - */ -function getAndDeleteResponse(id) { - const response = callResponses.get(id); - callResponses.delete(id); - return response; -} - -/** - * Collects all required information for a binding call. - * - * @typedef {Object} CallOptions - * @property {number} [methodID] - The numeric ID of the bound method to call. - * @property {string} [methodName] - The fully qualified name of the bound method to call. - * @property {any[]} args - Arguments to be passed into the bound method. - */ - -/** - * Exception class that will be thrown in case the bound method returns an error. - * The value of the {@link RuntimeError#name} property is "RuntimeError". - */ -export class RuntimeError extends Error { - /** - * Constructs a new RuntimeError instance. - * - * @param {string} message - The error message. - * @param {any[]} args - Optional arguments for the Error constructor. - */ - constructor(message, ...args) { - super(message, ...args); - this.name = "RuntimeError"; - } -} - -/** - * Call a bound method according to the given call options. - * - * In case of failure, the returned promise will reject with an exception - * among ReferenceError (unknown method), TypeError (wrong argument count or type), - * {@link RuntimeError} (method returned an error), or other (network or internal errors). - * The exception might have a "cause" field with the value returned - * by the application- or service-level error marshaling functions. - * - * @param {CallOptions} options - A method call descriptor. - * @returns {Promise} - The result of the call. - */ -export function Call(options) { - const id = generateID(); - const doCancel = () => { return cancelCall(type, {"call-id": id}) }; - let queuedCancel = false, callRunning = false; - let p = new Promise((resolve, reject) => { - options["call-id"] = id; - callResponses.set(id, { resolve, reject }); - call(CallBinding, options).then((_) => { - callRunning = true; - if (queuedCancel) { - return doCancel(); - } - }).catch((error) => { - reject(error); - callResponses.delete(id); - }); - }); - p.cancel = () => { - if (callRunning) { - return doCancel(); - } else { - queuedCancel = true; - } - }; - - return p; -} - -/** - * Calls a bound method by name with the specified arguments. - * See {@link Call} for details. - * - * @param {string} methodName - The name of the method in the format 'package.struct.method'. - * @param {any[]} args - The arguments to pass to the method. - * @returns {Promise} The result of the method call. - */ -export function ByName(methodName, ...args) { - return Call({ - methodName, - args - }); -} - -/** - * Calls a method by its numeric ID with the specified arguments. - * See {@link Call} for details. - * - * @param {number} methodID - The ID of the method to call. - * @param {any[]} args - The arguments to pass to the method. - * @return {Promise} - The result of the method call. - */ -export function ByID(methodID, ...args) { - return Call({ - methodID, - args - }); -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.ts new file mode 100644 index 000000000..11d063323 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/calls.ts @@ -0,0 +1,233 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { CancellablePromise, type CancellablePromiseWithResolvers } from "./cancellable.js"; +import { newRuntimeCaller, objectNames } from "./runtime.js"; +import { nanoid } from "./nanoid.js"; + +// Setup +window._wails = window._wails || {}; +window._wails.callResultHandler = resultHandler; +window._wails.callErrorHandler = errorHandler; + +type PromiseResolvers = Omit, "promise" | "oncancelled"> + +const call = newRuntimeCaller(objectNames.Call); +const cancelCall = newRuntimeCaller(objectNames.CancelCall); +const callResponses = new Map(); + +const CallBinding = 0; +const CancelMethod = 0 + +/** + * Holds all required information for a binding call. + * May provide either a method ID or a method name, but not both. + */ +export type CallOptions = { + /** The numeric ID of the bound method to call. */ + methodID: number; + /** The fully qualified name of the bound method to call. */ + methodName?: never; + /** Arguments to be passed into the bound method. */ + args: any[]; +} | { + /** The numeric ID of the bound method to call. */ + methodID?: never; + /** The fully qualified name of the bound method to call. */ + methodName: string; + /** Arguments to be passed into the bound method. */ + args: any[]; +}; + +/** + * Exception class that will be thrown in case the bound method returns an error. + * The value of the {@link RuntimeError#name} property is "RuntimeError". + */ +export class RuntimeError extends Error { + /** + * Constructs a new RuntimeError instance. + * @param message - The error message. + * @param options - Options to be forwarded to the Error constructor. + */ + constructor(message?: string, options?: ErrorOptions) { + super(message, options); + this.name = "RuntimeError"; + } +} + +/** + * Handles the result of a call request. + * + * @param id - The id of the request to handle the result for. + * @param data - The result data of the request. + * @param isJSON - Indicates whether the data is JSON or not. + */ +function resultHandler(id: string, data: string, isJSON: boolean): void { + const resolvers = getAndDeleteResponse(id); + if (!resolvers) { + return; + } + + if (!data) { + resolvers.resolve(undefined); + } else if (!isJSON) { + resolvers.resolve(data); + } else { + try { + resolvers.resolve(JSON.parse(data)); + } catch (err: any) { + resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err })); + } + } +} + +/** + * Handles the error from a call request. + * + * @param id - The id of the promise handler. + * @param data - The error data to reject the promise handler with. + * @param isJSON - Indicates whether the data is JSON or not. + */ +function errorHandler(id: string, data: string, isJSON: boolean): void { + const resolvers = getAndDeleteResponse(id); + if (!resolvers) { + return; + } + + if (!isJSON) { + resolvers.reject(new Error(data)); + } else { + let error: any; + try { + error = JSON.parse(data); + } catch (err: any) { + resolvers.reject(new TypeError("could not parse error: " + err.message, { cause: err })); + return; + } + + let options: ErrorOptions = {}; + if (error.cause) { + options.cause = error.cause; + } + + let exception; + switch (error.kind) { + case "ReferenceError": + exception = new ReferenceError(error.message, options); + break; + case "TypeError": + exception = new TypeError(error.message, options); + break; + case "RuntimeError": + exception = new RuntimeError(error.message, options); + break; + default: + exception = new Error(error.message, options); + break; + } + + resolvers.reject(exception); + } +} + +/** + * Retrieves and removes the response associated with the given ID from the callResponses map. + * + * @param id - The ID of the response to be retrieved and removed. + * @returns The response object associated with the given ID, if any. + */ +function getAndDeleteResponse(id: string): PromiseResolvers | undefined { + const response = callResponses.get(id); + callResponses.delete(id); + return response; +} + +/** + * Generates a unique ID using the nanoid library. + * + * @returns A unique ID that does not exist in the callResponses set. + */ +function generateID(): string { + let result; + do { + result = nanoid(); + } while (callResponses.has(result)); + return result; +} + +/** + * Call a bound method according to the given call options. + * + * In case of failure, the returned promise will reject with an exception + * among ReferenceError (unknown method), TypeError (wrong argument count or type), + * {@link RuntimeError} (method returned an error), or other (network or internal errors). + * The exception might have a "cause" field with the value returned + * by the application- or service-level error marshaling functions. + * + * @param options - A method call descriptor. + * @returns The result of the call. + */ +export function Call(options: CallOptions): CancellablePromise { + const id = generateID(); + + const result = CancellablePromise.withResolvers(); + callResponses.set(id, { resolve: result.resolve, reject: result.reject }); + + const request = call(CallBinding, Object.assign({ "call-id": id }, options)); + let running = false; + + request.then(() => { + running = true; + }, (err) => { + callResponses.delete(id); + result.reject(err); + }); + + const cancel = () => { + callResponses.delete(id); + return cancelCall(CancelMethod, {"call-id": id}).catch((err) => { + console.error("Error while requesting binding call cancellation:", err); + }); + }; + + result.oncancelled = () => { + if (running) { + return cancel(); + } else { + return request.then(cancel); + } + }; + + return result.promise; +} + +/** + * Calls a bound method by name with the specified arguments. + * See {@link Call} for details. + * + * @param methodName - The name of the method in the format 'package.struct.method'. + * @param args - The arguments to pass to the method. + * @returns The result of the method call. + */ +export function ByName(methodName: string, ...args: any[]): CancellablePromise { + return Call({ methodName, args }); +} + +/** + * Calls a method by its numeric ID with the specified arguments. + * See {@link Call} for details. + * + * @param methodID - The ID of the method to call. + * @param args - The arguments to pass to the method. + * @return The result of the method call. + */ +export function ByID(methodID: number, ...args: any[]): CancellablePromise { + return Call({ methodID, args }); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.test.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.test.js new file mode 100644 index 000000000..b618c1459 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.test.js @@ -0,0 +1,431 @@ +import * as util from "node:util"; +import { describe, it, beforeEach, afterEach, assert, expect, vi } from "vitest"; +import { CancelError, CancellablePromise, CancelledRejectionError } from "./cancellable"; + +// TODO: In order of importance: +// TODO: test cancellation of subpromises the main promise resolves to. +// TODO: test cancellation of promise chains built by calling then() and friends: +// - all promises up the chain should be cancelled; +// - rejection handlers should be always executed with the CancelError of their parent promise in the chain; +// - promises returned from rejection handlers should be cancelled too; +// - if a rejection handler throws or returns a promise that ultimately rejects, +// it should be reported as an unhandled rejection, +// - unless it is a CancelError with the same reason given for cancelling the returned promise. +// TODO: test multiple calls to cancel() (second and later should have no effect). +// TODO: test static factory methods and their cancellation support. + +let expectedUnhandled = new Map(); + +process.on('unhandledRejection', function (error, promise) { + let reason = error; + if (reason instanceof CancelledRejectionError) { + promise = reason.promise; + reason = reason.cause; + } + + let reasons = expectedUnhandled.get(promise); + const callbacks = reasons?.get(reason); + if (callbacks) { + for (const cb of callbacks) { + try { + cb(reason, promise); + } catch (e) { + console.error("Exception in unhandled rejection callback.", e); + } + } + + reasons.delete(reason); + if (reasons.size === 0) { + expectedUnhandled.delete(promise); + } + return; + } + + console.log(util.format("Unhandled rejection.\nReason: %o\nPromise: %o", reason, promise)); + throw error; +}); + +function ignoreUnhandled(reason, promise) { + expectUnhandled(reason, promise, null); +} + +function expectUnhandled(reason, promise, cb) { + let reasons = expectedUnhandled.get(promise); + if (!reasons) { + reasons = new Map(); + expectedUnhandled.set(promise, reasons); + } + let callbacks = reasons.get(reason); + if (!callbacks) { + callbacks = []; + reasons.set(reason, callbacks); + } + if (cb) { + callbacks.push(cb); + } +} + +afterEach(() => { + vi.resetAllMocks(); + vi.restoreAllMocks(); +}); + +const dummyValue = { value: "value" }; +const dummyCause = { dummy: "dummy" }; +const dummyError = new Error("dummy"); +const oncancelled = vi.fn().mockName("oncancelled"); +const sentinel = vi.fn().mockName("sentinel"); +const unhandled = vi.fn().mockName("unhandled"); + +const resolutionPatterns = [ + ["forever", "pending", (test, value, { cls = CancellablePromise, cb = oncancelled } = {}) => test( + new cls(() => {}, cb) + )], + ["already", "fulfilled", (test, value, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + prw.resolve(value ?? dummyValue); + return test(prw.promise); + }], + ["immediately", "fulfilled", (test, value, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + const tp = test(prw.promise); + prw.resolve(value ?? dummyValue); + return tp; + }], + ["eventually", "fulfilled", async (test, value, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + const tp = test(prw.promise); + await new Promise((resolve) => { + setTimeout(() => { + prw.resolve(value ?? dummyValue); + resolve(); + }, 50); + }); + return tp; + }], + ["already", "rejected", (test, reason, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + prw.reject(reason ?? dummyError); + return test(prw.promise); + }], + ["immediately", "rejected", (test, reason, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + const tp = test(prw.promise); + prw.reject(reason ?? dummyError); + return tp; + }], + ["eventually", "rejected", async (test, reason, { cls = CancellablePromise, cb = oncancelled } = {}) => { + const prw = cls.withResolvers(); + prw.oncancelled = cb; + const tp = test(prw.promise); + await new Promise((resolve) => { + setTimeout(() => { + prw.reject(reason ?? dummyError); + resolve(); + }, 50); + }); + return tp; + }], +]; + +describe("CancellablePromise.cancel", ()=> { + it("should suppress its own unhandled cancellation error", async () => { + const p = new CancellablePromise(() => {}); + p.cancel(); + + process.on('unhandledRejection', sentinel); + await new Promise((resolve) => setTimeout(resolve, 100)); + process.off('unhandledRejection', sentinel); + + expect(sentinel).not.toHaveBeenCalled(); + }); + + it.for([ + ["rejections", dummyError], + ["cancellation errors", new CancelError("dummy", { cause: dummyCause })], + ])("should not suppress arbitrary unhandled %s", async ([kind, err]) => { + const p = new CancellablePromise(() => { throw err; }); + p.cancel(); + + await new Promise((resolve) => { + expectUnhandled(err, p, unhandled); + expectUnhandled(err, p, resolve); + }); + + expect(unhandled).toHaveBeenCalledExactlyOnceWith(err, p); + }); + + describe.for(resolutionPatterns)("when applied to %s %s promises", ([time, state, test]) => { + if (time === "already") { + it("should have no effect", () => test(async (promise) => { + promise.then(sentinel, sentinel); + + let reason; + try { + promise.cancel(); + await promise; + assert(state === "fulfilled", "Promise fulfilled unexpectedly"); + } catch (err) { + reason = err; + assert(state === "rejected", "Promise rejected unexpectedly"); + } + + expect(sentinel).toHaveBeenCalled(); + expect(oncancelled).not.toHaveBeenCalled(); + expect(reason).not.toBeInstanceOf(CancelError); + })); + } else { + if (state === "rejected") { + it("should report late rejections as unhandled", () => test(async (promise) => { + promise.cancel(); + + await new Promise((resolve) => { + expectUnhandled(dummyError, promise, unhandled); + expectUnhandled(dummyError, promise, resolve); + }); + + expect(unhandled).toHaveBeenCalledExactlyOnceWith(dummyError, promise); + })); + } + + it("should reject with a CancelError", () => test(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + let reason; + try { + promise.cancel(); + await promise; + } catch (err) { + reason = err; + } + + expect(reason).toBeInstanceOf(CancelError); + })); + + it("should call the oncancelled callback synchronously", () => test(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + try { + promise.cancel(); + sentinel(); + await promise; + } catch {} + + expect(oncancelled).toHaveBeenCalledBefore(sentinel); + })); + + it("should propagate the given cause", () => test(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + let reason; + try { + promise.cancel(dummyCause); + await promise; + } catch (err) { + reason = err; + } + + expect(reason).toBeInstanceOf(CancelError); + expect(reason).toHaveProperty('cause', dummyCause); + expect(oncancelled).toHaveBeenCalledWith(reason.cause); + })); + } + }); +}); + +const onabort = vi.fn().mockName("abort"); + +const abortPatterns = [ + ["never", "standalone", (test) => { + const signal = new AbortSignal(); + signal.addEventListener('abort', onabort, { capture: true }); + return test(signal); + }], + ["already", "standalone", (test) => { + const signal = AbortSignal.abort(dummyCause); + onabort(); + return test(signal); + }], + ["eventually", "standalone", (test) => { + const signal = AbortSignal.timeout(25); + signal.addEventListener('abort', onabort, { capture: true }); + return test(signal); + }], + ["never", "controller-bound", (test) => { + const signal = new AbortController().signal; + signal.addEventListener('abort', onabort, { capture: true }); + return test(signal); + }], + ["already", " controller-bound", (test) => { + const ctrl = new AbortController(); + ctrl.signal.addEventListener('abort', onabort, { capture: true }); + ctrl.abort(dummyCause); + return test(ctrl.signal); + }], + ["immediately", "controller-bound", (test) => { + const ctrl = new AbortController(); + ctrl.signal.addEventListener('abort', onabort, { capture: true }); + const tp = test(ctrl.signal); + ctrl.abort(dummyCause); + return tp; + }], + ["eventually", "controller-bound", (test) => { + const ctrl = new AbortController(); + ctrl.signal.addEventListener('abort', onabort, { capture: true }); + const tp = test(ctrl.signal); + setTimeout(() => ctrl.abort(dummyCause), 25); + return tp; + }] +]; + +describe("CancellablePromise.cancelOn", ()=> { + it("should return the target promise for chaining", () => { + const p = new CancellablePromise(() => {}); + expect(p.cancelOn(AbortSignal.abort())).toBe(p); + }); + + function tests(abortTime, mode, testSignal, resolveTime, state, testPromise) { + if (abortTime !== "never") { + it(`should call CancellablePromise.cancel ${abortTime === "already" ? "immediately" : "on abort"} with the abort reason as cause`, () => testSignal((signal) => testPromise(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + const cancelSpy = vi.spyOn(promise, 'cancel'); + + promise.catch(() => {}); + promise.cancelOn(signal); + + if (signal.aborted) { + sentinel(); + } else { + await new Promise((resolve) => { + signal.onabort = () => { + sentinel(); + resolve(); + }; + }); + } + + expect(cancelSpy).toHaveBeenCalledAfter(onabort); + expect(cancelSpy).toHaveBeenCalledBefore(sentinel); + expect(cancelSpy).toHaveBeenCalledExactlyOnceWith(signal.reason); + }))); + } + + if ( + resolveTime === "already" + || abortTime === "never" + || ( + ["immediately", "eventually"].includes(abortTime) + && ["already", "immediately"].includes(resolveTime) + ) + ) { + it("should have no effect", () => testSignal((signal) => testPromise(async (promise) => { + promise.then(sentinel, sentinel); + + let reason; + try { + if (resolveTime !== "forever") { + await promise.cancelOn(signal); + assert(state === "fulfilled", "Promise fulfilled unexpectedly"); + } else { + await Promise.race([promise, new Promise((resolve) => setTimeout(resolve, 100))]).then(sentinel); + } + } catch (err) { + reason = err; + assert(state === "rejected", "Promise rejected unexpectedly"); + } + + if (abortTime !== "never" && !signal.aborted) { + // Wait for the AbortSignal to have actually aborted. + await new Promise((resolve) => signal.onabort = resolve); + } + + expect(sentinel).toHaveBeenCalled(); + expect(oncancelled).not.toHaveBeenCalled(); + expect(reason).not.toBeInstanceOf(CancelError); + }))); + } else { + if (state === "rejected") { + it("should report late rejections as unhandled", () => testSignal((signal) => testPromise(async (promise) => { + promise.cancelOn(signal); + + await new Promise((resolve) => { + expectUnhandled(dummyError, promise, unhandled); + expectUnhandled(dummyError, promise, resolve); + }); + + expect(unhandled).toHaveBeenCalledExactlyOnceWith(dummyError, promise); + }))); + } + + it("should reject with a CancelError", () => testSignal((signal) => testPromise(async (promise)=> { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + let reason; + try { + await promise.cancelOn(signal); + } catch (err) { + reason = err; + } + + expect(reason).toBeInstanceOf(CancelError); + }))); + + it(`should call the oncancelled callback ${abortTime === "already" ? "" : "a"}synchronously`, () => testSignal((signal) => testPromise(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + try { + promise.cancelOn(signal); + sentinel(); + await promise; + } catch {} + + expect(oncancelled).toHaveBeenCalledAfter(onabort); + if (abortTime === "already") { + expect(oncancelled).toHaveBeenCalledBefore(sentinel); + } else { + expect(oncancelled).toHaveBeenCalledAfter(sentinel); + } + }))); + + it("should propagate the abort reason as cause", () => testSignal((signal) => testPromise(async (promise) => { + // Ignore the unhandled rejection from the test promise. + if (state === "rejected") { ignoreUnhandled(dummyError, promise); } + + let reason; + try { + await promise.cancelOn(signal); + } catch (err) { + reason = err; + } + + expect(reason).toBeInstanceOf(CancelError); + expect(reason).toHaveProperty('cause', signal.reason); + expect(oncancelled).toHaveBeenCalledWith(signal.reason); + }))); + } + } + + describe.for(abortPatterns)("when called with %s aborted %s signals", ([abortTime, mode, testSignal]) => { + describe.for(resolutionPatterns)("when applied to %s %s promises", ([resolveTime, state, testPromise]) => { + tests(abortTime, mode, testSignal, resolveTime, state, testPromise); + }); + }); + + describe.for(resolutionPatterns)("when applied to %s %s promises", ([resolveTime, state, testPromise]) => { + describe.for(abortPatterns)("when called with %s aborted %s signals", ([abortTime, mode, testSignal]) => { + tests(abortTime, mode, testSignal, resolveTime, state, testPromise); + }); + }); +}); \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.ts new file mode 100644 index 000000000..5a839e211 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/cancellable.ts @@ -0,0 +1,934 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import isCallable from "./callable.js"; + +/** + * Exception class that will be used as rejection reason + * in case a {@link CancellablePromise} is cancelled successfully. + * + * The value of the {@link name} property is the string `"CancelError"`. + * The value of the {@link cause} property is the cause passed to the cancel method, if any. + */ +export class CancelError extends Error { + /** + * Constructs a new `CancelError` instance. + * @param message - The error message. + * @param options - Options to be forwarded to the Error constructor. + */ + constructor(message?: string, options?: ErrorOptions) { + super(message, options); + this.name = "CancelError"; + } +} + +/** + * Exception class that will be reported as an unhandled rejection + * in case a {@link CancellablePromise} rejects after being cancelled, + * or when the `oncancelled` callback throws or rejects. + * + * The value of the {@link name} property is the string `"CancelledRejectionError"`. + * The value of the {@link cause} property is the reason the promise rejected with. + * + * Because the original promise was cancelled, + * a wrapper promise will be passed to the unhandled rejection listener instead. + * The {@link promise} property holds a reference to the original promise. + */ +export class CancelledRejectionError extends Error { + /** + * Holds a reference to the promise that was cancelled and then rejected. + */ + promise: CancellablePromise; + + /** + * Constructs a new `CancelledRejectionError` instance. + * @param promise - The promise that caused the error originally. + * @param reason - The rejection reason. + * @param info - An optional informative message specifying the circumstances in which the error was thrown. + * Defaults to the string `"Unhandled rejection in cancelled promise."`. + */ + constructor(promise: CancellablePromise, reason?: any, info?: string) { + super((info ?? "Unhandled rejection in cancelled promise.") + " Reason: " + errorMessage(reason), { cause: reason }); + this.promise = promise; + this.name = "CancelledRejectionError"; + } +} + +type CancellablePromiseResolver = (value: T | PromiseLike | CancellablePromiseLike) => void; +type CancellablePromiseRejector = (reason?: any) => void; +type CancellablePromiseCanceller = (cause?: any) => void | PromiseLike; +type CancellablePromiseExecutor = (resolve: CancellablePromiseResolver, reject: CancellablePromiseRejector) => void; + +export interface CancellablePromiseLike { + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike | CancellablePromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike | CancellablePromiseLike) | undefined | null): CancellablePromiseLike; + cancel(cause?: any): void | PromiseLike; +} + +/** + * Wraps a cancellable promise along with its resolution methods. + * The `oncancelled` field will be null initially but may be set to provide a custom cancellation function. + */ +export interface CancellablePromiseWithResolvers { + promise: CancellablePromise; + resolve: CancellablePromiseResolver; + reject: CancellablePromiseRejector; + oncancelled: CancellablePromiseCanceller | null; +} + +interface CancellablePromiseState { + readonly root: CancellablePromiseState; + resolving: boolean; + settled: boolean; + reason?: CancelError; +} + +// Private field names. +const barrierSym = Symbol("barrier"); +const cancelImplSym = Symbol("cancelImpl"); +const species = Symbol.species ?? Symbol("speciesPolyfill"); + +/** + * A promise with an attached method for cancelling long-running operations (see {@link CancellablePromise#cancel}). + * Cancellation can optionally be bound to an {@link AbortSignal} + * for better composability (see {@link CancellablePromise#cancelOn}). + * + * Cancelling a pending promise will result in an immediate rejection + * with an instance of {@link CancelError} as reason, + * but whoever started the promise will be responsible + * for actually aborting the underlying operation. + * To this purpose, the constructor and all chaining methods + * accept optional cancellation callbacks. + * + * If a `CancellablePromise` still resolves after having been cancelled, + * the result will be discarded. If it rejects, the reason + * will be reported as an unhandled rejection, + * wrapped in a {@link CancelledRejectionError} instance. + * To facilitate the handling of cancellation requests, + * cancelled `CancellablePromise`s will _not_ report unhandled `CancelError`s + * whose `cause` field is the same as the one with which the current promise was cancelled. + * + * All usual promise methods are defined and return a `CancellablePromise` + * whose cancel method will cancel the parent operation as well, propagating the cancellation reason + * upwards through promise chains. + * Conversely, cancelling a promise will not automatically cancel dependent promises downstream: + * ```ts + * let root = new CancellablePromise((resolve, reject) => { ... }); + * let child1 = root.then(() => { ... }); + * let child2 = child1.then(() => { ... }); + * let child3 = root.catch(() => { ... }); + * child1.cancel(); // Cancels child1 and root, but not child2 or child3 + * ``` + * Cancelling a promise that has already settled is safe and has no consequence. + * + * The `cancel` method returns a promise that _always fulfills_ + * after the whole chain has processed the cancel request + * and all attached callbacks up to that moment have run. + * + * All ES2024 promise methods (static and instance) are defined on CancellablePromise, + * but actual availability may vary with OS/webview version. + * + * In line with the proposal at https://github.com/tc39/proposal-rm-builtin-subclassing, + * `CancellablePromise` does not support transparent subclassing. + * Extenders should take care to provide their own method implementations. + * This might be reconsidered in case the proposal is retired. + * + * CancellablePromise is a wrapper around the DOM Promise object + * and is compliant with the [Promises/A+ specification](https://promisesaplus.com/) + * (it passes the [compliance suite](https://github.com/promises-aplus/promises-tests)) + * if so is the underlying implementation. + */ +export class CancellablePromise extends Promise implements PromiseLike, CancellablePromiseLike { + // Private fields. + /** @internal */ + private [barrierSym]!: Partial> | null; + /** @internal */ + private readonly [cancelImplSym]!: (reason: CancelError) => void | PromiseLike; + + /** + * Creates a new `CancellablePromise`. + * + * @param executor - A callback used to initialize the promise. This callback is passed two arguments: + * a `resolve` callback used to resolve the promise with a value + * or the result of another promise (possibly cancellable), + * and a `reject` callback used to reject the promise with a provided reason or error. + * If the value provided to the `resolve` callback is a thenable _and_ cancellable object + * (it has a `then` _and_ a `cancel` method), + * cancellation requests will be forwarded to that object and the oncancelled will not be invoked anymore. + * If any one of the two callbacks is called _after_ the promise has been cancelled, + * the provided values will be cancelled and resolved as usual, + * but their results will be discarded. + * However, if the resolution process ultimately ends up in a rejection + * that is not due to cancellation, the rejection reason + * will be wrapped in a {@link CancelledRejectionError} + * and bubbled up as an unhandled rejection. + * @param oncancelled - It is the caller's responsibility to ensure that any operation + * started by the executor is properly halted upon cancellation. + * This optional callback can be used to that purpose. + * It will be called _synchronously_ with a cancellation cause + * when cancellation is requested, _after_ the promise has already rejected + * with a {@link CancelError}, but _before_ + * any {@link then}/{@link catch}/{@link finally} callback runs. + * If the callback returns a thenable, the promise returned from {@link cancel} + * will only fulfill after the former has settled. + * Unhandled exceptions or rejections from the callback will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as unhandled rejections. + * If the `resolve` callback is called before cancellation with a cancellable promise, + * cancellation requests on this promise will be diverted to that promise, + * and the original `oncancelled` callback will be discarded. + */ + constructor(executor: CancellablePromiseExecutor, oncancelled?: CancellablePromiseCanceller) { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: any) => void; + super((res, rej) => { resolve = res; reject = rej; }); + + if ((this.constructor as any)[species] !== Promise) { + throw new TypeError("CancellablePromise does not support transparent subclassing. Please refrain from overriding the [Symbol.species] static property."); + } + + let promise: CancellablePromiseWithResolvers = { + promise: this, + resolve, + reject, + get oncancelled() { return oncancelled ?? null; }, + set oncancelled(cb) { oncancelled = cb ?? undefined; } + }; + + const state: CancellablePromiseState = { + get root() { return state; }, + resolving: false, + settled: false + }; + + // Setup cancellation system. + void Object.defineProperties(this, { + [barrierSym]: { + configurable: false, + enumerable: false, + writable: true, + value: null + }, + [cancelImplSym]: { + configurable: false, + enumerable: false, + writable: false, + value: cancellerFor(promise, state) + } + }); + + // Run the actual executor. + const rejector = rejectorFor(promise, state); + try { + executor(resolverFor(promise, state), rejector); + } catch (err) { + if (state.resolving) { + console.log("Unhandled exception in CancellablePromise executor.", err); + } else { + rejector(err); + } + } + } + + /** + * Cancels immediately the execution of the operation associated with this promise. + * The promise rejects with a {@link CancelError} instance as reason, + * with the {@link CancelError#cause} property set to the given argument, if any. + * + * Has no effect if called after the promise has already settled; + * repeated calls in particular are safe, but only the first one + * will set the cancellation cause. + * + * The `CancelError` exception _need not_ be handled explicitly _on the promises that are being cancelled:_ + * cancelling a promise with no attached rejection handler does not trigger an unhandled rejection event. + * Therefore, the following idioms are all equally correct: + * ```ts + * new CancellablePromise((resolve, reject) => { ... }).cancel(); + * new CancellablePromise((resolve, reject) => { ... }).then(...).cancel(); + * new CancellablePromise((resolve, reject) => { ... }).then(...).catch(...).cancel(); + * ``` + * Whenever some cancelled promise in a chain rejects with a `CancelError` + * with the same cancellation cause as itself, the error will be discarded silently. + * However, the `CancelError` _will still be delivered_ to all attached rejection handlers + * added by {@link then} and related methods: + * ```ts + * let cancellable = new CancellablePromise((resolve, reject) => { ... }); + * cancellable.then(() => { ... }).catch(console.log); + * cancellable.cancel(); // A CancelError is printed to the console. + * ``` + * If the `CancelError` is not handled downstream by the time it reaches + * a _non-cancelled_ promise, it _will_ trigger an unhandled rejection event, + * just like normal rejections would: + * ```ts + * let cancellable = new CancellablePromise((resolve, reject) => { ... }); + * let chained = cancellable.then(() => { ... }).then(() => { ... }); // No catch... + * cancellable.cancel(); // Unhandled rejection event on chained! + * ``` + * Therefore, it is important to either cancel whole promise chains from their tail, + * as shown in the correct idioms above, or take care of handling errors everywhere. + * + * @returns A cancellable promise that _fulfills_ after the cancel callback (if any) + * and all handlers attached up to the call to cancel have run. + * If the cancel callback returns a thenable, the promise returned by `cancel` + * will also wait for that thenable to settle. + * This enables callers to wait for the cancelled operation to terminate + * without being forced to handle potential errors at the call site. + * ```ts + * cancellable.cancel().then(() => { + * // Cleanup finished, it's safe to do something else. + * }, (err) => { + * // Unreachable: the promise returned from cancel will never reject. + * }); + * ``` + * Note that the returned promise will _not_ handle implicitly any rejection + * that might have occurred already in the cancelled chain. + * It will just track whether registered handlers have been executed or not. + * Therefore, unhandled rejections will never be silently handled by calling cancel. + */ + cancel(cause?: any): CancellablePromise { + return new CancellablePromise((resolve) => { + // INVARIANT: the result of this[cancelImplSym] and the barrier do not ever reject. + // Unfortunately macOS High Sierra does not support Promise.allSettled. + Promise.all([ + this[cancelImplSym](new CancelError("Promise cancelled.", { cause })), + currentBarrier(this) + ]).then(() => resolve(), () => resolve()); + }); + } + + /** + * Binds promise cancellation to the abort event of the given {@link AbortSignal}. + * If the signal has already aborted, the promise will be cancelled immediately. + * When either condition is verified, the cancellation cause will be set + * to the signal's abort reason (see {@link AbortSignal#reason}). + * + * Has no effect if called (or if the signal aborts) _after_ the promise has already settled. + * Only the first signal to abort will set the cancellation cause. + * + * For more details about the cancellation process, + * see {@link cancel} and the `CancellablePromise` constructor. + * + * This method enables `await`ing cancellable promises without having + * to store them for future cancellation, e.g.: + * ```ts + * await longRunningOperation().cancelOn(signal); + * ``` + * instead of: + * ```ts + * let promiseToBeCancelled = longRunningOperation(); + * await promiseToBeCancelled; + * ``` + * + * @returns This promise, for method chaining. + */ + cancelOn(signal: AbortSignal): CancellablePromise { + if (signal.aborted) { + void this.cancel(signal.reason) + } else { + signal.addEventListener('abort', () => void this.cancel(signal.reason), {capture: true}); + } + + return this; + } + + /** + * Attaches callbacks for the resolution and/or rejection of the `CancellablePromise`. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * When the parent promise rejects or is cancelled, the `onrejected` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A `CancellablePromise` for the completion of whichever callback is executed. + * The returned promise is hooked up to propagate cancellation requests up the chain, but not down: + * + * - if the parent promise is cancelled, the `onrejected` handler will be invoked with a `CancelError` + * and the returned promise _will resolve regularly_ with its result; + * - conversely, if the returned promise is cancelled, _the parent promise is cancelled too;_ + * the `onrejected` handler will still be invoked with the parent's `CancelError`, + * but its result will be discarded + * and the returned promise will reject with a `CancelError` as well. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If either callback returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike | CancellablePromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike | CancellablePromiseLike) | undefined | null, oncancelled?: CancellablePromiseCanceller): CancellablePromise { + if (!(this instanceof CancellablePromise)) { + throw new TypeError("CancellablePromise.prototype.then called on an invalid object."); + } + + // NOTE: TypeScript's built-in type for then is broken, + // as it allows specifying an arbitrary TResult1 != T even when onfulfilled is not a function. + // We cannot fix it if we want to CancellablePromise to implement PromiseLike. + + if (!isCallable(onfulfilled)) { onfulfilled = identity as any; } + if (!isCallable(onrejected)) { onrejected = thrower; } + + if (onfulfilled === identity && onrejected == thrower) { + // Shortcut for trivial arguments. + return new CancellablePromise((resolve) => resolve(this as any)); + } + + const barrier: Partial> = {}; + this[barrierSym] = barrier; + + return new CancellablePromise((resolve, reject) => { + void super.then( + (value) => { + if (this[barrierSym] === barrier) { this[barrierSym] = null; } + barrier.resolve?.(); + + try { + resolve(onfulfilled!(value)); + } catch (err) { + reject(err); + } + }, + (reason?) => { + if (this[barrierSym] === barrier) { this[barrierSym] = null; } + barrier.resolve?.(); + + try { + resolve(onrejected!(reason)); + } catch (err) { + reject(err); + } + } + ); + }, async (cause?) => { + //cancelled = true; + try { + return oncancelled?.(cause); + } finally { + await this.cancel(cause); + } + }); + } + + /** + * Attaches a callback for only the rejection of the Promise. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * When the parent promise rejects or is cancelled, the `onrejected` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * It is equivalent to + * ```ts + * cancellablePromise.then(undefined, onrejected, oncancelled); + * ``` + * and the same caveats apply. + * + * @returns A Promise for the completion of the callback. + * Cancellation requests on the returned promise + * will propagate up the chain to the parent promise, + * but not in the other direction. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If `onrejected` returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + * See {@link then} for more details. + */ + catch(onrejected?: ((reason: any) => (PromiseLike | TResult)) | undefined | null, oncancelled?: CancellablePromiseCanceller): CancellablePromise { + return this.then(undefined, onrejected, oncancelled); + } + + /** + * Attaches a callback that is invoked when the CancellablePromise is settled (fulfilled or rejected). The + * resolved value cannot be accessed or modified from the callback. + * The returned promise will settle in the same state as the original one + * after the provided callback has completed execution, + * unless the callback throws or returns a rejecting promise, + * in which case the returned promise will reject as well. + * + * The optional `oncancelled` argument will be invoked when the returned promise is cancelled, + * with the same semantics as the `oncancelled` argument of the constructor. + * Once the parent promise settles, the `onfinally` callback will run, + * _even after the returned promise has been cancelled:_ + * in that case, should it reject or throw, the reason will be wrapped + * in a {@link CancelledRejectionError} and bubbled up as an unhandled rejection. + * + * This method is implemented in terms of {@link then} and the same caveats apply. + * It is polyfilled, hence available in every OS/webview version. + * + * @returns A Promise for the completion of the callback. + * Cancellation requests on the returned promise + * will propagate up the chain to the parent promise, + * but not in the other direction. + * + * The promise returned from {@link cancel} will fulfill only after all attached handlers + * up the entire promise chain have been run. + * + * If `onfinally` returns a cancellable promise, + * cancellation requests will be diverted to it, + * and the specified `oncancelled` callback will be discarded. + * See {@link then} for more details. + */ + finally(onfinally?: (() => void) | undefined | null, oncancelled?: CancellablePromiseCanceller): CancellablePromise { + if (!(this instanceof CancellablePromise)) { + throw new TypeError("CancellablePromise.prototype.finally called on an invalid object."); + } + + if (!isCallable(onfinally)) { + return this.then(onfinally, onfinally, oncancelled); + } + + return this.then( + (value) => CancellablePromise.resolve(onfinally()).then(() => value), + (reason?) => CancellablePromise.resolve(onfinally()).then(() => { throw reason; }), + oncancelled, + ); + } + + /** + * We use the `[Symbol.species]` static property, if available, + * to disable the built-in automatic subclassing features from {@link Promise}. + * It is critical for performance reasons that extenders do not override this. + * Once the proposal at https://github.com/tc39/proposal-rm-builtin-subclassing + * is either accepted or retired, this implementation will have to be revised accordingly. + * + * @ignore + * @internal + */ + static get [species]() { + return Promise; + } + + /** + * Creates a CancellablePromise that is resolved with an array of results + * when all of the provided Promises resolve, or rejected when any Promise is rejected. + * + * Every one of the provided objects that is a thenable _and_ cancellable object + * will be cancelled when the returned promise is cancelled, with the same cause. + * + * @group Static Methods + */ + static all(values: Iterable>): CancellablePromise[]>; + static all(values: T): CancellablePromise<{ -readonly [P in keyof T]: Awaited; }>; + static all | ArrayLike>(values: T): CancellablePromise { + let collected = Array.from(values); + const promise = collected.length === 0 + ? CancellablePromise.resolve(collected) + : new CancellablePromise((resolve, reject) => { + void Promise.all(collected).then(resolve, reject); + }, (cause?): Promise => cancelAll(promise, collected, cause)); + return promise; + } + + /** + * Creates a CancellablePromise that is resolved with an array of results + * when all of the provided Promises resolve or reject. + * + * Every one of the provided objects that is a thenable _and_ cancellable object + * will be cancelled when the returned promise is cancelled, with the same cause. + * + * @group Static Methods + */ + static allSettled(values: Iterable>): CancellablePromise>[]>; + static allSettled(values: T): CancellablePromise<{ -readonly [P in keyof T]: PromiseSettledResult>; }>; + static allSettled | ArrayLike>(values: T): CancellablePromise { + let collected = Array.from(values); + const promise = collected.length === 0 + ? CancellablePromise.resolve(collected) + : new CancellablePromise((resolve, reject) => { + void Promise.allSettled(collected).then(resolve, reject); + }, (cause?): Promise => cancelAll(promise, collected, cause)); + return promise; + } + + /** + * The any function returns a promise that is fulfilled by the first given promise to be fulfilled, + * or rejected with an AggregateError containing an array of rejection reasons + * if all of the given promises are rejected. + * It resolves all elements of the passed iterable to promises as it runs this algorithm. + * + * Every one of the provided objects that is a thenable _and_ cancellable object + * will be cancelled when the returned promise is cancelled, with the same cause. + * + * @group Static Methods + */ + static any(values: Iterable>): CancellablePromise>; + static any(values: T): CancellablePromise>; + static any | ArrayLike>(values: T): CancellablePromise { + let collected = Array.from(values); + const promise = collected.length === 0 + ? CancellablePromise.resolve(collected) + : new CancellablePromise((resolve, reject) => { + void Promise.any(collected).then(resolve, reject); + }, (cause?): Promise => cancelAll(promise, collected, cause)); + return promise; + } + + /** + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved or rejected. + * + * Every one of the provided objects that is a thenable _and_ cancellable object + * will be cancelled when the returned promise is cancelled, with the same cause. + * + * @group Static Methods + */ + static race(values: Iterable>): CancellablePromise>; + static race(values: T): CancellablePromise>; + static race | ArrayLike>(values: T): CancellablePromise { + let collected = Array.from(values); + const promise = new CancellablePromise((resolve, reject) => { + void Promise.race(collected).then(resolve, reject); + }, (cause?): Promise => cancelAll(promise, collected, cause)); + return promise; + } + + /** + * Creates a new cancelled CancellablePromise for the provided cause. + * + * @group Static Methods + */ + static cancel(cause?: any): CancellablePromise { + const p = new CancellablePromise(() => {}); + p.cancel(cause); + return p; + } + + /** + * Creates a new CancellablePromise that cancels + * after the specified timeout, with the provided cause. + * + * If the {@link AbortSignal.timeout} factory method is available, + * it is used to base the timeout on _active_ time rather than _elapsed_ time. + * Otherwise, `timeout` falls back to {@link setTimeout}. + * + * @group Static Methods + */ + static timeout(milliseconds: number, cause?: any): CancellablePromise { + const promise = new CancellablePromise(() => {}); + if (AbortSignal && typeof AbortSignal === 'function' && AbortSignal.timeout && typeof AbortSignal.timeout === 'function') { + AbortSignal.timeout(milliseconds).addEventListener('abort', () => void promise.cancel(cause)); + } else { + setTimeout(() => void promise.cancel(cause), milliseconds); + } + return promise; + } + + /** + * Creates a new CancellablePromise that resolves after the specified timeout. + * The returned promise can be cancelled without consequences. + * + * @group Static Methods + */ + static sleep(milliseconds: number): CancellablePromise; + /** + * Creates a new CancellablePromise that resolves after + * the specified timeout, with the provided value. + * The returned promise can be cancelled without consequences. + * + * @group Static Methods + */ + static sleep(milliseconds: number, value: T): CancellablePromise; + static sleep(milliseconds: number, value?: T): CancellablePromise { + return new CancellablePromise((resolve) => { + setTimeout(() => resolve(value!), milliseconds); + }); + } + + /** + * Creates a new rejected CancellablePromise for the provided reason. + * + * @group Static Methods + */ + static reject(reason?: any): CancellablePromise { + return new CancellablePromise((_, reject) => reject(reason)); + } + + /** + * Creates a new resolved CancellablePromise. + * + * @group Static Methods + */ + static resolve(): CancellablePromise; + /** + * Creates a new resolved CancellablePromise for the provided value. + * + * @group Static Methods + */ + static resolve(value: T): CancellablePromise>; + /** + * Creates a new resolved CancellablePromise for the provided value. + * + * @group Static Methods + */ + static resolve(value: T | PromiseLike): CancellablePromise>; + static resolve(value?: T | PromiseLike): CancellablePromise> { + if (value instanceof CancellablePromise) { + // Optimise for cancellable promises. + return value; + } + return new CancellablePromise((resolve) => resolve(value)); + } + + /** + * Creates a new CancellablePromise and returns it in an object, along with its resolve and reject functions + * and a getter/setter for the cancellation callback. + * + * This method is polyfilled, hence available in every OS/webview version. + * + * @group Static Methods + */ + static withResolvers(): CancellablePromiseWithResolvers { + let result: CancellablePromiseWithResolvers = { oncancelled: null } as any; + result.promise = new CancellablePromise((resolve, reject) => { + result.resolve = resolve; + result.reject = reject; + }, (cause?: any) => { result.oncancelled?.(cause); }); + return result; + } +} + +/** + * Returns a callback that implements the cancellation algorithm for the given cancellable promise. + * The promise returned from the resulting function does not reject. + */ +function cancellerFor(promise: CancellablePromiseWithResolvers, state: CancellablePromiseState) { + let cancellationPromise: void | PromiseLike = undefined; + + return (reason: CancelError): void | PromiseLike => { + if (!state.settled) { + state.settled = true; + state.reason = reason; + promise.reject(reason); + + // Attach an error handler that ignores this specific rejection reason and nothing else. + // In theory, a sane underlying implementation at this point + // should always reject with our cancellation reason, + // hence the handler will never throw. + void Promise.prototype.then.call(promise.promise, undefined, (err) => { + if (err !== reason) { + throw err; + } + }); + } + + // If reason is not set, the promise resolved regularly, hence we must not call oncancelled. + // If oncancelled is unset, no need to go any further. + if (!state.reason || !promise.oncancelled) { return; } + + cancellationPromise = new Promise((resolve) => { + try { + resolve(promise.oncancelled!(state.reason!.cause)); + } catch (err) { + Promise.reject(new CancelledRejectionError(promise.promise, err, "Unhandled exception in oncancelled callback.")); + } + }).catch((reason?) => { + Promise.reject(new CancelledRejectionError(promise.promise, reason, "Unhandled rejection in oncancelled callback.")); + }); + + // Unset oncancelled to prevent repeated calls. + promise.oncancelled = null; + + return cancellationPromise; + } +} + +/** + * Returns a callback that implements the resolution algorithm for the given cancellable promise. + */ +function resolverFor(promise: CancellablePromiseWithResolvers, state: CancellablePromiseState): CancellablePromiseResolver { + return (value) => { + if (state.resolving) { return; } + state.resolving = true; + + if (value === promise.promise) { + if (state.settled) { return; } + state.settled = true; + promise.reject(new TypeError("A promise cannot be resolved with itself.")); + return; + } + + if (value != null && (typeof value === 'object' || typeof value === 'function')) { + let then: any; + try { + then = (value as any).then; + } catch (err) { + state.settled = true; + promise.reject(err); + return; + } + + if (isCallable(then)) { + try { + let cancel = (value as any).cancel; + if (isCallable(cancel)) { + const oncancelled = (cause?: any) => { + Reflect.apply(cancel, value, [cause]); + }; + if (state.reason) { + // If already cancelled, propagate cancellation. + // The promise returned from the canceller algorithm does not reject + // so it can be discarded safely. + void cancellerFor({ ...promise, oncancelled }, state)(state.reason); + } else { + promise.oncancelled = oncancelled; + } + } + } catch {} + + const newState: CancellablePromiseState = { + root: state.root, + resolving: false, + get settled() { return this.root.settled }, + set settled(value) { this.root.settled = value; }, + get reason() { return this.root.reason } + }; + + const rejector = rejectorFor(promise, newState); + try { + Reflect.apply(then, value, [resolverFor(promise, newState), rejector]); + } catch (err) { + rejector(err); + } + return; // IMPORTANT! + } + } + + if (state.settled) { return; } + state.settled = true; + promise.resolve(value); + }; +} + +/** + * Returns a callback that implements the rejection algorithm for the given cancellable promise. + */ +function rejectorFor(promise: CancellablePromiseWithResolvers, state: CancellablePromiseState): CancellablePromiseRejector { + return (reason?) => { + if (state.resolving) { return; } + state.resolving = true; + + if (state.settled) { + try { + if (reason instanceof CancelError && state.reason instanceof CancelError && Object.is(reason.cause, state.reason.cause)) { + // Swallow late rejections that are CancelErrors whose cancellation cause is the same as ours. + return; + } + } catch {} + + void Promise.reject(new CancelledRejectionError(promise.promise, reason)); + } else { + state.settled = true; + promise.reject(reason); + } + } +} + +/** + * Cancels all values in an array that look like cancellable thenables. + * Returns a promise that fulfills once all cancellation procedures for the given values have settled. + */ +function cancelAll(parent: CancellablePromise, values: any[], cause?: any): Promise { + const results = []; + + for (const value of values) { + let cancel: CancellablePromiseCanceller; + try { + if (!isCallable(value.then)) { continue; } + cancel = value.cancel; + if (!isCallable(cancel)) { continue; } + } catch { continue; } + + let result: void | PromiseLike; + try { + result = Reflect.apply(cancel, value, [cause]); + } catch (err) { + Promise.reject(new CancelledRejectionError(parent, err, "Unhandled exception in cancel method.")); + continue; + } + + if (!result) { continue; } + results.push( + (result instanceof Promise ? result : Promise.resolve(result)).catch((reason?) => { + Promise.reject(new CancelledRejectionError(parent, reason, "Unhandled rejection in cancel method.")); + }) + ); + } + + return Promise.all(results) as any; +} + +/** + * Returns its argument. + */ +function identity(x: T): T { + return x; +} + +/** + * Throws its argument. + */ +function thrower(reason?: any): never { + throw reason; +} + +/** + * Attempts various strategies to convert an error to a string. + */ +function errorMessage(err: any): string { + try { + if (err instanceof Error || typeof err !== 'object' || err.toString !== Object.prototype.toString) { + return "" + err; + } + } catch {} + + try { + return JSON.stringify(err); + } catch {} + + try { + return Object.prototype.toString.call(err); + } catch {} + + return ""; +} + +/** + * Gets the current barrier promise for the given cancellable promise. If necessary, initialises the barrier. + */ +function currentBarrier(promise: CancellablePromise): Promise { + let pwr: Partial> = promise[barrierSym] ?? {}; + if (!('promise' in pwr)) { + Object.assign(pwr, promiseWithResolvers()); + } + if (promise[barrierSym] == null) { + pwr.resolve!(); + promise[barrierSym] = pwr; + } + return pwr.promise!; +} + +// Polyfill Promise.withResolvers. +let promiseWithResolvers = Promise.withResolvers; +if (promiseWithResolvers && typeof promiseWithResolvers === 'function') { + promiseWithResolvers = promiseWithResolvers.bind(Promise); +} else { + promiseWithResolvers = function (): PromiseWithResolvers { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: any) => void; + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); + return { promise, resolve, reject }; + } +} \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.js deleted file mode 100644 index 15cfc518a..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -import {newRuntimeCallerWithID, objectNames} from "./runtime"; - -const call = newRuntimeCallerWithID(objectNames.Clipboard, ''); -const ClipboardSetText = 0; -const ClipboardText = 1; - -/** - * Sets the text to the Clipboard. - * - * @param {string} text - The text to be set to the Clipboard. - * @return {Promise} - A Promise that resolves when the operation is successful. - */ -export function SetText(text) { - return call(ClipboardSetText, {text}); -} - -/** - * Get the Clipboard text - * @returns {Promise} A promise that resolves with the text from the Clipboard. - */ -export function Text() { - return call(ClipboardText); -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.ts new file mode 100644 index 000000000..a6f2f1985 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/clipboard.ts @@ -0,0 +1,35 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import {newRuntimeCaller, objectNames} from "./runtime.js"; + +const call = newRuntimeCaller(objectNames.Clipboard); + +const ClipboardSetText = 0; +const ClipboardText = 1; + +/** + * Sets the text to the Clipboard. + * + * @param text - The text to be set to the Clipboard. + * @return A Promise that resolves when the operation is successful. + */ +export function SetText(text: string): Promise { + return call(ClipboardSetText, {text}); +} + +/** + * Get the Clipboard text + * + * @returns A promise that resolves with the text from the Clipboard. + */ +export function Text(): Promise { + return call(ClipboardText); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.js deleted file mode 100644 index ab0749901..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -import {newRuntimeCallerWithID, objectNames} from "./runtime"; -import {IsDebug} from "./system"; - -// setup -window.addEventListener('contextmenu', contextMenuHandler); - -const call = newRuntimeCallerWithID(objectNames.ContextMenu, ''); -const ContextMenuOpen = 0; - -function openContextMenu(id, x, y, data) { - void call(ContextMenuOpen, {id, x, y, data}); -} - -function contextMenuHandler(event) { - // Check for custom context menu - let element = event.target; - let customContextMenu = window.getComputedStyle(element).getPropertyValue("--custom-contextmenu"); - customContextMenu = customContextMenu ? customContextMenu.trim() : ""; - if (customContextMenu) { - event.preventDefault(); - let customContextMenuData = window.getComputedStyle(element).getPropertyValue("--custom-contextmenu-data"); - openContextMenu(customContextMenu, event.clientX, event.clientY, customContextMenuData); - return - } - - processDefaultContextMenu(event); -} - - -/* ---default-contextmenu: auto; (default) will show the default context menu if contentEditable is true OR text has been selected OR element is input or textarea ---default-contextmenu: show; will always show the default context menu ---default-contextmenu: hide; will always hide the default context menu - -This rule is inherited like normal CSS rules, so nesting works as expected -*/ -function processDefaultContextMenu(event) { - - // Debug builds always show the menu - if (IsDebug()) { - return; - } - - // Process default context menu - const element = event.target; - const computedStyle = window.getComputedStyle(element); - const defaultContextMenuAction = computedStyle.getPropertyValue("--default-contextmenu").trim(); - switch (defaultContextMenuAction) { - case "show": - return; - case "hide": - event.preventDefault(); - return; - default: - // Check if contentEditable is true - if (element.isContentEditable) { - return; - } - - // Check if text has been selected - const selection = window.getSelection(); - const hasSelection = (selection.toString().length > 0) - if (hasSelection) { - for (let i = 0; i < selection.rangeCount; i++) { - const range = selection.getRangeAt(i); - const rects = range.getClientRects(); - for (let j = 0; j < rects.length; j++) { - const rect = rects[j]; - if (document.elementFromPoint(rect.left, rect.top) === element) { - return; - } - } - } - } - // Check if tagname is input or textarea - if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") { - if (hasSelection || (!element.readOnly && !element.disabled)) { - return; - } - } - - // hide default context menu - event.preventDefault(); - } -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.ts new file mode 100644 index 000000000..5f15bf237 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/contextmenu.ts @@ -0,0 +1,94 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { newRuntimeCaller, objectNames } from "./runtime.js"; +import { IsDebug } from "./system.js"; +import { eventTarget } from "./utils"; + +// setup +window.addEventListener('contextmenu', contextMenuHandler); + +const call = newRuntimeCaller(objectNames.ContextMenu); + +const ContextMenuOpen = 0; + +function openContextMenu(id: string, x: number, y: number, data: any): void { + void call(ContextMenuOpen, {id, x, y, data}); +} + +function contextMenuHandler(event: MouseEvent) { + const target = eventTarget(event); + + // Check for custom context menu + const customContextMenu = window.getComputedStyle(target).getPropertyValue("--custom-contextmenu").trim(); + + if (customContextMenu) { + event.preventDefault(); + const data = window.getComputedStyle(target).getPropertyValue("--custom-contextmenu-data"); + openContextMenu(customContextMenu, event.clientX, event.clientY, data); + } else { + processDefaultContextMenu(event, target); + } +} + + +/* +--default-contextmenu: auto; (default) will show the default context menu if contentEditable is true OR text has been selected OR element is input or textarea +--default-contextmenu: show; will always show the default context menu +--default-contextmenu: hide; will always hide the default context menu + +This rule is inherited like normal CSS rules, so nesting works as expected +*/ +function processDefaultContextMenu(event: MouseEvent, target: HTMLElement) { + // Debug builds always show the menu + if (IsDebug()) { + return; + } + + // Process default context menu + switch (window.getComputedStyle(target).getPropertyValue("--default-contextmenu").trim()) { + case 'show': + return; + case 'hide': + event.preventDefault(); + return; + } + + // Check if contentEditable is true + if (target.isContentEditable) { + return; + } + + // Check if text has been selected + const selection = window.getSelection(); + const hasSelection = selection && selection.toString().length > 0; + if (hasSelection) { + for (let i = 0; i < selection.rangeCount; i++) { + const range = selection.getRangeAt(i); + const rects = range.getClientRects(); + for (let j = 0; j < rects.length; j++) { + const rect = rects[j]; + if (document.elementFromPoint(rect.left, rect.top) === target) { + return; + } + } + } + } + + // Check if tag is input or textarea. + if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { + if (hasSelection || (!target.readOnly && !target.disabled)) { + return; + } + } + + // hide default context menu + event.preventDefault(); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/create.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/create.ts similarity index 69% rename from v3/internal/runtime/desktop/@wailsio/runtime/src/create.js rename to v3/internal/runtime/desktop/@wailsio/runtime/src/create.ts index 6967eef09..72965eaa6 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/create.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/create.ts @@ -8,37 +8,27 @@ The electron alternative for Go (c) Lea Anthony 2019-present */ -/* jshint esversion: 9 */ - /** * Any is a dummy creation function for simple or unknown types. - * @template T - * @param {any} source - * @returns {T} */ -export function Any(source) { - return /** @type {T} */(source); +export function Any(source: any): T { + return source; } /** * ByteSlice is a creation function that replaces * null strings with empty strings. - * @param {any} source - * @returns {string} */ -export function ByteSlice(source) { - return /** @type {any} */((source == null) ? "" : source); +export function ByteSlice(source: any): string { + return ((source == null) ? "" : source); } /** * Array takes a creation function for an arbitrary type * and returns an in-place creation function for an array * whose elements are of that type. - * @template T - * @param {(source: any) => T} element - * @returns {(source: any) => T[]} */ -export function Array(element) { +export function Array(element: (source: any) => T): (source: any) => T[] { if (element === Any) { return (source) => (source === null ? [] : source); } @@ -58,12 +48,8 @@ export function Array(element) { * Map takes creation functions for two arbitrary types * and returns an in-place creation function for an object * whose keys and values are of those types. - * @template K, V - * @param {(source: any) => K} key - * @param {(source: any) => V} value - * @returns {(source: any) => { [_: K]: V }} */ -export function Map(key, value) { +export function Map(key: (source: any) => string, value: (source: any) => V): (source: any) => Record { if (value === Any) { return (source) => (source === null ? {} : source); } @@ -82,11 +68,8 @@ export function Map(key, value) { /** * Nullable takes a creation function for an arbitrary type * and returns a creation function for a nullable value of that type. - * @template T - * @param {(source: any) => T} element - * @returns {(source: any) => (T | null)} */ -export function Nullable(element) { +export function Nullable(element: (source: any) => T): (source: any) => (T | null) { if (element === Any) { return Any; } @@ -97,12 +80,10 @@ export function Nullable(element) { /** * Struct takes an object mapping field names to creation functions * and returns an in-place creation function for a struct. - * @template {{ [_: string]: ((source: any) => any) }} T - * @template {{ [Key in keyof T]?: ReturnType }} U - * @param {T} createField - * @returns {(source: any) => U} */ -export function Struct(createField) { +export function Struct(createField: Record any>): + = any>(source: any) => U +{ let allAny = true; for (const name in createField) { if (createField[name] !== Any) { diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.js deleted file mode 100644 index dc7678724..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.js +++ /dev/null @@ -1,200 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -/** - * @typedef {Object} OpenFileDialogOptions - * @property {boolean} [CanChooseDirectories] - Indicates if directories can be chosen. - * @property {boolean} [CanChooseFiles] - Indicates if files can be chosen. - * @property {boolean} [CanCreateDirectories] - Indicates if directories can be created. - * @property {boolean} [ShowHiddenFiles] - Indicates if hidden files should be shown. - * @property {boolean} [ResolvesAliases] - Indicates if aliases should be resolved. - * @property {boolean} [AllowsMultipleSelection] - Indicates if multiple selection is allowed. - * @property {boolean} [HideExtension] - Indicates if the extension should be hidden. - * @property {boolean} [CanSelectHiddenExtension] - Indicates if hidden extensions can be selected. - * @property {boolean} [TreatsFilePackagesAsDirectories] - Indicates if file packages should be treated as directories. - * @property {boolean} [AllowsOtherFiletypes] - Indicates if other file types are allowed. - * @property {FileFilter[]} [Filters] - Array of file filters. - * @property {string} [Title] - Title of the dialog. - * @property {string} [Message] - Message to show in the dialog. - * @property {string} [ButtonText] - Text to display on the button. - * @property {string} [Directory] - Directory to open in the dialog. - * @property {boolean} [Detached] - Indicates if the dialog should appear detached from the main window. - */ - - -/** - * @typedef {Object} SaveFileDialogOptions - * @property {string} [Filename] - Default filename to use in the dialog. - * @property {boolean} [CanChooseDirectories] - Indicates if directories can be chosen. - * @property {boolean} [CanChooseFiles] - Indicates if files can be chosen. - * @property {boolean} [CanCreateDirectories] - Indicates if directories can be created. - * @property {boolean} [ShowHiddenFiles] - Indicates if hidden files should be shown. - * @property {boolean} [ResolvesAliases] - Indicates if aliases should be resolved. - * @property {boolean} [AllowsMultipleSelection] - Indicates if multiple selection is allowed. - * @property {boolean} [HideExtension] - Indicates if the extension should be hidden. - * @property {boolean} [CanSelectHiddenExtension] - Indicates if hidden extensions can be selected. - * @property {boolean} [TreatsFilePackagesAsDirectories] - Indicates if file packages should be treated as directories. - * @property {boolean} [AllowsOtherFiletypes] - Indicates if other file types are allowed. - * @property {FileFilter[]} [Filters] - Array of file filters. - * @property {string} [Title] - Title of the dialog. - * @property {string} [Message] - Message to show in the dialog. - * @property {string} [ButtonText] - Text to display on the button. - * @property {string} [Directory] - Directory to open in the dialog. - * @property {boolean} [Detached] - Indicates if the dialog should appear detached from the main window. - */ - -/** - * @typedef {Object} MessageDialogOptions - * @property {string} [Title] - The title of the dialog window. - * @property {string} [Message] - The main message to show in the dialog. - * @property {Button[]} [Buttons] - Array of button options to show in the dialog. - * @property {boolean} [Detached] - True if the dialog should appear detached from the main window (if applicable). - */ - -/** - * @typedef {Object} Button - * @property {string} [Label] - Text that appears within the button. - * @property {boolean} [IsCancel] - True if the button should cancel an operation when clicked. - * @property {boolean} [IsDefault] - True if the button should be the default action when the user presses enter. - */ - -/** - * @typedef {Object} FileFilter - * @property {string} [DisplayName] - Display name for the filter, it could be "Text Files", "Images" etc. - * @property {string} [Pattern] - Pattern to match for the filter, e.g. "*.txt;*.md" for text markdown files. - */ - -// setup -window._wails = window._wails || {}; -window._wails.dialogErrorCallback = dialogErrorCallback; -window._wails.dialogResultCallback = dialogResultCallback; - -import {newRuntimeCallerWithID, objectNames} from "./runtime"; - -import { nanoid } from './nanoid.js'; - -// Define constants from the `methods` object in Title Case -const DialogInfo = 0; -const DialogWarning = 1; -const DialogError = 2; -const DialogQuestion = 3; -const DialogOpenFile = 4; -const DialogSaveFile = 5; - -const call = newRuntimeCallerWithID(objectNames.Dialog, ''); -const dialogResponses = new Map(); - -/** - * Generates a unique id that is not present in dialogResponses. - * @returns {string} unique id - */ -function generateID() { - let result; - do { - result = nanoid(); - } while (dialogResponses.has(result)); - return result; -} - -/** - * Shows a dialog of specified type with the given options. - * @param {number} type - type of dialog - * @param {MessageDialogOptions|OpenFileDialogOptions|SaveFileDialogOptions} options - options for the dialog - * @returns {Promise} promise that resolves with result of dialog - */ -function dialog(type, options = {}) { - const id = generateID(); - options["dialog-id"] = id; - return new Promise((resolve, reject) => { - dialogResponses.set(id, {resolve, reject}); - call(type, options).catch((error) => { - reject(error); - dialogResponses.delete(id); - }); - }); -} - -/** - * Handles the callback from a dialog. - * - * @param {string} id - The ID of the dialog response. - * @param {string} data - The data received from the dialog. - * @param {boolean} isJSON - Flag indicating whether the data is in JSON format. - * - * @return {undefined} - */ -function dialogResultCallback(id, data, isJSON) { - let p = dialogResponses.get(id); - if (p) { - dialogResponses.delete(id); - if (isJSON) { - p.resolve(JSON.parse(data)); - } else { - p.resolve(data); - } - } -} - -/** - * Callback function for handling errors in dialog. - * - * @param {string} id - The id of the dialog response. - * @param {string} message - The error message. - * - * @return {void} - */ -function dialogErrorCallback(id, message) { - let p = dialogResponses.get(id); - if (p) { - dialogResponses.delete(id); - p.reject(new Error(message)); - } -} - - -// Replace `methods` with constants in Title Case - -/** - * @param {MessageDialogOptions} options - Dialog options - * @returns {Promise} - The label of the button pressed - */ -export const Info = (options) => dialog(DialogInfo, options); - -/** - * @param {MessageDialogOptions} options - Dialog options - * @returns {Promise} - The label of the button pressed - */ -export const Warning = (options) => dialog(DialogWarning, options); - -/** - * @param {MessageDialogOptions} options - Dialog options - * @returns {Promise} - The label of the button pressed - */ -export const Error = (options) => dialog(DialogError, options); - -/** - * @param {MessageDialogOptions} options - Dialog options - * @returns {Promise} - The label of the button pressed - */ -export const Question = (options) => dialog(DialogQuestion, options); - -/** - * @param {OpenFileDialogOptions} options - Dialog options - * @returns {Promise} Returns selected file or list of files. Returns blank string if no file is selected. - */ -export const OpenFile = (options) => dialog(DialogOpenFile, options); - -/** - * @param {SaveFileDialogOptions} options - Dialog options - * @returns {Promise} Returns the selected file. Returns blank string if no file is selected. - */ -export const SaveFile = (options) => dialog(DialogSaveFile, options); diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.ts new file mode 100644 index 000000000..bb0625b2e --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/dialogs.ts @@ -0,0 +1,255 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import {newRuntimeCaller, objectNames} from "./runtime.js"; +import { nanoid } from './nanoid.js'; + +// setup +window._wails = window._wails || {}; +window._wails.dialogErrorCallback = dialogErrorCallback; +window._wails.dialogResultCallback = dialogResultCallback; + +type PromiseResolvers = Omit, "promise">; + +const call = newRuntimeCaller(objectNames.Dialog); +const dialogResponses = new Map(); + +// Define constants from the `methods` object in Title Case +const DialogInfo = 0; +const DialogWarning = 1; +const DialogError = 2; +const DialogQuestion = 3; +const DialogOpenFile = 4; +const DialogSaveFile = 5; + +export interface OpenFileDialogOptions { + /** Indicates if directories can be chosen. */ + CanChooseDirectories?: boolean; + /** Indicates if files can be chosen. */ + CanChooseFiles?: boolean; + /** Indicates if directories can be created. */ + CanCreateDirectories?: boolean; + /** Indicates if hidden files should be shown. */ + ShowHiddenFiles?: boolean; + /** Indicates if aliases should be resolved. */ + ResolvesAliases?: boolean; + /** Indicates if multiple selection is allowed. */ + AllowsMultipleSelection?: boolean; + /** Indicates if the extension should be hidden. */ + HideExtension?: boolean; + /** Indicates if hidden extensions can be selected. */ + CanSelectHiddenExtension?: boolean; + /** Indicates if file packages should be treated as directories. */ + TreatsFilePackagesAsDirectories?: boolean; + /** Indicates if other file types are allowed. */ + AllowsOtherFiletypes?: boolean; + /** Array of file filters. */ + Filters?: FileFilter[]; + /** Title of the dialog. */ + Title?: string; + /** Message to show in the dialog. */ + Message?: string; + /** Text to display on the button. */ + ButtonText?: string; + /** Directory to open in the dialog. */ + Directory?: string; + /** Indicates if the dialog should appear detached from the main window. */ + Detached?: boolean; +} + +export interface SaveFileDialogOptions { + /** Default filename to use in the dialog. */ + Filename?: string; + /** Indicates if directories can be chosen. */ + CanChooseDirectories?: boolean; + /** Indicates if files can be chosen. */ + CanChooseFiles?: boolean; + /** Indicates if directories can be created. */ + CanCreateDirectories?: boolean; + /** Indicates if hidden files should be shown. */ + ShowHiddenFiles?: boolean; + /** Indicates if aliases should be resolved. */ + ResolvesAliases?: boolean; + /** Indicates if the extension should be hidden. */ + HideExtension?: boolean; + /** Indicates if hidden extensions can be selected. */ + CanSelectHiddenExtension?: boolean; + /** Indicates if file packages should be treated as directories. */ + TreatsFilePackagesAsDirectories?: boolean; + /** Indicates if other file types are allowed. */ + AllowsOtherFiletypes?: boolean; + /** Array of file filters. */ + Filters?: FileFilter[]; + /** Title of the dialog. */ + Title?: string; + /** Message to show in the dialog. */ + Message?: string; + /** Text to display on the button. */ + ButtonText?: string; + /** Directory to open in the dialog. */ + Directory?: string; + /** Indicates if the dialog should appear detached from the main window. */ + Detached?: boolean; +} + +export interface MessageDialogOptions { + /** The title of the dialog window. */ + Title?: string; + /** The main message to show in the dialog. */ + Message?: string; + /** Array of button options to show in the dialog. */ + Buttons?: Button[]; + /** True if the dialog should appear detached from the main window (if applicable). */ + Detached?: boolean; +} + +export interface Button { + /** Text that appears within the button. */ + Label?: string; + /** True if the button should cancel an operation when clicked. */ + IsCancel?: boolean; + /** True if the button should be the default action when the user presses enter. */ + IsDefault?: boolean; +} + +export interface FileFilter { + /** Display name for the filter, it could be "Text Files", "Images" etc. */ + DisplayName?: string; + /** Pattern to match for the filter, e.g. "*.txt;*.md" for text markdown files. */ + Pattern?: string; +} + +/** + * Handles the result of a dialog request. + * + * @param id - The id of the request to handle the result for. + * @param data - The result data of the request. + * @param isJSON - Indicates whether the data is JSON or not. + */ +function dialogResultCallback(id: string, data: string, isJSON: boolean): void { + let resolvers = getAndDeleteResponse(id); + if (!resolvers) { + return; + } + + if (isJSON) { + try { + resolvers.resolve(JSON.parse(data)); + } catch (err: any) { + resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err })); + } + } else { + resolvers.resolve(data); + } +} + +/** + * Handles the error from a dialog request. + * + * @param id - The id of the promise handler. + * @param message - An error message. + */ +function dialogErrorCallback(id: string, message: string): void { + getAndDeleteResponse(id)?.reject(new window.Error(message)); +} + +/** + * Retrieves and removes the response associated with the given ID from the dialogResponses map. + * + * @param id - The ID of the response to be retrieved and removed. + * @returns The response object associated with the given ID, if any. + */ +function getAndDeleteResponse(id: string): PromiseResolvers | undefined { + const response = dialogResponses.get(id); + dialogResponses.delete(id); + return response; +} + +/** + * Generates a unique ID using the nanoid library. + * + * @returns A unique ID that does not exist in the dialogResponses set. + */ +function generateID(): string { + let result; + do { + result = nanoid(); + } while (dialogResponses.has(result)); + return result; +} + +/** + * Presents a dialog of specified type with the given options. + * + * @param type - Dialog type. + * @param options - Options for the dialog. + * @returns A promise that resolves with result of dialog. + */ +function dialog(type: number, options: MessageDialogOptions | OpenFileDialogOptions | SaveFileDialogOptions = {}): Promise { + const id = generateID(); + return new Promise((resolve, reject) => { + dialogResponses.set(id, { resolve, reject }); + call(type, Object.assign({ "dialog-id": id }, options)).catch((err: any) => { + dialogResponses.delete(id); + reject(err); + }); + }); +} + +/** + * Presents an info dialog. + * + * @param options - Dialog options + * @returns A promise that resolves with the label of the chosen button. + */ +export function Info(options: MessageDialogOptions): Promise { return dialog(DialogInfo, options); } + +/** + * Presents a warning dialog. + * + * @param options - Dialog options. + * @returns A promise that resolves with the label of the chosen button. + */ +export function Warning(options: MessageDialogOptions): Promise { return dialog(DialogWarning, options); } + +/** + * Presents an error dialog. + * + * @param options - Dialog options. + * @returns A promise that resolves with the label of the chosen button. + */ +export function Error(options: MessageDialogOptions): Promise { return dialog(DialogError, options); } + +/** + * Presents a question dialog. + * + * @param options - Dialog options. + * @returns A promise that resolves with the label of the chosen button. + */ +export function Question(options: MessageDialogOptions): Promise { return dialog(DialogQuestion, options); } + +/** + * Presents a file selection dialog to pick one or more files to open. + * + * @param options - Dialog options. + * @returns Selected file or list of files, or a blank string/empty list if no file has been selected. + */ +export function OpenFile(options: OpenFileDialogOptions & { AllowsMultipleSelection: true }): Promise; +export function OpenFile(options: OpenFileDialogOptions & { AllowsMultipleSelection?: false | undefined }): Promise; +export function OpenFile(options: OpenFileDialogOptions): Promise; +export function OpenFile(options: OpenFileDialogOptions): Promise { return dialog(DialogOpenFile, options) ?? []; } + +/** + * Presents a file selection dialog to pick a file to save. + * + * @param options - Dialog options. + * @returns Selected file, or a blank string if no file has been selected. + */ +export function SaveFile(options: SaveFileDialogOptions): Promise { return dialog(DialogSaveFile, options); } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.js deleted file mode 100644 index 9c841796c..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ -/* jshint esversion: 9 */ -import {invoke, IsWindows} from "./system"; -import {GetFlag} from "./flags"; - -// Setup -let shouldDrag = false; -let resizable = false; -let resizeEdge = null; -let defaultCursor = "auto"; - -window._wails = window._wails || {}; - -window._wails.setResizable = function(value) { - resizable = value; -}; - -window._wails.endDrag = function() { - document.body.style.cursor = 'default'; - shouldDrag = false; -}; - -window.addEventListener('mousedown', onMouseDown); -window.addEventListener('mousemove', onMouseMove); -window.addEventListener('mouseup', onMouseUp); - - -function dragTest(e) { - let val = window.getComputedStyle(e.target).getPropertyValue("--wails-draggable"); - let mousePressed = e.buttons !== undefined ? e.buttons : e.which; - if (!val || val === "" || val.trim() !== "drag" || mousePressed === 0) { - return false; - } - return e.detail === 1; -} - -function onMouseDown(e) { - - // Check for resizing - if (resizeEdge) { - invoke("wails:resize:" + resizeEdge); - e.preventDefault(); - return; - } - - if (dragTest(e)) { - // This checks for clicks on the scroll bar - if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) { - return; - } - shouldDrag = true; - } else { - shouldDrag = false; - } -} - -function onMouseUp() { - shouldDrag = false; -} - -function setResize(cursor) { - document.documentElement.style.cursor = cursor || defaultCursor; - resizeEdge = cursor; -} - -function onMouseMove(e) { - if (shouldDrag) { - shouldDrag = false; - let mousePressed = e.buttons !== undefined ? e.buttons : e.which; - if (mousePressed > 0) { - invoke("wails:drag"); - return; - } - } - if (!resizable || !IsWindows()) { - return; - } - if (defaultCursor == null) { - defaultCursor = document.documentElement.style.cursor; - } - let resizeHandleHeight = GetFlag("system.resizeHandleHeight") || 5; - let resizeHandleWidth = GetFlag("system.resizeHandleWidth") || 5; - - // Extra pixels for the corner areas - let cornerExtra = GetFlag("resizeCornerExtra") || 10; - - let rightBorder = window.outerWidth - e.clientX < resizeHandleWidth; - let leftBorder = e.clientX < resizeHandleWidth; - let topBorder = e.clientY < resizeHandleHeight; - let bottomBorder = window.outerHeight - e.clientY < resizeHandleHeight; - - // Adjust for corners - let rightCorner = window.outerWidth - e.clientX < (resizeHandleWidth + cornerExtra); - let leftCorner = e.clientX < (resizeHandleWidth + cornerExtra); - let topCorner = e.clientY < (resizeHandleHeight + cornerExtra); - let bottomCorner = window.outerHeight - e.clientY < (resizeHandleHeight + cornerExtra); - - // If we aren't on an edge, but were, reset the cursor to default - if (!leftBorder && !rightBorder && !topBorder && !bottomBorder && resizeEdge !== undefined) { - setResize(); - } - // Adjusted for corner areas - else if (rightCorner && bottomCorner) setResize("se-resize"); - else if (leftCorner && bottomCorner) setResize("sw-resize"); - else if (leftCorner && topCorner) setResize("nw-resize"); - else if (topCorner && rightCorner) setResize("ne-resize"); - else if (leftBorder) setResize("w-resize"); - else if (topBorder) setResize("n-resize"); - else if (bottomBorder) setResize("s-resize"); - else if (rightBorder) setResize("e-resize"); -} \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.ts new file mode 100644 index 000000000..919c03c2c --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/drag.ts @@ -0,0 +1,237 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { invoke, IsWindows } from "./system.js"; +import { GetFlag } from "./flags.js"; +import { canTrackButtons, eventTarget } from "./utils.js"; + +// Setup +let canDrag = false; +let dragging = false; + +let resizable = false; +let canResize = false; +let resizing = false; +let resizeEdge: string = ""; +let defaultCursor = "auto"; + +let buttons = 0; +const buttonsTracked = canTrackButtons(); + +window._wails = window._wails || {}; +window._wails.setResizable = (value: boolean): void => { + resizable = value; + if (!resizable) { + // Stop resizing if in progress. + canResize = resizing = false; + setResize(); + } +}; + +window.addEventListener('mousedown', update, { capture: true }); +window.addEventListener('mousemove', update, { capture: true }); +window.addEventListener('mouseup', update, { capture: true }); +for (const ev of ['click', 'contextmenu', 'dblclick']) { + window.addEventListener(ev, suppressEvent, { capture: true }); +} + +function suppressEvent(event: Event) { + // Suppress click events while resizing or dragging. + if (dragging || resizing) { + event.stopImmediatePropagation(); + event.stopPropagation(); + event.preventDefault(); + } +} + +// Use constants to avoid comparing strings multiple times. +const MouseDown = 0; +const MouseUp = 1; +const MouseMove = 2; + +function update(event: MouseEvent) { + // Windows suppresses mouse events at the end of dragging or resizing, + // so we need to be smart and synthesize button events. + + let eventType: number, eventButtons = event.buttons; + switch (event.type) { + case 'mousedown': + eventType = MouseDown; + if (!buttonsTracked) { eventButtons = buttons | (1 << event.button); } + break; + case 'mouseup': + eventType = MouseUp; + if (!buttonsTracked) { eventButtons = buttons & ~(1 << event.button); } + break; + default: + eventType = MouseMove; + if (!buttonsTracked) { eventButtons = buttons; } + break; + } + + let released = buttons & ~eventButtons; + let pressed = eventButtons & ~buttons; + + buttons = eventButtons; + + // Synthesize a release-press sequence if we detect a press of an already pressed button. + if (eventType === MouseDown && !(pressed & event.button)) { + released |= (1 << event.button); + pressed |= (1 << event.button); + } + + // Suppress all button events during dragging and resizing, + // unless this is a mouseup event that is ending a drag action. + if ( + eventType !== MouseMove // Fast path for mousemove + && resizing + || ( + dragging + && ( + eventType === MouseDown + || event.button !== 0 + ) + ) + ) { + event.stopImmediatePropagation(); + event.stopPropagation(); + event.preventDefault(); + } + + // Handle releases + if (released & 1) { primaryUp(event); } + // Handle presses + if (pressed & 1) { primaryDown(event); } + + // Handle mousemove + if (eventType === MouseMove) { onMouseMove(event); }; +} + +function primaryDown(event: MouseEvent): void { + // Reset readiness state. + canDrag = false; + canResize = false; + + // Ignore repeated clicks on macOS and Linux. + if (!IsWindows()) { + if (event.type === 'mousedown' && event.button === 0 && event.detail !== 1) { + return; + } + } + + if (resizeEdge) { + // Ready to resize if the primary button was pressed for the first time. + canResize = true; + // Do not start drag operations when on resize edges. + return; + } + + // Retrieve target element + const target = eventTarget(event); + + // Ready to drag if the primary button was pressed for the first time on a draggable element. + // Ignore clicks on the scrollbar. + const style = window.getComputedStyle(target); + canDrag = ( + style.getPropertyValue("--wails-draggable").trim() === "drag" + && ( + event.offsetX - parseFloat(style.paddingLeft) < target.clientWidth + && event.offsetY - parseFloat(style.paddingTop) < target.clientHeight + ) + ); +} + +function primaryUp(event: MouseEvent) { + // Stop dragging and resizing. + canDrag = false; + dragging = false; + canResize = false; + resizing = false; +} + +const cursorForEdge = Object.freeze({ + "se-resize": "nwse-resize", + "sw-resize": "nesw-resize", + "nw-resize": "nwse-resize", + "ne-resize": "nesw-resize", + "w-resize": "ew-resize", + "n-resize": "ns-resize", + "s-resize": "ns-resize", + "e-resize": "ew-resize", +}) + +function setResize(edge?: keyof typeof cursorForEdge): void { + if (edge) { + if (!resizeEdge) { defaultCursor = document.body.style.cursor; } + document.body.style.cursor = cursorForEdge[edge]; + } else if (!edge && resizeEdge) { + document.body.style.cursor = defaultCursor; + } + + resizeEdge = edge || ""; +} + +function onMouseMove(event: MouseEvent): void { + if (canResize && resizeEdge) { + // Start resizing. + resizing = true; + invoke("wails:resize:" + resizeEdge); + } else if (canDrag) { + // Start dragging. + dragging = true; + invoke("wails:drag"); + } + + if (dragging || resizing) { + // Either drag or resize is ongoing, + // reset readiness and stop processing. + canDrag = canResize = false; + return; + } + + if (!resizable || !IsWindows()) { + if (resizeEdge) { setResize(); } + return; + } + + const resizeHandleHeight = GetFlag("system.resizeHandleHeight") || 5; + const resizeHandleWidth = GetFlag("system.resizeHandleWidth") || 5; + + // Extra pixels for the corner areas. + const cornerExtra = GetFlag("resizeCornerExtra") || 10; + + const rightBorder = (window.outerWidth - event.clientX) < resizeHandleWidth; + const leftBorder = event.clientX < resizeHandleWidth; + const topBorder = event.clientY < resizeHandleHeight; + const bottomBorder = (window.outerHeight - event.clientY) < resizeHandleHeight; + + // Adjust for corner areas. + const rightCorner = (window.outerWidth - event.clientX) < (resizeHandleWidth + cornerExtra); + const leftCorner = event.clientX < (resizeHandleWidth + cornerExtra); + const topCorner = event.clientY < (resizeHandleHeight + cornerExtra); + const bottomCorner = (window.outerHeight - event.clientY) < (resizeHandleHeight + cornerExtra); + + if (!leftCorner && !topCorner && !bottomCorner && !rightCorner) { + // Optimisation: out of all corner areas implies out of borders. + setResize(); + } + // Detect corners. + else if (rightCorner && bottomCorner) setResize("se-resize"); + else if (leftCorner && bottomCorner) setResize("sw-resize"); + else if (leftCorner && topCorner) setResize("nw-resize"); + else if (topCorner && rightCorner) setResize("ne-resize"); + // Detect borders. + else if (leftBorder) setResize("w-resize"); + else if (topBorder) setResize("n-resize"); + else if (bottomBorder) setResize("s-resize"); + else if (rightBorder) setResize("e-resize"); + // Out of border area. + else setResize(); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts similarity index 96% rename from v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.js rename to v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts index 9c7feed7c..5c5de0ce2 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts @@ -1,6 +1,18 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ -export const EventTypes = { - Windows: { +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export const Types = Object.freeze({ + Windows: Object.freeze({ APMPowerSettingChange: "windows:APMPowerSettingChange", APMPowerStatusChange: "windows:APMPowerStatusChange", APMResumeAutomatic: "windows:APMResumeAutomatic", @@ -45,8 +57,8 @@ export const EventTypes = { WindowUnMinimise: "windows:WindowUnMinimise", WindowMaximise: "windows:WindowMaximise", WindowUnMaximise: "windows:WindowUnMaximise", - }, - Mac: { + }), + Mac: Object.freeze({ ApplicationDidBecomeActive: "mac:ApplicationDidBecomeActive", ApplicationDidChangeBackingProperties: "mac:ApplicationDidChangeBackingProperties", ApplicationDidChangeEffectiveAppearance: "mac:ApplicationDidChangeEffectiveAppearance", @@ -179,8 +191,8 @@ export const EventTypes = { WindowZoomIn: "mac:WindowZoomIn", WindowZoomOut: "mac:WindowZoomOut", WindowZoomReset: "mac:WindowZoomReset", - }, - Linux: { + }), + Linux: Object.freeze({ ApplicationStartup: "linux:ApplicationStartup", SystemThemeChanged: "linux:SystemThemeChanged", WindowDeleteEvent: "linux:WindowDeleteEvent", @@ -189,8 +201,8 @@ export const EventTypes = { WindowFocusIn: "linux:WindowFocusIn", WindowFocusOut: "linux:WindowFocusOut", WindowLoadChanged: "linux:WindowLoadChanged", - }, - Common: { + }), + Common: Object.freeze({ ApplicationOpenedWithFile: "common:ApplicationOpenedWithFile", ApplicationStarted: "common:ApplicationStarted", ThemeChanged: "common:ThemeChanged", @@ -215,5 +227,5 @@ export const EventTypes = { WindowZoomIn: "common:WindowZoomIn", WindowZoomOut: "common:WindowZoomOut", WindowZoomReset: "common:WindowZoomReset", - }, -}; + }), +}); diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/events.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/events.js deleted file mode 100644 index afbcbb922..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/events.js +++ /dev/null @@ -1,140 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -/** - * @typedef {import("./types").WailsEvent} WailsEvent - */ -import {newRuntimeCallerWithID, objectNames} from "./runtime"; - -import {EventTypes} from "./event_types"; -export const Types = EventTypes; - -// Setup -window._wails = window._wails || {}; -window._wails.dispatchWailsEvent = dispatchWailsEvent; - -const call = newRuntimeCallerWithID(objectNames.Events, ''); -const EmitMethod = 0; -const eventListeners = new Map(); - -class Listener { - constructor(eventName, callback, maxCallbacks) { - this.eventName = eventName; - this.maxCallbacks = maxCallbacks || -1; - this.Callback = (data) => { - callback(data); - if (this.maxCallbacks === -1) return false; - this.maxCallbacks -= 1; - return this.maxCallbacks === 0; - }; - } -} - -export class WailsEvent { - constructor(name, data = null) { - this.name = name; - this.data = data; - } -} - -export function setup() { -} - -function dispatchWailsEvent(event) { - let listeners = eventListeners.get(event.name); - if (listeners) { - let toRemove = listeners.filter(listener => { - let remove = listener.Callback(event); - if (remove) return true; - }); - if (toRemove.length > 0) { - listeners = listeners.filter(l => !toRemove.includes(l)); - if (listeners.length === 0) eventListeners.delete(event.name); - else eventListeners.set(event.name, listeners); - } - } -} - -/** - * Register a callback function to be called multiple times for a specific event. - * - * @param {string} eventName - The name of the event to register the callback for. - * @param {function} callback - The callback function to be called when the event is triggered. - * @param {number} maxCallbacks - The maximum number of times the callback can be called for the event. Once the maximum number is reached, the callback will no longer be called. - * - @return {function} - A function that, when called, will unregister the callback from the event. - */ -export function OnMultiple(eventName, callback, maxCallbacks) { - let listeners = eventListeners.get(eventName) || []; - const thisListener = new Listener(eventName, callback, maxCallbacks); - listeners.push(thisListener); - eventListeners.set(eventName, listeners); - return () => listenerOff(thisListener); -} - -/** - * Registers a callback function to be executed when the specified event occurs. - * - * @param {string} eventName - The name of the event. - * @param {function} callback - The callback function to be executed. It takes no parameters. - * @return {function} - A function that, when called, will unregister the callback from the event. */ -export function On(eventName, callback) { return OnMultiple(eventName, callback, -1); } - -/** - * Registers a callback function to be executed only once for the specified event. - * - * @param {string} eventName - The name of the event. - * @param {function} callback - The function to be executed when the event occurs. - * @return {function} - A function that, when called, will unregister the callback from the event. - */ -export function Once(eventName, callback) { return OnMultiple(eventName, callback, 1); } - -/** - * Removes the specified listener from the event listeners collection. - * If all listeners for the event are removed, the event key is deleted from the collection. - * - * @param {Object} listener - The listener to be removed. - */ -function listenerOff(listener) { - const eventName = listener.eventName; - let listeners = eventListeners.get(eventName).filter(l => l !== listener); - if (listeners.length === 0) eventListeners.delete(eventName); - else eventListeners.set(eventName, listeners); -} - - -/** - * Removes event listeners for the specified event names. - * - * @param {string} eventName - The name of the event to remove listeners for. - * @param {...string} additionalEventNames - Additional event names to remove listeners for. - * @return {undefined} - */ -export function Off(eventName, ...additionalEventNames) { - let eventsToRemove = [eventName, ...additionalEventNames]; - eventsToRemove.forEach(eventName => eventListeners.delete(eventName)); -} -/** - * Removes all event listeners. - * - * @function OffAll - * @returns {void} - */ -export function OffAll() { eventListeners.clear(); } - -/** - * Emits an event using the given event name. - * - * @param {WailsEvent} event - The name of the event to emit. - * @returns {any} - The result of the emitted event. - */ -export function Emit(event) { return call(EmitMethod, event); } diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/events.test.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/events.test.js index c46868cb0..e8157a17a 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/events.test.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/events.test.js @@ -1,18 +1,28 @@ - -import { On, Off, OffAll, OnMultiple, WailsEvent, dispatchWailsEvent, eventListeners, Once } from './events'; - +import { On, Off, OffAll, OnMultiple, WailsEvent, Once } from './events'; +import { eventListeners } from "./listener"; import { expect, describe, it, vi, afterEach, beforeEach } from 'vitest'; +const dispatchWailsEvent = window._wails.dispatchWailsEvent; + afterEach(() => { OffAll(); vi.resetAllMocks(); }); -describe('OnMultiple', () => { - let testEvent = new WailsEvent('a', {}); +describe("OnMultiple", () => { + const testEvent = { name: 'a', data: ["hello", "events"] }; + const cb = vi.fn((ev) => { + expect(ev).toBeInstanceOf(WailsEvent); + expect(ev).toMatchObject(testEvent); + }); - it('should stop after a specified number of times', () => { - const cb = vi.fn(); + it("should dispatch a properly initialised WailsEvent", () => { + OnMultiple('a', cb, 5); + dispatchWailsEvent(testEvent); + expect(cb).toHaveBeenCalled(); + }); + + it("should stop after the specified number of times", () => { OnMultiple('a', cb, 5); dispatchWailsEvent(testEvent); dispatchWailsEvent(testEvent); @@ -20,77 +30,126 @@ describe('OnMultiple', () => { dispatchWailsEvent(testEvent); dispatchWailsEvent(testEvent); dispatchWailsEvent(testEvent); - expect(cb).toBeCalledTimes(5); + expect(cb).toHaveBeenCalledTimes(5); }); - it('should return a cancel fn', () => { - const cb = vi.fn() - const cancel = OnMultiple('a', cb, 5) - dispatchWailsEvent(testEvent) - dispatchWailsEvent(testEvent) - cancel() - dispatchWailsEvent(testEvent) - dispatchWailsEvent(testEvent) - expect(cb).toBeCalledTimes(2) - }) -}) - -describe('On', () => { - it('should create a listener with a count of -1', () => { - On('a', () => {}) - expect(eventListeners.get("a")[0].maxCallbacks).toBe(-1) - }) - - it('should return a cancel fn', () => { - const cancel = On('a', () => {}) + it("should return a cancel fn", () => { + const cancel = OnMultiple('a', cb, 5); + dispatchWailsEvent(testEvent); + dispatchWailsEvent(testEvent); cancel(); - }) -}) + dispatchWailsEvent(testEvent); + dispatchWailsEvent(testEvent); + expect(cb).toBeCalledTimes(2); + }); +}); -describe('Once', () => { - it('should create a listener with a count of 1', () => { - Once('a', () => {}) - expect(eventListeners.get("a")[0].maxCallbacks).toBe(1) - }) +describe("On", () => { + let testEvent = { name: 'a', data: ["hello", "events"], sender: "window" }; + const cb = vi.fn((ev) => { + expect(ev).toBeInstanceOf(WailsEvent); + expect(ev).toMatchObject(testEvent); + }); - it('should return a cancel fn', () => { - const cancel = EventsOn('a', () => {}) + it("should dispatch a properly initialised WailsEvent", () => { + On('a', cb); + dispatchWailsEvent(testEvent); + expect(cb).toHaveBeenCalled(); + }); + + it("should never stop", () => { + On('a', cb); + expect(eventListeners.get('a')[0].maxCallbacks).toBe(-1); + dispatchWailsEvent(testEvent); + expect(eventListeners.get('a')[0].maxCallbacks).toBe(-1); + }); + + it("should return a cancel fn", () => { + const cancel = On('a', cb) + dispatchWailsEvent(testEvent); cancel(); - }) + dispatchWailsEvent(testEvent); + expect(cb).toHaveBeenCalledTimes(1); + }); +}); + +describe("Once", () => { + const testEvent = { name: 'a', data: ["hello", "events"] }; + const cb = vi.fn((ev) => { + expect(ev).toBeInstanceOf(WailsEvent); + expect(ev).toMatchObject(testEvent); + }); + + it("should dispatch a properly initialised WailsEvent", () => { + Once('a', cb); + dispatchWailsEvent(testEvent); + expect(cb).toHaveBeenCalled(); + }); + + it("should stop after one time", () => { + Once('a', cb) + dispatchWailsEvent(testEvent); + dispatchWailsEvent(testEvent); + dispatchWailsEvent(testEvent); + expect(cb).toHaveBeenCalledTimes(1); + }); + + it("should return a cancel fn", () => { + const cancel = Once('a', cb) + cancel(); + dispatchWailsEvent(testEvent); + expect(cb).not.toHaveBeenCalled(); + }); }) -describe('Off', () => { +describe("Off", () => { + const cba = vi.fn(), cbb = vi.fn(), cbc = vi.fn(); + beforeEach(() => { - On('a', () => {}) - On('a', () => {}) - On('a', () => {}) - On('b', () => {}) - On('c', () => {}) - }) + On('a', cba); + On('a', cba); + On('a', cba); + On('b', cbb); + On('c', cbc); + On('c', cbc); + }); - it('should cancel all event listeners for a single type', () => { - Off('a') - expect(eventListeners.get('a')).toBeUndefined() - expect(eventListeners.get('b')).not.toBeUndefined() - expect(eventListeners.get('c')).not.toBeUndefined() - }) + it("should cancel all event listeners for a single type", () => { + Off('a'); + dispatchWailsEvent({ name: 'a' }); + dispatchWailsEvent({ name: 'b' }); + dispatchWailsEvent({ name: 'c' }); + expect(cba).not.toHaveBeenCalled(); + expect(cbb).toHaveBeenCalledTimes(1); + expect(cbc).toHaveBeenCalledTimes(2); + }); - it('should cancel all event listeners for multiple types', () => { - Off('a', 'b') - expect(eventListeners.get('a')).toBeUndefined() - expect(eventListeners.get('b')).toBeUndefined() - expect(eventListeners.get('c')).not.toBeUndefined() - }) -}) + it("should cancel all event listeners for multiple types", () => { + Off('a', 'c') + dispatchWailsEvent({ name: 'a' }); + dispatchWailsEvent({ name: 'b' }); + dispatchWailsEvent({ name: 'c' }); + expect(cba).not.toHaveBeenCalled(); + expect(cbb).toHaveBeenCalledTimes(1); + expect(cbc).not.toHaveBeenCalled(); + }); +}); -describe('OffAll', () => { - it('should cancel all event listeners', () => { - On('a', () => {}) - On('a', () => {}) - On('a', () => {}) - On('b', () => {}) - On('c', () => {}) - OffAll() - expect(eventListeners.size).toBe(0) - }) -}) +describe("OffAll", () => { + it("should cancel all event listeners", () => { + const cba = vi.fn(), cbb = vi.fn(), cbc = vi.fn(); + On('a', cba); + On('a', cba); + On('a', cba); + On('b', cbb); + On('c', cbc); + On('c', cbc); + OffAll(); + dispatchWailsEvent({ name: 'a' }); + dispatchWailsEvent({ name: 'b' }); + dispatchWailsEvent({ name: 'c' }); + expect(cba).not.toHaveBeenCalled(); + expect(cbb).not.toHaveBeenCalled(); + expect(cbc).not.toHaveBeenCalled(); + }); +}); diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/events.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/events.ts new file mode 100644 index 000000000..d8c67b65f --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/events.ts @@ -0,0 +1,135 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { newRuntimeCaller, objectNames } from "./runtime.js"; +import { eventListeners, Listener, listenerOff } from "./listener.js"; + +// Setup +window._wails = window._wails || {}; +window._wails.dispatchWailsEvent = dispatchWailsEvent; + +const call = newRuntimeCaller(objectNames.Events); +const EmitMethod = 0; + +export { Types } from "./event_types.js"; + +/** + * The type of handlers for a given event. + */ +export type Callback = (ev: WailsEvent) => void; + +/** + * Represents a system event or a custom event emitted through wails-provided facilities. + */ +export class WailsEvent { + /** + * The name of the event. + */ + name: string; + + /** + * Optional data associated with the emitted event. + */ + data: any; + + /** + * Name of the originating window. Omitted for application events. + * Will be overridden if set manually. + */ + sender?: string; + + constructor(name: string, data: any = null) { + this.name = name; + this.data = data; + } +} + +function dispatchWailsEvent(event: any) { + let listeners = eventListeners.get(event.name); + if (!listeners) { + return; + } + + let wailsEvent = new WailsEvent(event.name, event.data); + if ('sender' in event) { + wailsEvent.sender = event.sender; + } + + listeners = listeners.filter(listener => !listener.dispatch(wailsEvent)); + if (listeners.length === 0) { + eventListeners.delete(event.name); + } else { + eventListeners.set(event.name, listeners); + } +} + +/** + * Register a callback function to be called multiple times for a specific event. + * + * @param eventName - The name of the event to register the callback for. + * @param callback - The callback function to be called when the event is triggered. + * @param maxCallbacks - The maximum number of times the callback can be called for the event. Once the maximum number is reached, the callback will no longer be called. + * @returns A function that, when called, will unregister the callback from the event. + */ +export function OnMultiple(eventName: string, callback: Callback, maxCallbacks: number) { + let listeners = eventListeners.get(eventName) || []; + const thisListener = new Listener(eventName, callback, maxCallbacks); + listeners.push(thisListener); + eventListeners.set(eventName, listeners); + return () => listenerOff(thisListener); +} + +/** + * Registers a callback function to be executed when the specified event occurs. + * + * @param eventName - The name of the event to register the callback for. + * @param callback - The callback function to be called when the event is triggered. + * @returns A function that, when called, will unregister the callback from the event. + */ +export function On(eventName: string, callback: Callback): () => void { + return OnMultiple(eventName, callback, -1); +} + +/** + * Registers a callback function to be executed only once for the specified event. + * + * @param eventName - The name of the event to register the callback for. + * @param callback - The callback function to be called when the event is triggered. + * @returns A function that, when called, will unregister the callback from the event. + */ +export function Once(eventName: string, callback: Callback): () => void { + return OnMultiple(eventName, callback, 1); +} + +/** + * Removes event listeners for the specified event names. + * + * @param eventNames - The name of the events to remove listeners for. + */ +export function Off(...eventNames: [string, ...string[]]): void { + eventNames.forEach(eventName => eventListeners.delete(eventName)); +} + +/** + * Removes all event listeners. + */ +export function OffAll(): void { + eventListeners.clear(); +} + +/** + * Emits the given event. + * + * @param event - The name of the event to emit. + * @returns A promise that will be fulfilled once the event has been emitted. + */ +export function Emit(event: WailsEvent): Promise { + return call(EmitMethod, event); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.js deleted file mode 100644 index 26be59d76..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -/** - * Retrieves the value associated with the specified key from the flag map. - * - * @param {string} keyString - The key to retrieve the value for. - * @return {*} - The value associated with the specified key. - */ -export function GetFlag(keyString) { - try { - return window._wails.flags[keyString]; - } catch (e) { - throw new Error("Unable to retrieve flag '" + keyString + "': " + e); - } -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.ts new file mode 100644 index 000000000..9e4ad2427 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/flags.ts @@ -0,0 +1,23 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +/** + * Retrieves the value associated with the specified key from the flag map. + * + * @param key - The key to retrieve the value for. + * @return The value associated with the specified key. + */ +export function GetFlag(key: string): any { + try { + return window._wails.flags[key]; + } catch (e) { + throw new Error("Unable to retrieve flag '" + key + "': " + e, { cause: e }); + } +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/global.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/global.d.ts new file mode 100644 index 000000000..231896ce1 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/global.d.ts @@ -0,0 +1,17 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +declare global { + interface Window { + _wails: Record; + } +} + +export {}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/index.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/index.js deleted file mode 100644 index 071c60092..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/index.js +++ /dev/null @@ -1,60 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -// Setup -window._wails = window._wails || {}; - -import "./contextmenu"; -import "./drag"; - -// Re-export public API -import * as Application from "./application"; -import * as Browser from "./browser"; -import * as Call from "./calls"; -import * as Clipboard from "./clipboard"; -import * as Create from "./create"; -import * as Dialogs from "./dialogs"; -import * as Events from "./events"; -import * as Flags from "./flags"; -import * as Screens from "./screens"; -import * as System from "./system"; -import Window from "./window"; -import * as WML from "./wml"; - -export { - Application, - Browser, - Call, - Clipboard, - Create, - Dialogs, - Events, - Flags, - Screens, - System, - Window, - WML -}; - -let initialised = false; -export function init() { - window._wails.invoke = System.invoke; - System.invoke("wails:runtime:ready"); - initialised = true; -} - -window.addEventListener("load", () => { - if (!initialised) { - init(); - } -}); - -// Notify backend - diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/index.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/index.ts new file mode 100644 index 000000000..09d0dc243 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/index.ts @@ -0,0 +1,57 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +// Setup +window._wails = window._wails || {}; + +import "./contextmenu.js"; +import "./drag.js"; + +// Re-export public API +import * as Application from "./application.js"; +import * as Browser from "./browser.js"; +import * as Call from "./calls.js"; +import * as Clipboard from "./clipboard.js"; +import * as Create from "./create.js"; +import * as Dialogs from "./dialogs.js"; +import * as Events from "./events.js"; +import * as Flags from "./flags.js"; +import * as Screens from "./screens.js"; +import * as System from "./system.js"; +import Window from "./window.js"; +import * as WML from "./wml.js"; + +export { + Application, + Browser, + Call, + Clipboard, + Dialogs, + Events, + Flags, + Screens, + System, + Window, + WML +}; + +/** + * An internal utility consumed by the binding generator. + * + * @ignore + * @internal + */ +export { Create }; + +export * from "./cancellable.js"; + +// Notify backend +window._wails.invoke = System.invoke; +System.invoke("wails:runtime:ready"); diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/listener.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/listener.ts new file mode 100644 index 000000000..0d74debca --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/listener.ts @@ -0,0 +1,52 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +// The following utilities have been factored out of ./events.ts +// for testing purposes. + +export const eventListeners = new Map(); + +export class Listener { + eventName: string; + callback: (data: any) => void; + maxCallbacks: number; + + constructor(eventName: string, callback: (data: any) => void, maxCallbacks: number) { + this.eventName = eventName; + this.callback = callback; + this.maxCallbacks = maxCallbacks || -1; + } + + dispatch(data: any): boolean { + try { + this.callback(data); + } catch (err) { + console.error(err); + } + + if (this.maxCallbacks === -1) return false; + this.maxCallbacks -= 1; + return this.maxCallbacks === 0; + } +} + +export function listenerOff(listener: Listener): void { + let listeners = eventListeners.get(listener.eventName); + if (!listeners) { + return; + } + + listeners = listeners.filter(l => l !== listener); + if (listeners.length === 0) { + eventListeners.delete(listener.eventName); + } else { + eventListeners.set(listener.eventName, listeners); + } +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.ts similarity index 96% rename from v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.js rename to v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.ts index 37adf3fb0..bfe83048f 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/nanoid.ts @@ -27,10 +27,10 @@ // `'use`, `andom`, and `rict'` // References to the brotli default dictionary: // `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf` -let urlAlphabet = +const urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' -export let nanoid = (size = 21) => { +export function nanoid(size: number = 21): string { let id = '' // A compact alternative for `for (var i = 0; i < step; i++)`. let i = size | 0 @@ -39,4 +39,4 @@ export let nanoid = (size = 21) => { id += urlAlphabet[(Math.random() * 64) | 0] } return id -} \ No newline at end of file +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/promises_aplus.test.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/promises_aplus.test.js new file mode 100644 index 000000000..baf51e3c0 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/promises_aplus.test.js @@ -0,0 +1,44 @@ +import * as util from "util"; +import * as V from "vitest"; +import { CancellablePromise } from "./cancellable"; + +// The Promises/A+ suite handles some errors late. +process.on('rejectionHandled', function () {}); + +// The Promises/A+ suite leaves some errors unhandled. +process.on('unhandledRejection', function (reason, promise) { + if (promise instanceof CancellablePromise && reason != null && typeof reason === 'object') { + for (const key of ['dummy', 'other', 'sentinel']) { + if (reason[key] === key) { + return; + } + } + } + throw new Error(`Unhandled rejection at: ${util.inspect(promise)}; reason: ${util.inspect(reason)}`, { cause: reason }); +}); + +// Emulate a minimal version of the mocha BDD API using vitest primitives. +global.context = global.describe = V.describe; +global.specify = global.it = function it(desc, fn) { + let viTestFn = fn; + if (fn?.length) { + viTestFn = () => new Promise((done) => fn(done)); + } + V.it(desc, viTestFn); +} +global.before = function(desc, fn) { V.beforeAll(typeof desc === 'function' ? desc : fn) }; +global.after = function(desc, fn) { V.afterAll(typeof desc === 'function' ? desc : fn) }; +global.beforeEach = function(desc, fn) { V.beforeEach(typeof desc === 'function' ? desc : fn) }; +global.afterEach = function(desc, fn) { V.afterEach(typeof desc === 'function' ? desc : fn) }; + +require('promises-aplus-tests').mocha({ + resolved(value) { + return CancellablePromise.resolve(value); + }, + rejected(reason) { + return CancellablePromise.reject(reason); + }, + deferred() { + return CancellablePromise.withResolvers(); + } +}); diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.js deleted file mode 100644 index b1ae204ab..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ -import { nanoid } from './nanoid.js'; - -const runtimeURL = window.location.origin + "/wails/runtime"; - -// Object Names -export const objectNames = { - Call: 0, - Clipboard: 1, - Application: 2, - Events: 3, - ContextMenu: 4, - Dialog: 5, - Window: 6, - Screens: 7, - System: 8, - Browser: 9, - CancelCall: 10, -} -export let clientId = nanoid(); - -/** - * Creates a runtime caller function that invokes a specified method on a given object within a specified window context. - * - * @param {Object} object - The object on which the method is to be invoked. - * @param {string} windowName - The name of the window context in which the method should be called. - * @returns {Function} A runtime caller function that takes the method name and optionally arguments and invokes the method within the specified window context. - */ -export function newRuntimeCaller(object, windowName) { - return function (method, args=null) { - return runtimeCall(object + "." + method, windowName, args); - }; -} - -/** - * Creates a new runtime caller with specified ID. - * - * @param {number} object - The object to invoke the method on. - * @param {string} windowName - The name of the window. - * @return {Function} - The new runtime caller function. - */ -export function newRuntimeCallerWithID(object, windowName) { - return function (method, args=null) { - return runtimeCallWithID(object, method, windowName, args); - }; -} - - -function runtimeCall(method, windowName, args) { - return runtimeCallWithID(null, method, windowName, args); -} - -async function runtimeCallWithID(objectID, method, windowName, args) { - let url = new URL(runtimeURL); - if (objectID != null) { - url.searchParams.append("object", objectID); - } - if (method != null) { - url.searchParams.append("method", method); - } - let fetchOptions = { - headers: {}, - }; - if (windowName) { - fetchOptions.headers["x-wails-window-name"] = windowName; - } - if (args) { - url.searchParams.append("args", JSON.stringify(args)); - } - fetchOptions.headers["x-wails-client-id"] = clientId; - - let response = await fetch(url, fetchOptions); - if (!response.ok) { - throw new Error(await response.text()); - } - - if (response.headers.get("Content-Type") && response.headers.get("Content-Type").indexOf("application/json") !== -1) { - return response.json(); - } else { - return response.text(); - } -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.ts new file mode 100644 index 000000000..412427ef5 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/runtime.ts @@ -0,0 +1,67 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { nanoid } from './nanoid.js'; + +const runtimeURL = window.location.origin + "/wails/runtime"; + +// Object Names +export const objectNames = Object.freeze({ + Call: 0, + Clipboard: 1, + Application: 2, + Events: 3, + ContextMenu: 4, + Dialog: 5, + Window: 6, + Screens: 7, + System: 8, + Browser: 9, + CancelCall: 10, +}); +export let clientId = nanoid(); + +/** + * Creates a new runtime caller with specified ID. + * + * @param object - The object to invoke the method on. + * @param windowName - The name of the window. + * @return The new runtime caller function. + */ +export function newRuntimeCaller(object: number, windowName: string = '') { + return function (method: number, args: any = null) { + return runtimeCallWithID(object, method, windowName, args); + }; +} + +async function runtimeCallWithID(objectID: number, method: number, windowName: string, args: any): Promise { + let url = new URL(runtimeURL); + url.searchParams.append("object", objectID.toString()); + url.searchParams.append("method", method.toString()); + if (args) { url.searchParams.append("args", JSON.stringify(args)); } + + let headers: Record = { + ["x-wails-client-id"]: clientId + } + if (windowName) { + headers["x-wails-window-name"] = windowName; + } + + let response = await fetch(url, { headers }); + if (!response.ok) { + throw new Error(await response.text()); + } + + if ((response.headers.get("Content-Type")?.indexOf("application/json") ?? -1) !== -1) { + return response.json(); + } else { + return response.text(); + } +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.js deleted file mode 100644 index 97fc2af02..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.js +++ /dev/null @@ -1,71 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -/** - * @typedef {Object} Size - * @property {number} Width - The width. - * @property {number} Height - The height. - */ - -/** - * @typedef {Object} Rect - * @property {number} X - The X coordinate of the origin. - * @property {number} Y - The Y coordinate of the origin. - * @property {number} Width - The width of the rectangle. - * @property {number} Height - The height of the rectangle. - */ - -/** - * @typedef {Object} Screen - * @property {string} ID - Unique identifier for the screen. - * @property {string} Name - Human readable name of the screen. - * @property {number} ScaleFactor - The scale factor of the screen (DPI/96). 1 = standard DPI, 2 = HiDPI (Retina), etc. - * @property {number} X - The X coordinate of the screen. - * @property {number} Y - The Y coordinate of the screen. - * @property {Size} Size - Contains the width and height of the screen. - * @property {Rect} Bounds - Contains the bounds of the screen in terms of X, Y, Width, and Height. - * @property {Rect} PhysicalBounds - Contains the physical bounds of the screen in terms of X, Y, Width, and Height (before scaling). - * @property {Rect} WorkArea - Contains the area of the screen that is actually usable (excluding taskbar and other system UI). - * @property {Rect} PhysicalWorkArea - Contains the physical WorkArea of the screen (before scaling). - * @property {boolean} IsPrimary - True if this is the primary monitor selected by the user in the operating system. - * @property {number} Rotation - The rotation of the screen. - */ - -import { newRuntimeCallerWithID, objectNames } from "./runtime"; -const call = newRuntimeCallerWithID(objectNames.Screens, ""); - -const getAll = 0; -const getPrimary = 1; -const getCurrent = 2; - -/** - * Gets all screens. - * @returns {Promise} A promise that resolves to an array of Screen objects. - */ -export function GetAll() { - return call(getAll); -} -/** - * Gets the primary screen. - * @returns {Promise} A promise that resolves to the primary screen. - */ -export function GetPrimary() { - return call(getPrimary); -} -/** - * Gets the current active screen. - * - * @returns {Promise} A promise that resolves with the current active screen. - */ -export function GetCurrent() { - return call(getCurrent); -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.ts new file mode 100644 index 000000000..c0ecfd7be --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/screens.ts @@ -0,0 +1,88 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +export interface Size { + /** The width of a rectangular area. */ + Width: number; + /** The height of a rectangular area. */ + Height: number; +} + +export interface Rect { + /** The X coordinate of the origin. */ + X: number; + /** The Y coordinate of the origin. */ + Y: number; + /** The width of the rectangle. */ + Width: number; + /** The height of the rectangle. */ + Height: number; +} + +export interface Screen { + /** Unique identifier for the screen. */ + ID: string; + /** Human-readable name of the screen. */ + Name: string; + /** The scale factor of the screen (DPI/96). 1 = standard DPI, 2 = HiDPI (Retina), etc. */ + ScaleFactor: number; + /** The X coordinate of the screen. */ + X: number; + /** The Y coordinate of the screen. */ + Y: number; + /** Contains the width and height of the screen. */ + Size: Size; + /** Contains the bounds of the screen in terms of X, Y, Width, and Height. */ + Bounds: Rect; + /** Contains the physical bounds of the screen in terms of X, Y, Width, and Height (before scaling). */ + PhysicalBounds: Rect; + /** Contains the area of the screen that is actually usable (excluding taskbar and other system UI). */ + WorkArea: Rect; + /** Contains the physical WorkArea of the screen (before scaling). */ + PhysicalWorkArea: Rect; + /** True if this is the primary monitor selected by the user in the operating system. */ + IsPrimary: boolean; + /** The rotation of the screen. */ + Rotation: number; +} + +import { newRuntimeCaller, objectNames } from "./runtime.js"; +const call = newRuntimeCaller(objectNames.Screens); + +const getAll = 0; +const getPrimary = 1; +const getCurrent = 2; + +/** + * Gets all screens. + * + * @returns A promise that resolves to an array of Screen objects. + */ +export function GetAll(): Promise { + return call(getAll); +} + +/** + * Gets the primary screen. + * + * @returns A promise that resolves to the primary screen. + */ +export function GetPrimary(): Promise { + return call(getPrimary); +} + +/** + * Gets the current active screen. + * + * @returns A promise that resolves with the current active screen. + */ +export function GetCurrent(): Promise { + return call(getCurrent); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/system.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/system.js deleted file mode 100644 index 18287e656..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/system.js +++ /dev/null @@ -1,143 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -import {newRuntimeCallerWithID, objectNames} from "./runtime"; -let call = newRuntimeCallerWithID(objectNames.System, ''); -const systemIsDarkMode = 0; -const environment = 1; - -const _invoke = (() => { - try { - if(window?.chrome?.webview) { - return (msg) => window.chrome.webview.postMessage(msg); - } - if(window?.webkit?.messageHandlers?.external) { - return (msg) => window.webkit.messageHandlers.external.postMessage(msg); - } - } catch(e) { - console.warn('\n%c⚠️ Browser Environment Detected %c\n\n%cOnly UI previews are available in the browser. For full functionality, please run the application in desktop mode.\nMore information at: https://v3.wails.io/learn/build/#using-a-browser-for-development\n', - 'background: #ffffff; color: #000000; font-weight: bold; padding: 4px 8px; border-radius: 4px; border: 2px solid #000000;', - 'background: transparent;', - 'color: #ffffff; font-style: italic; font-weight: bold;'); - } - return null; -})(); - -export function invoke(msg) { - if (!_invoke) return; - return _invoke(msg); -} - -/** - * @function - * Retrieves the system dark mode status. - * @returns {Promise} - A promise that resolves to a boolean value indicating if the system is in dark mode. - */ -export function IsDarkMode() { - return call(systemIsDarkMode); -} - -/** - * Fetches the capabilities of the application from the server. - * - * @async - * @function Capabilities - * @returns {Promise} A promise that resolves to an object containing the capabilities. - */ -export function Capabilities() { - let response = fetch("/wails/capabilities"); - return response.json(); -} - -/** - * @typedef {Object} OSInfo - * @property {string} Branding - The branding of the OS. - * @property {string} ID - The ID of the OS. - * @property {string} Name - The name of the OS. - * @property {string} Version - The version of the OS. - */ - -/** - * @typedef {Object} EnvironmentInfo - * @property {string} Arch - The architecture of the system. - * @property {boolean} Debug - True if the application is running in debug mode, otherwise false. - * @property {string} OS - The operating system in use. - * @property {OSInfo} OSInfo - Details of the operating system. - * @property {Object} PlatformInfo - Additional platform information. - */ - -/** - * @function - * Retrieves environment details. - * @returns {Promise} - A promise that resolves to an object containing OS and system architecture. - */ -export function Environment() { - return call(environment); -} - -/** - * Checks if the current operating system is Windows. - * - * @return {boolean} True if the operating system is Windows, otherwise false. - */ -export function IsWindows() { - return window._wails.environment.OS === "windows"; -} - -/** - * Checks if the current operating system is Linux. - * - * @returns {boolean} Returns true if the current operating system is Linux, false otherwise. - */ -export function IsLinux() { - return window._wails.environment.OS === "linux"; -} - -/** - * Checks if the current environment is a macOS operating system. - * - * @returns {boolean} True if the environment is macOS, false otherwise. - */ -export function IsMac() { - return window._wails.environment.OS === "darwin"; -} - -/** - * Checks if the current environment architecture is AMD64. - * @returns {boolean} True if the current environment architecture is AMD64, false otherwise. - */ -export function IsAMD64() { - return window._wails.environment.Arch === "amd64"; -} - -/** - * Checks if the current architecture is ARM. - * - * @returns {boolean} True if the current architecture is ARM, false otherwise. - */ -export function IsARM() { - return window._wails.environment.Arch === "arm"; -} - -/** - * Checks if the current environment is ARM64 architecture. - * - * @returns {boolean} - Returns true if the environment is ARM64 architecture, otherwise returns false. - */ -export function IsARM64() { - return window._wails.environment.Arch === "arm64"; -} - -export function IsDebug() { - return window._wails.environment.Debug === true; -} - diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/system.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/system.ts new file mode 100644 index 000000000..aa95ecd24 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/system.ts @@ -0,0 +1,156 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { newRuntimeCaller, objectNames } from "./runtime.js"; + +const call = newRuntimeCaller(objectNames.System); + +const SystemIsDarkMode = 0; +const SystemEnvironment = 1; + +const _invoke = (function () { + try { + if ((window as any).chrome?.webview?.postMessage) { + return (window as any).chrome.webview.postMessage.bind((window as any).chrome.webview); + } else if ((window as any).webkit?.messageHandlers?.['external']?.postMessage) { + return (window as any).webkit.messageHandlers['external'].postMessage.bind((window as any).webkit.messageHandlers['external']); + } + } catch(e) {} + + console.warn('\n%c⚠️ Browser Environment Detected %c\n\n%cOnly UI previews are available in the browser. For full functionality, please run the application in desktop mode.\nMore information at: https://v3.wails.io/learn/build/#using-a-browser-for-development\n', + 'background: #ffffff; color: #000000; font-weight: bold; padding: 4px 8px; border-radius: 4px; border: 2px solid #000000;', + 'background: transparent;', + 'color: #ffffff; font-style: italic; font-weight: bold;'); + return null; +})(); + +export function invoke(msg: any): void { + _invoke?.(msg); +} + +/** + * Retrieves the system dark mode status. + * + * @returns A promise that resolves to a boolean value indicating if the system is in dark mode. + */ +export function IsDarkMode(): Promise { + return call(SystemIsDarkMode); +} + +/** + * Fetches the capabilities of the application from the server. + * + * @returns A promise that resolves to an object containing the capabilities. + */ +export async function Capabilities(): Promise> { + let response = await fetch("/wails/capabilities"); + if (response.ok) { + return response.json(); + } else { + throw new Error("could not fetch capabilities: " + response.statusText); + } +} + +export interface OSInfo { + /** The branding of the OS. */ + Branding: string; + /** The ID of the OS. */ + ID: string; + /** The name of the OS. */ + Name: string; + /** The version of the OS. */ + Version: string; +} + +export interface EnvironmentInfo { + /** The architecture of the system. */ + Arch: string; + /** True if the application is running in debug mode, otherwise false. */ + Debug: boolean; + /** The operating system in use. */ + OS: string; + /** Details of the operating system. */ + OSInfo: OSInfo; + /** Additional platform information. */ + PlatformInfo: Record; +} + +/** + * Retrieves environment details. + * + * @returns A promise that resolves to an object containing OS and system architecture. + */ +export function Environment(): Promise { + return call(SystemEnvironment); +} + +/** + * Checks if the current operating system is Windows. + * + * @return True if the operating system is Windows, otherwise false. + */ +export function IsWindows(): boolean { + return window._wails.environment.OS === "windows"; +} + +/** + * Checks if the current operating system is Linux. + * + * @returns Returns true if the current operating system is Linux, false otherwise. + */ +export function IsLinux(): boolean { + return window._wails.environment.OS === "linux"; +} + +/** + * Checks if the current environment is a macOS operating system. + * + * @returns True if the environment is macOS, false otherwise. + */ +export function IsMac(): boolean { + return window._wails.environment.OS === "darwin"; +} + +/** + * Checks if the current environment architecture is AMD64. + * + * @returns True if the current environment architecture is AMD64, false otherwise. + */ +export function IsAMD64(): boolean { + return window._wails.environment.Arch === "amd64"; +} + +/** + * Checks if the current architecture is ARM. + * + * @returns True if the current architecture is ARM, false otherwise. + */ +export function IsARM(): boolean { + return window._wails.environment.Arch === "arm"; +} + +/** + * Checks if the current environment is ARM64 architecture. + * + * @returns Returns true if the environment is ARM64 architecture, otherwise returns false. + */ +export function IsARM64(): boolean { + return window._wails.environment.Arch === "arm64"; +} + +/** + * Reports whether the app is being run in debug mode. + * + * @returns True if the app is being run in debug mode. + */ +export function IsDebug(): boolean { + return Boolean(window._wails.environment.Debug); +} + diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/utils.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/utils.ts similarity index 75% rename from v3/internal/runtime/desktop/@wailsio/runtime/src/utils.js rename to v3/internal/runtime/desktop/@wailsio/runtime/src/utils.ts index b11035a54..35b09463b 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/utils.js +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/utils.ts @@ -10,10 +10,10 @@ The electron alternative for Go /** * Logs a message to the console with custom formatting. - * @param {string} message - The message to be logged. - * @return {void} + * + * @param message - The message to be logged. */ -export function debugLog(message) { +export function debugLog(message: any) { // eslint-disable-next-line console.log( '%c wails3 %c ' + message + ' ', @@ -22,11 +22,17 @@ export function debugLog(message) { ); } +/** + * Checks whether the webview supports the {@link MouseEvent#buttons} property. + * Looking at you macOS High Sierra! + */ +export function canTrackButtons(): boolean { + return (new MouseEvent('mousedown')).buttons === 0; +} + /** * Checks whether the browser supports removing listeners by triggering an AbortSignal - * (see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal) - * - * @return {boolean} + * (see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal). */ export function canAbortListeners() { if (!EventTarget || !AbortSignal || !AbortController) @@ -43,6 +49,19 @@ export function canAbortListeners() { return result; } +/** + * Resolves the closest HTMLElement ancestor of an event's target. + */ +export function eventTarget(event: Event): HTMLElement { + if (event.target instanceof HTMLElement) { + return event.target; + } else if (!(event.target instanceof HTMLElement) && event.target instanceof Node) { + return event.target.parentElement ?? document.body; + } else { + return document.body; + } +} + /*** This technique for proper load detection is taken from HTMX: @@ -75,9 +94,9 @@ export function canAbortListeners() { ***/ let isReady = false; -document.addEventListener('DOMContentLoaded', () => isReady = true); +document.addEventListener('DOMContentLoaded', () => { isReady = true }); -export function whenReady(callback) { +export function whenReady(callback: () => void) { if (isReady || document.readyState === 'complete') { callback(); } else { diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/window.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/window.js deleted file mode 100644 index b02729974..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/window.js +++ /dev/null @@ -1,638 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -/* jshint esversion: 9 */ - -// Import screen jsdoc definition from ./screens.js -/** - * @typedef {import("./screens").Screen} Screen - */ - - -/** - * A record describing the position of a window. - * - * @typedef {Object} Position - * @property {number} x - The horizontal position of the window - * @property {number} y - The vertical position of the window - */ - - -/** - * A record describing the size of a window. - * - * @typedef {Object} Size - * @property {number} width - The width of the window - * @property {number} height - The height of the window - */ - - -import {newRuntimeCallerWithID, objectNames} from "./runtime"; - -const PositionMethod = 0; -const CenterMethod = 1; -const CloseMethod = 2; -const DisableSizeConstraintsMethod = 3; -const EnableSizeConstraintsMethod = 4; -const FocusMethod = 5; -const ForceReloadMethod = 6; -const FullscreenMethod = 7; -const GetScreenMethod = 8; -const GetZoomMethod = 9; -const HeightMethod = 10; -const HideMethod = 11; -const IsFocusedMethod = 12; -const IsFullscreenMethod = 13; -const IsMaximisedMethod = 14; -const IsMinimisedMethod = 15; -const MaximiseMethod = 16; -const MinimiseMethod = 17; -const NameMethod = 18; -const OpenDevToolsMethod = 19; -const RelativePositionMethod = 20; -const ReloadMethod = 21; -const ResizableMethod = 22; -const RestoreMethod = 23; -const SetPositionMethod = 24; -const SetAlwaysOnTopMethod = 25; -const SetBackgroundColourMethod = 26; -const SetFramelessMethod = 27; -const SetFullscreenButtonEnabledMethod = 28; -const SetMaxSizeMethod = 29; -const SetMinSizeMethod = 30; -const SetRelativePositionMethod = 31; -const SetResizableMethod = 32; -const SetSizeMethod = 33; -const SetTitleMethod = 34; -const SetZoomMethod = 35; -const ShowMethod = 36; -const SizeMethod = 37; -const ToggleFullscreenMethod = 38; -const ToggleMaximiseMethod = 39; -const UnFullscreenMethod = 40; -const UnMaximiseMethod = 41; -const UnMinimiseMethod = 42; -const WidthMethod = 43; -const ZoomMethod = 44; -const ZoomInMethod = 45; -const ZoomOutMethod = 46; -const ZoomResetMethod = 47; - -/** - * @type {symbol} - */ -const caller = Symbol(); - -export class Window { - /** - * Initialises a window object with the specified name. - * - * @private - * @param {string} name - The name of the target window. - */ - constructor(name = '') { - /** - * @private - * @name {@link caller} - * @type {(...args: any[]) => any} - */ - this[caller] = newRuntimeCallerWithID(objectNames.Window, name) - - // bind instance method to make them easily usable in event handlers - for (const method of Object.getOwnPropertyNames(Window.prototype)) { - if ( - method !== "constructor" - && typeof this[method] === "function" - ) { - this[method] = this[method].bind(this); - } - } - } - - /** - * Gets the specified window. - * - * @public - * @param {string} name - The name of the window to get. - * @return {Window} - The corresponding window object. - */ - Get(name) { - return new Window(name); - } - - /** - * Returns the absolute position of the window. - * - * @public - * @return {Promise} - The current absolute position of the window. - */ - Position() { - return this[caller](PositionMethod); - } - - /** - * Centers the window on the screen. - * - * @public - * @return {Promise} - */ - Center() { - return this[caller](CenterMethod); - } - - /** - * Closes the window. - * - * @public - * @return {Promise} - */ - Close() { - return this[caller](CloseMethod); - } - - /** - * Disables min/max size constraints. - * - * @public - * @return {Promise} - */ - DisableSizeConstraints() { - return this[caller](DisableSizeConstraintsMethod); - } - - /** - * Enables min/max size constraints. - * - * @public - * @return {Promise} - */ - EnableSizeConstraints() { - return this[caller](EnableSizeConstraintsMethod); - } - - /** - * Focuses the window. - * - * @public - * @return {Promise} - */ - Focus() { - return this[caller](FocusMethod); - } - - /** - * Forces the window to reload the page assets. - * - * @public - * @return {Promise} - */ - ForceReload() { - return this[caller](ForceReloadMethod); - } - - /** - * Doc. - * - * @public - * @return {Promise} - */ - Fullscreen() { - return this[caller](FullscreenMethod); - } - - /** - * Returns the screen that the window is on. - * - * @public - * @return {Promise} - The screen the window is currently on - */ - GetScreen() { - return this[caller](GetScreenMethod); - } - - /** - * Returns the current zoom level of the window. - * - * @public - * @return {Promise} - The current zoom level - */ - GetZoom() { - return this[caller](GetZoomMethod); - } - - /** - * Returns the height of the window. - * - * @public - * @return {Promise} - The current height of the window - */ - Height() { - return this[caller](HeightMethod); - } - - /** - * Hides the window. - * - * @public - * @return {Promise} - */ - Hide() { - return this[caller](HideMethod); - } - - /** - * Returns true if the window is focused. - * - * @public - * @return {Promise} - Whether the window is currently focused - */ - IsFocused() { - return this[caller](IsFocusedMethod); - } - - /** - * Returns true if the window is fullscreen. - * - * @public - * @return {Promise} - Whether the window is currently fullscreen - */ - IsFullscreen() { - return this[caller](IsFullscreenMethod); - } - - /** - * Returns true if the window is maximised. - * - * @public - * @return {Promise} - Whether the window is currently maximised - */ - IsMaximised() { - return this[caller](IsMaximisedMethod); - } - - /** - * Returns true if the window is minimised. - * - * @public - * @return {Promise} - Whether the window is currently minimised - */ - IsMinimised() { - return this[caller](IsMinimisedMethod); - } - - /** - * Maximises the window. - * - * @public - * @return {Promise} - */ - Maximise() { - return this[caller](MaximiseMethod); - } - - /** - * Minimises the window. - * - * @public - * @return {Promise} - */ - Minimise() { - return this[caller](MinimiseMethod); - } - - /** - * Returns the name of the window. - * - * @public - * @return {Promise} - The name of the window - */ - Name() { - return this[caller](NameMethod); - } - - /** - * Opens the development tools pane. - * - * @public - * @return {Promise} - */ - OpenDevTools() { - return this[caller](OpenDevToolsMethod); - } - - /** - * Returns the relative position of the window to the screen. - * - * @public - * @return {Promise} - The current relative position of the window - */ - RelativePosition() { - return this[caller](RelativePositionMethod); - } - - /** - * Reloads the page assets. - * - * @public - * @return {Promise} - */ - Reload() { - return this[caller](ReloadMethod); - } - - /** - * Returns true if the window is resizable. - * - * @public - * @return {Promise} - Whether the window is currently resizable - */ - Resizable() { - return this[caller](ResizableMethod); - } - - /** - * Restores the window to its previous state if it was previously minimised, maximised or fullscreen. - * - * @public - * @return {Promise} - */ - Restore() { - return this[caller](RestoreMethod); - } - - /** - * Sets the absolute position of the window. - * - * @public - * @param {number} x - The desired horizontal absolute position of the window - * @param {number} y - The desired vertical absolute position of the window - * @return {Promise} - */ - SetPosition(x, y) { - return this[caller](SetPositionMethod, { x, y }); - } - - /** - * Sets the window to be always on top. - * - * @public - * @param {boolean} alwaysOnTop - Whether the window should stay on top - * @return {Promise} - */ - SetAlwaysOnTop(alwaysOnTop) { - return this[caller](SetAlwaysOnTopMethod, { alwaysOnTop }); - } - - /** - * Sets the background colour of the window. - * - * @public - * @param {number} r - The desired red component of the window background - * @param {number} g - The desired green component of the window background - * @param {number} b - The desired blue component of the window background - * @param {number} a - The desired alpha component of the window background - * @return {Promise} - */ - SetBackgroundColour(r, g, b, a) { - return this[caller](SetBackgroundColourMethod, { r, g, b, a }); - } - - /** - * Removes the window frame and title bar. - * - * @public - * @param {boolean} frameless - Whether the window should be frameless - * @return {Promise} - */ - SetFrameless(frameless) { - return this[caller](SetFramelessMethod, { frameless }); - } - - /** - * Disables the system fullscreen button. - * - * @public - * @param {boolean} enabled - Whether the fullscreen button should be enabled - * @return {Promise} - */ - SetFullscreenButtonEnabled(enabled) { - return this[caller](SetFullscreenButtonEnabledMethod, { enabled }); - } - - /** - * Sets the maximum size of the window. - * - * @public - * @param {number} width - The desired maximum width of the window - * @param {number} height - The desired maximum height of the window - * @return {Promise} - */ - SetMaxSize(width, height) { - return this[caller](SetMaxSizeMethod, { width, height }); - } - - /** - * Sets the minimum size of the window. - * - * @public - * @param {number} width - The desired minimum width of the window - * @param {number} height - The desired minimum height of the window - * @return {Promise} - */ - SetMinSize(width, height) { - return this[caller](SetMinSizeMethod, { width, height }); - } - - /** - * Sets the relative position of the window to the screen. - * - * @public - * @param {number} x - The desired horizontal relative position of the window - * @param {number} y - The desired vertical relative position of the window - * @return {Promise} - */ - SetRelativePosition(x, y) { - return this[caller](SetRelativePositionMethod, { x, y }); - } - - /** - * Sets whether the window is resizable. - * - * @public - * @param {boolean} resizable - Whether the window should be resizable - * @return {Promise} - */ - SetResizable(resizable) { - return this[caller](SetResizableMethod, { resizable }); - } - - /** - * Sets the size of the window. - * - * @public - * @param {number} width - The desired width of the window - * @param {number} height - The desired height of the window - * @return {Promise} - */ - SetSize(width, height) { - return this[caller](SetSizeMethod, { width, height }); - } - - /** - * Sets the title of the window. - * - * @public - * @param {string} title - The desired title of the window - * @return {Promise} - */ - SetTitle(title) { - return this[caller](SetTitleMethod, { title }); - } - - /** - * Sets the zoom level of the window. - * - * @public - * @param {number} zoom - The desired zoom level - * @return {Promise} - */ - SetZoom(zoom) { - return this[caller](SetZoomMethod, { zoom }); - } - - /** - * Shows the window. - * - * @public - * @return {Promise} - */ - Show() { - return this[caller](ShowMethod); - } - - /** - * Returns the size of the window. - * - * @public - * @return {Promise} - The current size of the window - */ - Size() { - return this[caller](SizeMethod); - } - - /** - * Toggles the window between fullscreen and normal. - * - * @public - * @return {Promise} - */ - ToggleFullscreen() { - return this[caller](ToggleFullscreenMethod); - } - - /** - * Toggles the window between maximised and normal. - * - * @public - * @return {Promise} - */ - ToggleMaximise() { - return this[caller](ToggleMaximiseMethod); - } - - /** - * Un-fullscreens the window. - * - * @public - * @return {Promise} - */ - UnFullscreen() { - return this[caller](UnFullscreenMethod); - } - - /** - * Un-maximises the window. - * - * @public - * @return {Promise} - */ - UnMaximise() { - return this[caller](UnMaximiseMethod); - } - - /** - * Un-minimises the window. - * - * @public - * @return {Promise} - */ - UnMinimise() { - return this[caller](UnMinimiseMethod); - } - - /** - * Returns the width of the window. - * - * @public - * @return {Promise} - The current width of the window - */ - Width() { - return this[caller](WidthMethod); - } - - /** - * Zooms the window. - * - * @public - * @return {Promise} - */ - Zoom() { - return this[caller](ZoomMethod); - } - - /** - * Increases the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - ZoomIn() { - return this[caller](ZoomInMethod); - } - - /** - * Decreases the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - ZoomOut() { - return this[caller](ZoomOutMethod); - } - - /** - * Resets the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - ZoomReset() { - return this[caller](ZoomResetMethod); - } -} - -/** - * The window within which the script is running. - * - * @type {Window} - */ -const thisWindow = new Window(''); - -export default thisWindow; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/window.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/window.ts new file mode 100644 index 000000000..10bef1f08 --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/window.ts @@ -0,0 +1,520 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import {newRuntimeCaller, objectNames} from "./runtime.js"; +import type { Screen } from "./screens.js"; + +const PositionMethod = 0; +const CenterMethod = 1; +const CloseMethod = 2; +const DisableSizeConstraintsMethod = 3; +const EnableSizeConstraintsMethod = 4; +const FocusMethod = 5; +const ForceReloadMethod = 6; +const FullscreenMethod = 7; +const GetScreenMethod = 8; +const GetZoomMethod = 9; +const HeightMethod = 10; +const HideMethod = 11; +const IsFocusedMethod = 12; +const IsFullscreenMethod = 13; +const IsMaximisedMethod = 14; +const IsMinimisedMethod = 15; +const MaximiseMethod = 16; +const MinimiseMethod = 17; +const NameMethod = 18; +const OpenDevToolsMethod = 19; +const RelativePositionMethod = 20; +const ReloadMethod = 21; +const ResizableMethod = 22; +const RestoreMethod = 23; +const SetPositionMethod = 24; +const SetAlwaysOnTopMethod = 25; +const SetBackgroundColourMethod = 26; +const SetFramelessMethod = 27; +const SetFullscreenButtonEnabledMethod = 28; +const SetMaxSizeMethod = 29; +const SetMinSizeMethod = 30; +const SetRelativePositionMethod = 31; +const SetResizableMethod = 32; +const SetSizeMethod = 33; +const SetTitleMethod = 34; +const SetZoomMethod = 35; +const ShowMethod = 36; +const SizeMethod = 37; +const ToggleFullscreenMethod = 38; +const ToggleMaximiseMethod = 39; +const UnFullscreenMethod = 40; +const UnMaximiseMethod = 41; +const UnMinimiseMethod = 42; +const WidthMethod = 43; +const ZoomMethod = 44; +const ZoomInMethod = 45; +const ZoomOutMethod = 46; +const ZoomResetMethod = 47; + +/** + * A record describing the position of a window. + */ +interface Position { + /** The horizontal position of the window. */ + x: number; + /** The vertical position of the window. */ + y: number; +} + +/** + * A record describing the size of a window. + */ +interface Size { + /** The width of the window. */ + width: number; + /** The height of the window. */ + height: number; +} + +// Private field names. +const callerSym = Symbol("caller"); + +class Window { + // Private fields. + private [callerSym]: (message: number, args?: any) => Promise; + + /** + * Initialises a window object with the specified name. + * + * @private + * @param name - The name of the target window. + */ + constructor(name: string = '') { + this[callerSym] = newRuntimeCaller(objectNames.Window, name) + + // bind instance method to make them easily usable in event handlers + for (const method of Object.getOwnPropertyNames(Window.prototype)) { + if ( + method !== "constructor" + && typeof (this as any)[method] === "function" + ) { + (this as any)[method] = (this as any)[method].bind(this); + } + } + } + + /** + * Gets the specified window. + * + * @param name - The name of the window to get. + * @returns The corresponding window object. + */ + Get(name: string): Window { + return new Window(name); + } + + /** + * Returns the absolute position of the window. + * + * @returns The current absolute position of the window. + */ + Position(): Promise { + return this[callerSym](PositionMethod); + } + + /** + * Centers the window on the screen. + */ + Center(): Promise { + return this[callerSym](CenterMethod); + } + + /** + * Closes the window. + */ + Close(): Promise { + return this[callerSym](CloseMethod); + } + + /** + * Disables min/max size constraints. + */ + DisableSizeConstraints(): Promise { + return this[callerSym](DisableSizeConstraintsMethod); + } + + /** + * Enables min/max size constraints. + */ + EnableSizeConstraints(): Promise { + return this[callerSym](EnableSizeConstraintsMethod); + } + + /** + * Focuses the window. + */ + Focus(): Promise { + return this[callerSym](FocusMethod); + } + + /** + * Forces the window to reload the page assets. + */ + ForceReload(): Promise { + return this[callerSym](ForceReloadMethod); + } + + /** + * Switches the window to fullscreen mode. + */ + Fullscreen(): Promise { + return this[callerSym](FullscreenMethod); + } + + /** + * Returns the screen that the window is on. + * + * @returns The screen the window is currently on. + */ + GetScreen(): Promise { + return this[callerSym](GetScreenMethod); + } + + /** + * Returns the current zoom level of the window. + * + * @returns The current zoom level. + */ + GetZoom(): Promise { + return this[callerSym](GetZoomMethod); + } + + /** + * Returns the height of the window. + * + * @returns The current height of the window. + */ + Height(): Promise { + return this[callerSym](HeightMethod); + } + + /** + * Hides the window. + */ + Hide(): Promise { + return this[callerSym](HideMethod); + } + + /** + * Returns true if the window is focused. + * + * @returns Whether the window is currently focused. + */ + IsFocused(): Promise { + return this[callerSym](IsFocusedMethod); + } + + /** + * Returns true if the window is fullscreen. + * + * @returns Whether the window is currently fullscreen. + */ + IsFullscreen(): Promise { + return this[callerSym](IsFullscreenMethod); + } + + /** + * Returns true if the window is maximised. + * + * @returns Whether the window is currently maximised. + */ + IsMaximised(): Promise { + return this[callerSym](IsMaximisedMethod); + } + + /** + * Returns true if the window is minimised. + * + * @returns Whether the window is currently minimised. + */ + IsMinimised(): Promise { + return this[callerSym](IsMinimisedMethod); + } + + /** + * Maximises the window. + */ + Maximise(): Promise { + return this[callerSym](MaximiseMethod); + } + + /** + * Minimises the window. + */ + Minimise(): Promise { + return this[callerSym](MinimiseMethod); + } + + /** + * Returns the name of the window. + * + * @returns The name of the window. + */ + Name(): Promise { + return this[callerSym](NameMethod); + } + + /** + * Opens the development tools pane. + */ + OpenDevTools(): Promise { + return this[callerSym](OpenDevToolsMethod); + } + + /** + * Returns the relative position of the window to the screen. + * + * @returns The current relative position of the window. + */ + RelativePosition(): Promise { + return this[callerSym](RelativePositionMethod); + } + + /** + * Reloads the page assets. + */ + Reload(): Promise { + return this[callerSym](ReloadMethod); + } + + /** + * Returns true if the window is resizable. + * + * @returns Whether the window is currently resizable. + */ + Resizable(): Promise { + return this[callerSym](ResizableMethod); + } + + /** + * Restores the window to its previous state if it was previously minimised, maximised or fullscreen. + */ + Restore(): Promise { + return this[callerSym](RestoreMethod); + } + + /** + * Sets the absolute position of the window. + * + * @param x - The desired horizontal absolute position of the window. + * @param y - The desired vertical absolute position of the window. + */ + SetPosition(x: number, y: number): Promise { + return this[callerSym](SetPositionMethod, { x, y }); + } + + /** + * Sets the window to be always on top. + * + * @param alwaysOnTop - Whether the window should stay on top. + */ + SetAlwaysOnTop(alwaysOnTop: boolean): Promise { + return this[callerSym](SetAlwaysOnTopMethod, { alwaysOnTop }); + } + + /** + * Sets the background colour of the window. + * + * @param r - The desired red component of the window background. + * @param g - The desired green component of the window background. + * @param b - The desired blue component of the window background. + * @param a - The desired alpha component of the window background. + */ + SetBackgroundColour(r: number, g: number, b: number, a: number): Promise { + return this[callerSym](SetBackgroundColourMethod, { r, g, b, a }); + } + + /** + * Removes the window frame and title bar. + * + * @param frameless - Whether the window should be frameless. + */ + SetFrameless(frameless: boolean): Promise { + return this[callerSym](SetFramelessMethod, { frameless }); + } + + /** + * Disables the system fullscreen button. + * + * @param enabled - Whether the fullscreen button should be enabled. + */ + SetFullscreenButtonEnabled(enabled: boolean): Promise { + return this[callerSym](SetFullscreenButtonEnabledMethod, { enabled }); + } + + /** + * Sets the maximum size of the window. + * + * @param width - The desired maximum width of the window. + * @param height - The desired maximum height of the window. + */ + SetMaxSize(width: number, height: number): Promise { + return this[callerSym](SetMaxSizeMethod, { width, height }); + } + + /** + * Sets the minimum size of the window. + * + * @param width - The desired minimum width of the window. + * @param height - The desired minimum height of the window. + */ + SetMinSize(width: number, height: number): Promise { + return this[callerSym](SetMinSizeMethod, { width, height }); + } + + /** + * Sets the relative position of the window to the screen. + * + * @param x - The desired horizontal relative position of the window. + * @param y - The desired vertical relative position of the window. + */ + SetRelativePosition(x: number, y: number): Promise { + return this[callerSym](SetRelativePositionMethod, { x, y }); + } + + /** + * Sets whether the window is resizable. + * + * @param resizable - Whether the window should be resizable. + */ + SetResizable(resizable: boolean): Promise { + return this[callerSym](SetResizableMethod, { resizable }); + } + + /** + * Sets the size of the window. + * + * @param width - The desired width of the window. + * @param height - The desired height of the window. + */ + SetSize(width: number, height: number): Promise { + return this[callerSym](SetSizeMethod, { width, height }); + } + + /** + * Sets the title of the window. + * + * @param title - The desired title of the window. + */ + SetTitle(title: string): Promise { + return this[callerSym](SetTitleMethod, { title }); + } + + /** + * Sets the zoom level of the window. + * + * @param zoom - The desired zoom level. + */ + SetZoom(zoom: number): Promise { + return this[callerSym](SetZoomMethod, { zoom }); + } + + /** + * Shows the window. + */ + Show(): Promise { + return this[callerSym](ShowMethod); + } + + /** + * Returns the size of the window. + * + * @returns The current size of the window. + */ + Size(): Promise { + return this[callerSym](SizeMethod); + } + + /** + * Toggles the window between fullscreen and normal. + */ + ToggleFullscreen(): Promise { + return this[callerSym](ToggleFullscreenMethod); + } + + /** + * Toggles the window between maximised and normal. + */ + ToggleMaximise(): Promise { + return this[callerSym](ToggleMaximiseMethod); + } + + /** + * Un-fullscreens the window. + */ + UnFullscreen(): Promise { + return this[callerSym](UnFullscreenMethod); + } + + /** + * Un-maximises the window. + */ + UnMaximise(): Promise { + return this[callerSym](UnMaximiseMethod); + } + + /** + * Un-minimises the window. + */ + UnMinimise(): Promise { + return this[callerSym](UnMinimiseMethod); + } + + /** + * Returns the width of the window. + * + * @returns The current width of the window. + */ + Width(): Promise { + return this[callerSym](WidthMethod); + } + + /** + * Zooms the window. + */ + Zoom(): Promise { + return this[callerSym](ZoomMethod); + } + + /** + * Increases the zoom level of the webview content. + */ + ZoomIn(): Promise { + return this[callerSym](ZoomInMethod); + } + + /** + * Decreases the zoom level of the webview content. + */ + ZoomOut(): Promise { + return this[callerSym](ZoomOutMethod); + } + + /** + * Resets the zoom level of the webview content. + */ + ZoomReset(): Promise { + return this[callerSym](ZoomResetMethod); + } +} + +/** + * The window within which the script is running. + */ +const thisWindow = new Window(''); + +export default thisWindow; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.js b/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.js deleted file mode 100644 index 819758514..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -import {OpenURL} from "./browser"; -import {Question} from "./dialogs"; -import {Emit, WailsEvent} from "./events"; -import {canAbortListeners, whenReady} from "./utils"; -import Window from "./window"; - -/** - * Sends an event with the given name and optional data. - * - * @param {string} eventName - The name of the event to send. - * @param {any} [data=null] - Optional data to send along with the event. - * - * @return {void} - */ -function sendEvent(eventName, data=null) { - Emit(new WailsEvent(eventName, data)); -} - -/** - * Calls a method on a specified window. - * @param {string} windowName - The name of the window to call the method on. - * @param {string} methodName - The name of the method to call. - */ -function callWindowMethod(windowName, methodName) { - const targetWindow = Window.Get(windowName); - const method = targetWindow[methodName]; - - if (typeof method !== "function") { - console.error(`Window method '${methodName}' not found`); - return; - } - - try { - method.call(targetWindow); - } catch (e) { - console.error(`Error calling window method '${methodName}': `, e); - } -} - -/** - * Responds to a triggering event by running appropriate WML actions for the current target - * - * @param {Event} ev - * @return {void} - */ -function onWMLTriggered(ev) { - const element = ev.currentTarget; - - function runEffect(choice = "Yes") { - if (choice !== "Yes") - return; - - const eventType = element.getAttribute('data-wml-event'); - const targetWindow = element.getAttribute('data-wml-target-window') || ""; - const windowMethod = element.getAttribute('data-wml-window'); - const url = element.getAttribute('data-wml-openURL'); - - if (eventType !== null) - sendEvent(eventType); - if (windowMethod !== null) - callWindowMethod(targetWindow, windowMethod); - if (url !== null) - void OpenURL(url); - } - - const confirm = element.getAttribute('data-wml-confirm'); - - if (confirm) { - Question({ - Title: "Confirm", - Message: confirm, - Detached: false, - Buttons: [ - { Label: "Yes" }, - { Label: "No", IsDefault: true } - ] - }).then(runEffect); - } else { - runEffect(); - } -} - -/** - * @type {symbol} - */ -const controller = Symbol(); - -/** - * AbortControllerRegistry does not actually remember active event listeners: instead - * it ties them to an AbortSignal and uses an AbortController to remove them all at once. - */ -class AbortControllerRegistry { - constructor() { - /** - * Stores the AbortController that can be used to remove all currently active listeners. - * - * @private - * @name {@link controller} - * @member {AbortController} - */ - this[controller] = new AbortController(); - } - - /** - * Returns an options object for addEventListener that ties the listener - * to the AbortSignal from the current AbortController. - * - * @param {HTMLElement} element An HTML element - * @param {string[]} triggers The list of active WML trigger events for the specified elements - * @returns {AddEventListenerOptions} - */ - set(element, triggers) { - return { signal: this[controller].signal }; - } - - /** - * Removes all registered event listeners. - * - * @returns {void} - */ - reset() { - this[controller].abort(); - this[controller] = new AbortController(); - } -} - -/** - * @type {symbol} - */ -const triggerMap = Symbol(); - -/** - * @type {symbol} - */ -const elementCount = Symbol(); - -/** - * WeakMapRegistry maps active trigger events to each DOM element through a WeakMap. - * This ensures that the mapping remains private to this module, while still allowing garbage - * collection of the involved elements. - */ -class WeakMapRegistry { - constructor() { - /** - * Stores the current element-to-trigger mapping. - * - * @private - * @name {@link triggerMap} - * @member {WeakMap} - */ - this[triggerMap] = new WeakMap(); - - /** - * Counts the number of elements with active WML triggers. - * - * @private - * @name {@link elementCount} - * @member {number} - */ - this[elementCount] = 0; - } - - /** - * Sets the active triggers for the specified element. - * - * @param {HTMLElement} element An HTML element - * @param {string[]} triggers The list of active WML trigger events for the specified element - * @returns {AddEventListenerOptions} - */ - set(element, triggers) { - this[elementCount] += !this[triggerMap].has(element); - this[triggerMap].set(element, triggers); - return {}; - } - - /** - * Removes all registered event listeners. - * - * @returns {void} - */ - reset() { - if (this[elementCount] <= 0) - return; - - for (const element of document.body.querySelectorAll('*')) { - if (this[elementCount] <= 0) - break; - - const triggers = this[triggerMap].get(element); - this[elementCount] -= (typeof triggers !== "undefined"); - - for (const trigger of triggers || []) - element.removeEventListener(trigger, onWMLTriggered); - } - - this[triggerMap] = new WeakMap(); - this[elementCount] = 0; - } -} - -const triggerRegistry = canAbortListeners() ? new AbortControllerRegistry() : new WeakMapRegistry(); - -/** - * Adds event listeners to the specified element. - * - * @param {HTMLElement} element - * @return {void} - */ -function addWMLListeners(element) { - const triggerRegExp = /\S+/g; - const triggerAttr = (element.getAttribute('data-wml-trigger') || "click"); - const triggers = []; - - let match; - while ((match = triggerRegExp.exec(triggerAttr)) !== null) - triggers.push(match[0]); - - const options = triggerRegistry.set(element, triggers); - for (const trigger of triggers) - element.addEventListener(trigger, onWMLTriggered, options); -} - -/** - * Schedules an automatic reload of WML to be performed as soon as the document is fully loaded. - * - * @return {void} - */ -export function Enable() { - whenReady(Reload); -} - -/** - * Reloads the WML page by adding necessary event listeners and browser listeners. - * - * @return {void} - */ -export function Reload() { - triggerRegistry.reset(); - document.body.querySelectorAll('[data-wml-event], [data-wml-window], [data-wml-openURL]').forEach(addWMLListeners); -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.ts b/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.ts new file mode 100644 index 000000000..fad38b6eb --- /dev/null +++ b/v3/internal/runtime/desktop/@wailsio/runtime/src/wml.ts @@ -0,0 +1,209 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +import { OpenURL } from "./browser.js"; +import { Question } from "./dialogs.js"; +import { Emit, WailsEvent } from "./events.js"; +import { canAbortListeners, whenReady } from "./utils.js"; +import Window from "./window.js"; + +/** + * Sends an event with the given name and optional data. + * + * @param eventName - - The name of the event to send. + * @param [data=null] - - Optional data to send along with the event. + */ +function sendEvent(eventName: string, data: any = null): void { + Emit(new WailsEvent(eventName, data)); +} + +/** + * Calls a method on a specified window. + * + * @param windowName - The name of the window to call the method on. + * @param methodName - The name of the method to call. + */ +function callWindowMethod(windowName: string, methodName: string) { + const targetWindow = Window.Get(windowName); + const method = (targetWindow as any)[methodName]; + + if (typeof method !== "function") { + console.error(`Window method '${methodName}' not found`); + return; + } + + try { + method.call(targetWindow); + } catch (e) { + console.error(`Error calling window method '${methodName}': `, e); + } +} + +/** + * Responds to a triggering event by running appropriate WML actions for the current target. + */ +function onWMLTriggered(ev: Event): void { + const element = ev.currentTarget as Element; + + function runEffect(choice = "Yes") { + if (choice !== "Yes") + return; + + const eventType = element.getAttribute('wml-event') || element.getAttribute('data-wml-event'); + const targetWindow = element.getAttribute('wml-target-window') || element.getAttribute('data-wml-target-window') || ""; + const windowMethod = element.getAttribute('wml-window') || element.getAttribute('data-wml-window'); + const url = element.getAttribute('wml-openurl') || element.getAttribute('data-wml-openurl'); + + if (eventType !== null) + sendEvent(eventType); + if (windowMethod !== null) + callWindowMethod(targetWindow, windowMethod); + if (url !== null) + void OpenURL(url); + } + + const confirm = element.getAttribute('wml-confirm') || element.getAttribute('data-wml-confirm'); + + if (confirm) { + Question({ + Title: "Confirm", + Message: confirm, + Detached: false, + Buttons: [ + { Label: "Yes" }, + { Label: "No", IsDefault: true } + ] + }).then(runEffect); + } else { + runEffect(); + } +} + +// Private field names. +const controllerSym = Symbol("controller"); +const triggerMapSym = Symbol("triggerMap"); +const elementCountSym = Symbol("elementCount"); + +/** + * AbortControllerRegistry does not actually remember active event listeners: instead + * it ties them to an AbortSignal and uses an AbortController to remove them all at once. + */ +class AbortControllerRegistry { + // Private fields. + [controllerSym]: AbortController; + + constructor() { + this[controllerSym] = new AbortController(); + } + + /** + * Returns an options object for addEventListener that ties the listener + * to the AbortSignal from the current AbortController. + * + * @param element - An HTML element + * @param triggers - The list of active WML trigger events for the specified elements + */ + set(element: Element, triggers: string[]): AddEventListenerOptions { + return { signal: this[controllerSym].signal }; + } + + /** + * Removes all registered event listeners and resets the registry. + */ + reset(): void { + this[controllerSym].abort(); + this[controllerSym] = new AbortController(); + } +} + +/** + * WeakMapRegistry maps active trigger events to each DOM element through a WeakMap. + * This ensures that the mapping remains private to this module, while still allowing garbage + * collection of the involved elements. + */ +class WeakMapRegistry { + /** Stores the current element-to-trigger mapping. */ + [triggerMapSym]: WeakMap; + /** Counts the number of elements with active WML triggers. */ + [elementCountSym]: number; + + constructor() { + this[triggerMapSym] = new WeakMap(); + this[elementCountSym] = 0; + } + + /** + * Sets active triggers for the specified element. + * + * @param element - An HTML element + * @param triggers - The list of active WML trigger events for the specified element + */ + set(element: Element, triggers: string[]): AddEventListenerOptions { + if (!this[triggerMapSym].has(element)) { this[elementCountSym]++; } + this[triggerMapSym].set(element, triggers); + return {}; + } + + /** + * Removes all registered event listeners. + */ + reset(): void { + if (this[elementCountSym] <= 0) + return; + + for (const element of document.body.querySelectorAll('*')) { + if (this[elementCountSym] <= 0) + break; + + const triggers = this[triggerMapSym].get(element); + if (triggers != null) { this[elementCountSym]--; } + + for (const trigger of triggers || []) + element.removeEventListener(trigger, onWMLTriggered); + } + + this[triggerMapSym] = new WeakMap(); + this[elementCountSym] = 0; + } +} + +const triggerRegistry = canAbortListeners() ? new AbortControllerRegistry() : new WeakMapRegistry(); + +/** + * Adds event listeners to the specified element. + */ +function addWMLListeners(element: Element): void { + const triggerRegExp = /\S+/g; + const triggerAttr = (element.getAttribute('wml-trigger') || element.getAttribute('data-wml-trigger') || "click"); + const triggers: string[] = []; + + let match; + while ((match = triggerRegExp.exec(triggerAttr)) !== null) + triggers.push(match[0]); + + const options = triggerRegistry.set(element, triggers); + for (const trigger of triggers) + element.addEventListener(trigger, onWMLTriggered, options); +} + +/** + * Schedules an automatic reload of WML to be performed as soon as the document is fully loaded. + */ +export function Enable(): void { + whenReady(Reload); +} + +/** + * Reloads the WML page by adding necessary event listeners and browser listeners. + */ +export function Reload(): void { + triggerRegistry.reset(); + document.body.querySelectorAll('[wml-event], [wml-window], [wml-openurl], [data-wml-event], [data-wml-window], [data-wml-openurl]').forEach(addWMLListeners); +} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json b/v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json index 2cbc06eed..1175a4af4 100644 --- a/v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json +++ b/v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json @@ -1,20 +1,36 @@ { "include": ["./src/**/*"], + "exclude": ["./src/**/*.test.*"], "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, + "composite": true, + + "allowJs": false, + + "noEmitOnError": true, "declaration": true, - "declarationMap": true, - "emitDeclarationOnly": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", + "declarationMap": false, + "declarationDir": "types", "outDir": "dist", + "rootDir": "src", + + "target": "ES2017", + "module": "ES2015", + "moduleResolution": "bundler", + "isolatedModules": true, + "verbatimModuleSyntax": true, + "stripInternal": true, + + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "strict": true, - "target": "es6", + "noUnusedLocals": true, + "noUnusedParameters": false, + "noImplicitAny": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true } } \ No newline at end of file diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/application.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/application.d.ts deleted file mode 100644 index 5794550c0..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/application.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Hides a certain method by calling the HideMethod function. - * - * @return {Promise} - * - */ -export function Hide(): Promise; -/** - * Calls the ShowMethod and returns the result. - * - * @return {Promise} - */ -export function Show(): Promise; -/** - * Calls the QuitMethod to terminate the program. - * - * @return {Promise} - */ -export function Quit(): Promise; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/browser.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/browser.d.ts deleted file mode 100644 index 95e0ba377..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/browser.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Open a browser window to the given URL - * @param {string} url - The URL to open - * @returns {Promise} - */ -export function OpenURL(url: string): Promise; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/calls.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/calls.d.ts deleted file mode 100644 index 1ef9a7dc0..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/calls.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Call a bound method according to the given call options. - * - * In case of failure, the returned promise will reject with an exception - * among ReferenceError (unknown method), TypeError (wrong argument count or type), - * {@link RuntimeError} (method returned an error), or other (network or internal errors). - * The exception might have a "cause" field with the value returned - * by the application- or service-level error marshaling functions. - * - * @param {CallOptions} options - A method call descriptor. - * @returns {Promise} - The result of the call. - */ -export function Call(options: CallOptions): Promise; -/** - * Calls a bound method by name with the specified arguments. - * See {@link Call} for details. - * - * @param {string} methodName - The name of the method in the format 'package.struct.method'. - * @param {any[]} args - The arguments to pass to the method. - * @returns {Promise} The result of the method call. - */ -export function ByName(methodName: string, ...args: any[]): Promise; -/** - * Calls a method by its numeric ID with the specified arguments. - * See {@link Call} for details. - * - * @param {number} methodID - The ID of the method to call. - * @param {any[]} args - The arguments to pass to the method. - * @return {Promise} - The result of the method call. - */ -export function ByID(methodID: number, ...args: any[]): Promise; -/** - * Collects all required information for a binding call. - * - * @typedef {Object} CallOptions - * @property {number} [methodID] - The numeric ID of the bound method to call. - * @property {string} [methodName] - The fully qualified name of the bound method to call. - * @property {any[]} args - Arguments to be passed into the bound method. - */ -/** - * Exception class that will be thrown in case the bound method returns an error. - * The value of the {@link RuntimeError#name} property is "RuntimeError". - */ -export class RuntimeError extends Error { - /** - * Constructs a new RuntimeError instance. - * - * @param {string} message - The error message. - * @param {any[]} args - Optional arguments for the Error constructor. - */ - constructor(message: string, ...args: any[]); -} -/** - * Collects all required information for a binding call. - */ -export type CallOptions = { - /** - * - The numeric ID of the bound method to call. - */ - methodID?: number; - /** - * - The fully qualified name of the bound method to call. - */ - methodName?: string; - /** - * - Arguments to be passed into the bound method. - */ - args: any[]; -}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/clipboard.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/clipboard.d.ts deleted file mode 100644 index 8f7bfabc1..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/clipboard.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Sets the text to the Clipboard. - * - * @param {string} text - The text to be set to the Clipboard. - * @return {Promise} - A Promise that resolves when the operation is successful. - */ -export function SetText(text: string): Promise; -/** - * Get the Clipboard text - * @returns {Promise} A promise that resolves with the text from the Clipboard. - */ -export function Text(): Promise; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/contextmenu.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/contextmenu.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/contextmenu.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/create.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/create.d.ts deleted file mode 100644 index 10c505ff8..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/create.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Any is a dummy creation function for simple or unknown types. - * @template T - * @param {any} source - * @returns {T} - */ -export function Any(source: any): T; -/** - * ByteSlice is a creation function that replaces - * null strings with empty strings. - * @param {any} source - * @returns {string} - */ -export function ByteSlice(source: any): string; -/** - * Array takes a creation function for an arbitrary type - * and returns an in-place creation function for an array - * whose elements are of that type. - * @template T - * @param {(source: any) => T} element - * @returns {(source: any) => T[]} - */ -export function Array(element: (source: any) => T): (source: any) => T[]; -/** - * Map takes creation functions for two arbitrary types - * and returns an in-place creation function for an object - * whose keys and values are of those types. - * @template K, V - * @param {(source: any) => K} key - * @param {(source: any) => V} value - * @returns {(source: any) => { [_: K]: V }} - */ -export function Map(key: (source: any) => K, value: (source: any) => V): (source: any) => {}; -/** - * Nullable takes a creation function for an arbitrary type - * and returns a creation function for a nullable value of that type. - * @template T - * @param {(source: any) => T} element - * @returns {(source: any) => (T | null)} - */ -export function Nullable(element: (source: any) => T): (source: any) => T; -/** - * Struct takes an object mapping field names to creation functions - * and returns an in-place creation function for a struct. - * @template {{ [_: string]: ((source: any) => any) }} T - * @template {{ [Key in keyof T]?: ReturnType }} U - * @param {T} createField - * @returns {(source: any) => U} - */ -export function Struct any; -}, U extends { [Key in keyof T]?: ReturnType; }>(createField: T): (source: any) => U; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/dialogs.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/dialogs.d.ts deleted file mode 100644 index 1a90bb0ec..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/dialogs.d.ts +++ /dev/null @@ -1,184 +0,0 @@ -export function Info(options: MessageDialogOptions): Promise; -export function Warning(options: MessageDialogOptions): Promise; -export function Error(options: MessageDialogOptions): Promise; -export function Question(options: MessageDialogOptions): Promise; -export function OpenFile(options: OpenFileDialogOptions): Promise; -export function SaveFile(options: SaveFileDialogOptions): Promise; -export type OpenFileDialogOptions = { - /** - * - Indicates if directories can be chosen. - */ - CanChooseDirectories?: boolean; - /** - * - Indicates if files can be chosen. - */ - CanChooseFiles?: boolean; - /** - * - Indicates if directories can be created. - */ - CanCreateDirectories?: boolean; - /** - * - Indicates if hidden files should be shown. - */ - ShowHiddenFiles?: boolean; - /** - * - Indicates if aliases should be resolved. - */ - ResolvesAliases?: boolean; - /** - * - Indicates if multiple selection is allowed. - */ - AllowsMultipleSelection?: boolean; - /** - * - Indicates if the extension should be hidden. - */ - HideExtension?: boolean; - /** - * - Indicates if hidden extensions can be selected. - */ - CanSelectHiddenExtension?: boolean; - /** - * - Indicates if file packages should be treated as directories. - */ - TreatsFilePackagesAsDirectories?: boolean; - /** - * - Indicates if other file types are allowed. - */ - AllowsOtherFiletypes?: boolean; - /** - * - Array of file filters. - */ - Filters?: FileFilter[]; - /** - * - Title of the dialog. - */ - Title?: string; - /** - * - Message to show in the dialog. - */ - Message?: string; - /** - * - Text to display on the button. - */ - ButtonText?: string; - /** - * - Directory to open in the dialog. - */ - Directory?: string; - /** - * - Indicates if the dialog should appear detached from the main window. - */ - Detached?: boolean; -}; -export type SaveFileDialogOptions = { - /** - * - Default filename to use in the dialog. - */ - Filename?: string; - /** - * - Indicates if directories can be chosen. - */ - CanChooseDirectories?: boolean; - /** - * - Indicates if files can be chosen. - */ - CanChooseFiles?: boolean; - /** - * - Indicates if directories can be created. - */ - CanCreateDirectories?: boolean; - /** - * - Indicates if hidden files should be shown. - */ - ShowHiddenFiles?: boolean; - /** - * - Indicates if aliases should be resolved. - */ - ResolvesAliases?: boolean; - /** - * - Indicates if multiple selection is allowed. - */ - AllowsMultipleSelection?: boolean; - /** - * - Indicates if the extension should be hidden. - */ - HideExtension?: boolean; - /** - * - Indicates if hidden extensions can be selected. - */ - CanSelectHiddenExtension?: boolean; - /** - * - Indicates if file packages should be treated as directories. - */ - TreatsFilePackagesAsDirectories?: boolean; - /** - * - Indicates if other file types are allowed. - */ - AllowsOtherFiletypes?: boolean; - /** - * - Array of file filters. - */ - Filters?: FileFilter[]; - /** - * - Title of the dialog. - */ - Title?: string; - /** - * - Message to show in the dialog. - */ - Message?: string; - /** - * - Text to display on the button. - */ - ButtonText?: string; - /** - * - Directory to open in the dialog. - */ - Directory?: string; - /** - * - Indicates if the dialog should appear detached from the main window. - */ - Detached?: boolean; -}; -export type MessageDialogOptions = { - /** - * - The title of the dialog window. - */ - Title?: string; - /** - * - The main message to show in the dialog. - */ - Message?: string; - /** - * - Array of button options to show in the dialog. - */ - Buttons?: Button[]; - /** - * - True if the dialog should appear detached from the main window (if applicable). - */ - Detached?: boolean; -}; -export type Button = { - /** - * - Text that appears within the button. - */ - Label?: string; - /** - * - True if the button should cancel an operation when clicked. - */ - IsCancel?: boolean; - /** - * - True if the button should be the default action when the user presses enter. - */ - IsDefault?: boolean; -}; -export type FileFilter = { - /** - * - Display name for the filter, it could be "Text Files", "Images" etc. - */ - DisplayName?: string; - /** - * - Pattern to match for the filter, e.g. "*.txt;*.md" for text markdown files. - */ - Pattern?: string; -}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/drag.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/drag.d.ts deleted file mode 100644 index cb0ff5c3b..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/drag.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/event_types.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/event_types.d.ts deleted file mode 100644 index e8742de59..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/event_types.d.ts +++ /dev/null @@ -1,219 +0,0 @@ - -export declare const EventTypes: { - Windows: { - APMPowerSettingChange: string, - APMPowerStatusChange: string, - APMResumeAutomatic: string, - APMResumeSuspend: string, - APMSuspend: string, - ApplicationStarted: string, - SystemThemeChanged: string, - WebViewNavigationCompleted: string, - WindowActive: string, - WindowBackgroundErase: string, - WindowClickActive: string, - WindowClosing: string, - WindowDidMove: string, - WindowDidResize: string, - WindowDPIChanged: string, - WindowDragDrop: string, - WindowDragEnter: string, - WindowDragLeave: string, - WindowDragOver: string, - WindowEndMove: string, - WindowEndResize: string, - WindowFullscreen: string, - WindowHide: string, - WindowInactive: string, - WindowKeyDown: string, - WindowKeyUp: string, - WindowKillFocus: string, - WindowNonClientHit: string, - WindowNonClientMouseDown: string, - WindowNonClientMouseLeave: string, - WindowNonClientMouseMove: string, - WindowNonClientMouseUp: string, - WindowPaint: string, - WindowRestore: string, - WindowSetFocus: string, - WindowShow: string, - WindowStartMove: string, - WindowStartResize: string, - WindowUnFullscreen: string, - WindowZOrderChanged: string, - WindowMinimise: string, - WindowUnMinimise: string, - WindowMaximise: string, - WindowUnMaximise: string, - }, - Mac: { - ApplicationDidBecomeActive: string, - ApplicationDidChangeBackingProperties: string, - ApplicationDidChangeEffectiveAppearance: string, - ApplicationDidChangeIcon: string, - ApplicationDidChangeOcclusionState: string, - ApplicationDidChangeScreenParameters: string, - ApplicationDidChangeStatusBarFrame: string, - ApplicationDidChangeStatusBarOrientation: string, - ApplicationDidChangeTheme: string, - ApplicationDidFinishLaunching: string, - ApplicationDidHide: string, - ApplicationDidResignActive: string, - ApplicationDidUnhide: string, - ApplicationDidUpdate: string, - ApplicationShouldHandleReopen: string, - ApplicationWillBecomeActive: string, - ApplicationWillFinishLaunching: string, - ApplicationWillHide: string, - ApplicationWillResignActive: string, - ApplicationWillTerminate: string, - ApplicationWillUnhide: string, - ApplicationWillUpdate: string, - MenuDidAddItem: string, - MenuDidBeginTracking: string, - MenuDidClose: string, - MenuDidDisplayItem: string, - MenuDidEndTracking: string, - MenuDidHighlightItem: string, - MenuDidOpen: string, - MenuDidPopUp: string, - MenuDidRemoveItem: string, - MenuDidSendAction: string, - MenuDidSendActionToItem: string, - MenuDidUpdate: string, - MenuWillAddItem: string, - MenuWillBeginTracking: string, - MenuWillDisplayItem: string, - MenuWillEndTracking: string, - MenuWillHighlightItem: string, - MenuWillOpen: string, - MenuWillPopUp: string, - MenuWillRemoveItem: string, - MenuWillSendAction: string, - MenuWillSendActionToItem: string, - MenuWillUpdate: string, - WebViewDidCommitNavigation: string, - WebViewDidFinishNavigation: string, - WebViewDidReceiveServerRedirectForProvisionalNavigation: string, - WebViewDidStartProvisionalNavigation: string, - WindowDidBecomeKey: string, - WindowDidBecomeMain: string, - WindowDidBeginSheet: string, - WindowDidChangeAlpha: string, - WindowDidChangeBackingLocation: string, - WindowDidChangeBackingProperties: string, - WindowDidChangeCollectionBehavior: string, - WindowDidChangeEffectiveAppearance: string, - WindowDidChangeOcclusionState: string, - WindowDidChangeOrderingMode: string, - WindowDidChangeScreen: string, - WindowDidChangeScreenParameters: string, - WindowDidChangeScreenProfile: string, - WindowDidChangeScreenSpace: string, - WindowDidChangeScreenSpaceProperties: string, - WindowDidChangeSharingType: string, - WindowDidChangeSpace: string, - WindowDidChangeSpaceOrderingMode: string, - WindowDidChangeTitle: string, - WindowDidChangeToolbar: string, - WindowDidDeminiaturize: string, - WindowDidEndSheet: string, - WindowDidEnterFullScreen: string, - WindowDidEnterVersionBrowser: string, - WindowDidExitFullScreen: string, - WindowDidExitVersionBrowser: string, - WindowDidExpose: string, - WindowDidFocus: string, - WindowDidMiniaturize: string, - WindowDidMove: string, - WindowDidOrderOffScreen: string, - WindowDidOrderOnScreen: string, - WindowDidResignKey: string, - WindowDidResignMain: string, - WindowDidResize: string, - WindowDidUpdate: string, - WindowDidUpdateAlpha: string, - WindowDidUpdateCollectionBehavior: string, - WindowDidUpdateCollectionProperties: string, - WindowDidUpdateShadow: string, - WindowDidUpdateTitle: string, - WindowDidUpdateToolbar: string, - WindowDidZoom: string, - WindowFileDraggingEntered: string, - WindowFileDraggingExited: string, - WindowFileDraggingPerformed: string, - WindowHide: string, - WindowMaximise: string, - WindowUnMaximise: string, - WindowMinimise: string, - WindowUnMinimise: string, - WindowShouldClose: string, - WindowShow: string, - WindowWillBecomeKey: string, - WindowWillBecomeMain: string, - WindowWillBeginSheet: string, - WindowWillChangeOrderingMode: string, - WindowWillClose: string, - WindowWillDeminiaturize: string, - WindowWillEnterFullScreen: string, - WindowWillEnterVersionBrowser: string, - WindowWillExitFullScreen: string, - WindowWillExitVersionBrowser: string, - WindowWillFocus: string, - WindowWillMiniaturize: string, - WindowWillMove: string, - WindowWillOrderOffScreen: string, - WindowWillOrderOnScreen: string, - WindowWillResignMain: string, - WindowWillResize: string, - WindowWillUnfocus: string, - WindowWillUpdate: string, - WindowWillUpdateAlpha: string, - WindowWillUpdateCollectionBehavior: string, - WindowWillUpdateCollectionProperties: string, - WindowWillUpdateShadow: string, - WindowWillUpdateTitle: string, - WindowWillUpdateToolbar: string, - WindowWillUpdateVisibility: string, - WindowWillUseStandardFrame: string, - WindowZoomIn: string, - WindowZoomOut: string, - WindowZoomReset: string, - }, - Linux: { - ApplicationStartup: string, - SystemThemeChanged: string, - WindowDeleteEvent: string, - WindowDidMove: string, - WindowDidResize: string, - WindowFocusIn: string, - WindowFocusOut: string, - WindowLoadChanged: string, - }, - Common: { - ApplicationOpenedWithFile: string, - ApplicationStarted: string, - ThemeChanged: string, - WindowClosing: string, - WindowDidMove: string, - WindowDidResize: string, - WindowDPIChanged: string, - WindowFilesDropped: string, - WindowFocus: string, - WindowFullscreen: string, - WindowHide: string, - WindowLostFocus: string, - WindowMaximise: string, - WindowMinimise: string, - WindowRestore: string, - WindowRuntimeReady: string, - WindowShow: string, - WindowUnFullscreen: string, - WindowUnMaximise: string, - WindowUnMinimise: string, - WindowZoom: string, - WindowZoomIn: string, - WindowZoomOut: string, - WindowZoomReset: string, - }, -}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/events.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/events.d.ts deleted file mode 100644 index 7cded34c5..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/events.d.ts +++ /dev/null @@ -1,271 +0,0 @@ -export function setup(): void; -/** - * Register a callback function to be called multiple times for a specific event. - * - * @param {string} eventName - The name of the event to register the callback for. - * @param {function} callback - The callback function to be called when the event is triggered. - * @param {number} maxCallbacks - The maximum number of times the callback can be called for the event. Once the maximum number is reached, the callback will no longer be called. - * - @return {function} - A function that, when called, will unregister the callback from the event. - */ -export function OnMultiple(eventName: string, callback: Function, maxCallbacks: number): Function; -/** - * Registers a callback function to be executed when the specified event occurs. - * - * @param {string} eventName - The name of the event. - * @param {function} callback - The callback function to be executed. It takes no parameters. - * @return {function} - A function that, when called, will unregister the callback from the event. */ -export function On(eventName: string, callback: Function): Function; -/** - * Registers a callback function to be executed only once for the specified event. - * - * @param {string} eventName - The name of the event. - * @param {function} callback - The function to be executed when the event occurs. - * @return {function} - A function that, when called, will unregister the callback from the event. - */ -export function Once(eventName: string, callback: Function): Function; -/** - * Removes event listeners for the specified event names. - * - * @param {string} eventName - The name of the event to remove listeners for. - * @param {...string} additionalEventNames - Additional event names to remove listeners for. - * @return {undefined} - */ -export function Off(eventName: string, ...additionalEventNames: string[]): undefined; -/** - * Removes all event listeners. - * - * @function OffAll - * @returns {void} - */ -export function OffAll(): void; -/** - * Emits an event using the given event name. - * - * @param {WailsEvent} event - The name of the event to emit. - * @returns {any} - The result of the emitted event. - */ -export function Emit(event: WailsEvent): any; -export const Types: { - Windows: { - APMPowerSettingChange: string; - APMPowerStatusChange: string; - APMResumeAutomatic: string; - APMResumeSuspend: string; - APMSuspend: string; - ApplicationStarted: string; - SystemThemeChanged: string; - WebViewNavigationCompleted: string; - WindowActive: string; - WindowBackgroundErase: string; - WindowClickActive: string; - WindowClosing: string; - WindowDidMove: string; - WindowDidResize: string; - WindowDPIChanged: string; - WindowDragDrop: string; - WindowDragEnter: string; - WindowDragLeave: string; - WindowDragOver: string; - WindowEndMove: string; - WindowEndResize: string; - WindowFullscreen: string; - WindowHide: string; - WindowInactive: string; - WindowKeyDown: string; - WindowKeyUp: string; - WindowKillFocus: string; - WindowNonClientHit: string; - WindowNonClientMouseDown: string; - WindowNonClientMouseLeave: string; - WindowNonClientMouseMove: string; - WindowNonClientMouseUp: string; - WindowPaint: string; - WindowRestore: string; - WindowSetFocus: string; - WindowShow: string; - WindowStartMove: string; - WindowStartResize: string; - WindowUnFullscreen: string; - WindowZOrderChanged: string; - WindowMinimise: string; - WindowUnMinimise: string; - WindowMaximise: string; - WindowUnMaximise: string; - }; - Mac: { - ApplicationDidBecomeActive: string; - ApplicationDidChangeBackingProperties: string; - ApplicationDidChangeEffectiveAppearance: string; - ApplicationDidChangeIcon: string; - ApplicationDidChangeOcclusionState: string; - ApplicationDidChangeScreenParameters: string; - ApplicationDidChangeStatusBarFrame: string; - ApplicationDidChangeStatusBarOrientation: string; - ApplicationDidChangeTheme: string; - ApplicationDidFinishLaunching: string; - ApplicationDidHide: string; - ApplicationDidResignActive: string; - ApplicationDidUnhide: string; - ApplicationDidUpdate: string; - ApplicationShouldHandleReopen: string; - ApplicationWillBecomeActive: string; - ApplicationWillFinishLaunching: string; - ApplicationWillHide: string; - ApplicationWillResignActive: string; - ApplicationWillTerminate: string; - ApplicationWillUnhide: string; - ApplicationWillUpdate: string; - MenuDidAddItem: string; - MenuDidBeginTracking: string; - MenuDidClose: string; - MenuDidDisplayItem: string; - MenuDidEndTracking: string; - MenuDidHighlightItem: string; - MenuDidOpen: string; - MenuDidPopUp: string; - MenuDidRemoveItem: string; - MenuDidSendAction: string; - MenuDidSendActionToItem: string; - MenuDidUpdate: string; - MenuWillAddItem: string; - MenuWillBeginTracking: string; - MenuWillDisplayItem: string; - MenuWillEndTracking: string; - MenuWillHighlightItem: string; - MenuWillOpen: string; - MenuWillPopUp: string; - MenuWillRemoveItem: string; - MenuWillSendAction: string; - MenuWillSendActionToItem: string; - MenuWillUpdate: string; - WebViewDidCommitNavigation: string; - WebViewDidFinishNavigation: string; - WebViewDidReceiveServerRedirectForProvisionalNavigation: string; - WebViewDidStartProvisionalNavigation: string; - WindowDidBecomeKey: string; - WindowDidBecomeMain: string; - WindowDidBeginSheet: string; - WindowDidChangeAlpha: string; - WindowDidChangeBackingLocation: string; - WindowDidChangeBackingProperties: string; - WindowDidChangeCollectionBehavior: string; - WindowDidChangeEffectiveAppearance: string; - WindowDidChangeOcclusionState: string; - WindowDidChangeOrderingMode: string; - WindowDidChangeScreen: string; - WindowDidChangeScreenParameters: string; - WindowDidChangeScreenProfile: string; - WindowDidChangeScreenSpace: string; - WindowDidChangeScreenSpaceProperties: string; - WindowDidChangeSharingType: string; - WindowDidChangeSpace: string; - WindowDidChangeSpaceOrderingMode: string; - WindowDidChangeTitle: string; - WindowDidChangeToolbar: string; - WindowDidDeminiaturize: string; - WindowDidEndSheet: string; - WindowDidEnterFullScreen: string; - WindowDidEnterVersionBrowser: string; - WindowDidExitFullScreen: string; - WindowDidExitVersionBrowser: string; - WindowDidExpose: string; - WindowDidFocus: string; - WindowDidMiniaturize: string; - WindowDidMove: string; - WindowDidOrderOffScreen: string; - WindowDidOrderOnScreen: string; - WindowDidResignKey: string; - WindowDidResignMain: string; - WindowDidResize: string; - WindowDidUpdate: string; - WindowDidUpdateAlpha: string; - WindowDidUpdateCollectionBehavior: string; - WindowDidUpdateCollectionProperties: string; - WindowDidUpdateShadow: string; - WindowDidUpdateTitle: string; - WindowDidUpdateToolbar: string; - WindowDidZoom: string; - WindowFileDraggingEntered: string; - WindowFileDraggingExited: string; - WindowFileDraggingPerformed: string; - WindowHide: string; - WindowMaximise: string; - WindowUnMaximise: string; - WindowMinimise: string; - WindowUnMinimise: string; - WindowShouldClose: string; - WindowShow: string; - WindowWillBecomeKey: string; - WindowWillBecomeMain: string; - WindowWillBeginSheet: string; - WindowWillChangeOrderingMode: string; - WindowWillClose: string; - WindowWillDeminiaturize: string; - WindowWillEnterFullScreen: string; - WindowWillEnterVersionBrowser: string; - WindowWillExitFullScreen: string; - WindowWillExitVersionBrowser: string; - WindowWillFocus: string; - WindowWillMiniaturize: string; - WindowWillMove: string; - WindowWillOrderOffScreen: string; - WindowWillOrderOnScreen: string; - WindowWillResignMain: string; - WindowWillResize: string; - WindowWillUnfocus: string; - WindowWillUpdate: string; - WindowWillUpdateAlpha: string; - WindowWillUpdateCollectionBehavior: string; - WindowWillUpdateCollectionProperties: string; - WindowWillUpdateShadow: string; - WindowWillUpdateTitle: string; - WindowWillUpdateToolbar: string; - WindowWillUpdateVisibility: string; - WindowWillUseStandardFrame: string; - WindowZoomIn: string; - WindowZoomOut: string; - WindowZoomReset: string; - }; - Linux: { - ApplicationStartup: string; - SystemThemeChanged: string; - WindowDeleteEvent: string; - WindowDidMove: string; - WindowDidResize: string; - WindowFocusIn: string; - WindowFocusOut: string; - WindowLoadChanged: string; - }; - Common: { - ApplicationOpenedWithFile: string; - ApplicationStarted: string; - ThemeChanged: string; - WindowClosing: string; - WindowDidMove: string; - WindowDidResize: string; - WindowDPIChanged: string; - WindowFilesDropped: string; - WindowFocus: string; - WindowFullscreen: string; - WindowHide: string; - WindowLostFocus: string; - WindowMaximise: string; - WindowMinimise: string; - WindowRestore: string; - WindowRuntimeReady: string; - WindowShow: string; - WindowUnFullscreen: string; - WindowUnMaximise: string; - WindowUnMinimise: string; - WindowZoom: string; - WindowZoomIn: string; - WindowZoomOut: string; - WindowZoomReset: string; - }; -}; -export class WailsEvent { - constructor(name: any, data?: any); - name: any; - data: any; -} diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/flags.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/flags.d.ts deleted file mode 100644 index 212436d04..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/flags.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Retrieves the value associated with the specified key from the flag map. - * - * @param {string} keyString - The key to retrieve the value for. - * @return {*} - The value associated with the specified key. - */ -export function GetFlag(keyString: string): any; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/index.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/index.d.ts deleted file mode 100644 index c1dc50fad..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function init(): void; -import * as Application from "./application"; -import * as Browser from "./browser"; -import * as Call from "./calls"; -import * as Clipboard from "./clipboard"; -import * as Create from "./create"; -import * as Dialogs from "./dialogs"; -import * as Events from "./events"; -import * as Flags from "./flags"; -import * as Screens from "./screens"; -import * as System from "./system"; -import Window from "./window"; -import * as WML from "./wml"; -export { Application, Browser, Call, Clipboard, Create, Dialogs, Events, Flags, Screens, System, Window, WML }; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/nanoid.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/nanoid.d.ts deleted file mode 100644 index dce98a05e..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/nanoid.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function nanoid(size?: number): string; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/runtime.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/runtime.d.ts deleted file mode 100644 index ffff3dc66..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/runtime.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Creates a runtime caller function that invokes a specified method on a given object within a specified window context. - * - * @param {Object} object - The object on which the method is to be invoked. - * @param {string} windowName - The name of the window context in which the method should be called. - * @returns {Function} A runtime caller function that takes the method name and optionally arguments and invokes the method within the specified window context. - */ -export function newRuntimeCaller(object: any, windowName: string): Function; -/** - * Creates a new runtime caller with specified ID. - * - * @param {number} object - The object to invoke the method on. - * @param {string} windowName - The name of the window. - * @return {Function} - The new runtime caller function. - */ -export function newRuntimeCallerWithID(object: number, windowName: string): Function; -export namespace objectNames { - let Call: number; - let Clipboard: number; - let Application: number; - let Events: number; - let ContextMenu: number; - let Dialog: number; - let Window: number; - let Screens: number; - let System: number; - let Browser: number; - let CancelCall: number; -} -export let clientId: string; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/screens.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/screens.d.ts deleted file mode 100644 index 7409875db..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/screens.d.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Gets all screens. - * @returns {Promise} A promise that resolves to an array of Screen objects. - */ -export function GetAll(): Promise; -/** - * Gets the primary screen. - * @returns {Promise} A promise that resolves to the primary screen. - */ -export function GetPrimary(): Promise; -/** - * Gets the current active screen. - * - * @returns {Promise} A promise that resolves with the current active screen. - */ -export function GetCurrent(): Promise; -export type Size = { - /** - * - The width. - */ - Width: number; - /** - * - The height. - */ - Height: number; -}; -export type Rect = { - /** - * - The X coordinate of the origin. - */ - X: number; - /** - * - The Y coordinate of the origin. - */ - Y: number; - /** - * - The width of the rectangle. - */ - Width: number; - /** - * - The height of the rectangle. - */ - Height: number; -}; -export type Screen = { - /** - * - Unique identifier for the screen. - */ - ID: string; - /** - * - Human readable name of the screen. - */ - Name: string; - /** - * - The scale factor of the screen (DPI/96). 1 = standard DPI, 2 = HiDPI (Retina), etc. - */ - ScaleFactor: number; - /** - * - The X coordinate of the screen. - */ - X: number; - /** - * - The Y coordinate of the screen. - */ - Y: number; - /** - * - Contains the width and height of the screen. - */ - Size: Size; - /** - * - Contains the bounds of the screen in terms of X, Y, Width, and Height. - */ - Bounds: Rect; - /** - * - Contains the physical bounds of the screen in terms of X, Y, Width, and Height (before scaling). - */ - PhysicalBounds: Rect; - /** - * - Contains the area of the screen that is actually usable (excluding taskbar and other system UI). - */ - WorkArea: Rect; - /** - * - Contains the physical WorkArea of the screen (before scaling). - */ - PhysicalWorkArea: Rect; - /** - * - True if this is the primary monitor selected by the user in the operating system. - */ - IsPrimary: boolean; - /** - * - The rotation of the screen. - */ - Rotation: number; -}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/system.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/system.d.ts deleted file mode 100644 index b3a08f200..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/system.d.ts +++ /dev/null @@ -1,112 +0,0 @@ -export function invoke(msg: any): any; -/** - * @function - * Retrieves the system dark mode status. - * @returns {Promise} - A promise that resolves to a boolean value indicating if the system is in dark mode. - */ -export function IsDarkMode(): Promise; -/** - * Fetches the capabilities of the application from the server. - * - * @async - * @function Capabilities - * @returns {Promise} A promise that resolves to an object containing the capabilities. - */ -export function Capabilities(): Promise; -/** - * @typedef {Object} OSInfo - * @property {string} Branding - The branding of the OS. - * @property {string} ID - The ID of the OS. - * @property {string} Name - The name of the OS. - * @property {string} Version - The version of the OS. - */ -/** - * @typedef {Object} EnvironmentInfo - * @property {string} Arch - The architecture of the system. - * @property {boolean} Debug - True if the application is running in debug mode, otherwise false. - * @property {string} OS - The operating system in use. - * @property {OSInfo} OSInfo - Details of the operating system. - * @property {Object} PlatformInfo - Additional platform information. - */ -/** - * @function - * Retrieves environment details. - * @returns {Promise} - A promise that resolves to an object containing OS and system architecture. - */ -export function Environment(): Promise; -/** - * Checks if the current operating system is Windows. - * - * @return {boolean} True if the operating system is Windows, otherwise false. - */ -export function IsWindows(): boolean; -/** - * Checks if the current operating system is Linux. - * - * @returns {boolean} Returns true if the current operating system is Linux, false otherwise. - */ -export function IsLinux(): boolean; -/** - * Checks if the current environment is a macOS operating system. - * - * @returns {boolean} True if the environment is macOS, false otherwise. - */ -export function IsMac(): boolean; -/** - * Checks if the current environment architecture is AMD64. - * @returns {boolean} True if the current environment architecture is AMD64, false otherwise. - */ -export function IsAMD64(): boolean; -/** - * Checks if the current architecture is ARM. - * - * @returns {boolean} True if the current architecture is ARM, false otherwise. - */ -export function IsARM(): boolean; -/** - * Checks if the current environment is ARM64 architecture. - * - * @returns {boolean} - Returns true if the environment is ARM64 architecture, otherwise returns false. - */ -export function IsARM64(): boolean; -export function IsDebug(): boolean; -export type OSInfo = { - /** - * - The branding of the OS. - */ - Branding: string; - /** - * - The ID of the OS. - */ - ID: string; - /** - * - The name of the OS. - */ - Name: string; - /** - * - The version of the OS. - */ - Version: string; -}; -export type EnvironmentInfo = { - /** - * - The architecture of the system. - */ - Arch: string; - /** - * - True if the application is running in debug mode, otherwise false. - */ - Debug: boolean; - /** - * - The operating system in use. - */ - OS: string; - /** - * - Details of the operating system. - */ - OSInfo: OSInfo; - /** - * - Additional platform information. - */ - PlatformInfo: any; -}; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/utils.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/utils.d.ts deleted file mode 100644 index 25fa1d62a..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/utils.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Logs a message to the console with custom formatting. - * @param {string} message - The message to be logged. - * @return {void} - */ -export function debugLog(message: string): void; -/** - * Checks whether the browser supports removing listeners by triggering an AbortSignal - * (see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#signal) - * - * @return {boolean} - */ -export function canAbortListeners(): boolean; -export function whenReady(callback: any): void; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/window.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/window.d.ts deleted file mode 100644 index 4a86325ce..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/window.d.ts +++ /dev/null @@ -1,407 +0,0 @@ -export class Window { - /** - * Initialises a window object with the specified name. - * - * @private - * @param {string} name - The name of the target window. - */ - private constructor(); - /** - * Gets the specified window. - * - * @public - * @param {string} name - The name of the window to get. - * @return {Window} - The corresponding window object. - */ - public Get(name: string): Window; - /** - * Returns the absolute position of the window. - * - * @public - * @return {Promise} - The current absolute position of the window. - */ - public Position(): Promise; - /** - * Centers the window on the screen. - * - * @public - * @return {Promise} - */ - public Center(): Promise; - /** - * Closes the window. - * - * @public - * @return {Promise} - */ - public Close(): Promise; - /** - * Disables min/max size constraints. - * - * @public - * @return {Promise} - */ - public DisableSizeConstraints(): Promise; - /** - * Enables min/max size constraints. - * - * @public - * @return {Promise} - */ - public EnableSizeConstraints(): Promise; - /** - * Focuses the window. - * - * @public - * @return {Promise} - */ - public Focus(): Promise; - /** - * Forces the window to reload the page assets. - * - * @public - * @return {Promise} - */ - public ForceReload(): Promise; - /** - * Doc. - * - * @public - * @return {Promise} - */ - public Fullscreen(): Promise; - /** - * Returns the screen that the window is on. - * - * @public - * @return {Promise} - The screen the window is currently on - */ - public GetScreen(): Promise; - /** - * Returns the current zoom level of the window. - * - * @public - * @return {Promise} - The current zoom level - */ - public GetZoom(): Promise; - /** - * Returns the height of the window. - * - * @public - * @return {Promise} - The current height of the window - */ - public Height(): Promise; - /** - * Hides the window. - * - * @public - * @return {Promise} - */ - public Hide(): Promise; - /** - * Returns true if the window is focused. - * - * @public - * @return {Promise} - Whether the window is currently focused - */ - public IsFocused(): Promise; - /** - * Returns true if the window is fullscreen. - * - * @public - * @return {Promise} - Whether the window is currently fullscreen - */ - public IsFullscreen(): Promise; - /** - * Returns true if the window is maximised. - * - * @public - * @return {Promise} - Whether the window is currently maximised - */ - public IsMaximised(): Promise; - /** - * Returns true if the window is minimised. - * - * @public - * @return {Promise} - Whether the window is currently minimised - */ - public IsMinimised(): Promise; - /** - * Maximises the window. - * - * @public - * @return {Promise} - */ - public Maximise(): Promise; - /** - * Minimises the window. - * - * @public - * @return {Promise} - */ - public Minimise(): Promise; - /** - * Returns the name of the window. - * - * @public - * @return {Promise} - The name of the window - */ - public Name(): Promise; - /** - * Opens the development tools pane. - * - * @public - * @return {Promise} - */ - public OpenDevTools(): Promise; - /** - * Returns the relative position of the window to the screen. - * - * @public - * @return {Promise} - The current relative position of the window - */ - public RelativePosition(): Promise; - /** - * Reloads the page assets. - * - * @public - * @return {Promise} - */ - public Reload(): Promise; - /** - * Returns true if the window is resizable. - * - * @public - * @return {Promise} - Whether the window is currently resizable - */ - public Resizable(): Promise; - /** - * Restores the window to its previous state if it was previously minimised, maximised or fullscreen. - * - * @public - * @return {Promise} - */ - public Restore(): Promise; - /** - * Sets the absolute position of the window. - * - * @public - * @param {number} x - The desired horizontal absolute position of the window - * @param {number} y - The desired vertical absolute position of the window - * @return {Promise} - */ - public SetPosition(x: number, y: number): Promise; - /** - * Sets the window to be always on top. - * - * @public - * @param {boolean} alwaysOnTop - Whether the window should stay on top - * @return {Promise} - */ - public SetAlwaysOnTop(alwaysOnTop: boolean): Promise; - /** - * Sets the background colour of the window. - * - * @public - * @param {number} r - The desired red component of the window background - * @param {number} g - The desired green component of the window background - * @param {number} b - The desired blue component of the window background - * @param {number} a - The desired alpha component of the window background - * @return {Promise} - */ - public SetBackgroundColour(r: number, g: number, b: number, a: number): Promise; - /** - * Removes the window frame and title bar. - * - * @public - * @param {boolean} frameless - Whether the window should be frameless - * @return {Promise} - */ - public SetFrameless(frameless: boolean): Promise; - /** - * Disables the system fullscreen button. - * - * @public - * @param {boolean} enabled - Whether the fullscreen button should be enabled - * @return {Promise} - */ - public SetFullscreenButtonEnabled(enabled: boolean): Promise; - /** - * Sets the maximum size of the window. - * - * @public - * @param {number} width - The desired maximum width of the window - * @param {number} height - The desired maximum height of the window - * @return {Promise} - */ - public SetMaxSize(width: number, height: number): Promise; - /** - * Sets the minimum size of the window. - * - * @public - * @param {number} width - The desired minimum width of the window - * @param {number} height - The desired minimum height of the window - * @return {Promise} - */ - public SetMinSize(width: number, height: number): Promise; - /** - * Sets the relative position of the window to the screen. - * - * @public - * @param {number} x - The desired horizontal relative position of the window - * @param {number} y - The desired vertical relative position of the window - * @return {Promise} - */ - public SetRelativePosition(x: number, y: number): Promise; - /** - * Sets whether the window is resizable. - * - * @public - * @param {boolean} resizable - Whether the window should be resizable - * @return {Promise} - */ - public SetResizable(resizable: boolean): Promise; - /** - * Sets the size of the window. - * - * @public - * @param {number} width - The desired width of the window - * @param {number} height - The desired height of the window - * @return {Promise} - */ - public SetSize(width: number, height: number): Promise; - /** - * Sets the title of the window. - * - * @public - * @param {string} title - The desired title of the window - * @return {Promise} - */ - public SetTitle(title: string): Promise; - /** - * Sets the zoom level of the window. - * - * @public - * @param {number} zoom - The desired zoom level - * @return {Promise} - */ - public SetZoom(zoom: number): Promise; - /** - * Shows the window. - * - * @public - * @return {Promise} - */ - public Show(): Promise; - /** - * Returns the size of the window. - * - * @public - * @return {Promise} - The current size of the window - */ - public Size(): Promise; - /** - * Toggles the window between fullscreen and normal. - * - * @public - * @return {Promise} - */ - public ToggleFullscreen(): Promise; - /** - * Toggles the window between maximised and normal. - * - * @public - * @return {Promise} - */ - public ToggleMaximise(): Promise; - /** - * Un-fullscreens the window. - * - * @public - * @return {Promise} - */ - public UnFullscreen(): Promise; - /** - * Un-maximises the window. - * - * @public - * @return {Promise} - */ - public UnMaximise(): Promise; - /** - * Un-minimises the window. - * - * @public - * @return {Promise} - */ - public UnMinimise(): Promise; - /** - * Returns the width of the window. - * - * @public - * @return {Promise} - The current width of the window - */ - public Width(): Promise; - /** - * Zooms the window. - * - * @public - * @return {Promise} - */ - public Zoom(): Promise; - /** - * Increases the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - public ZoomIn(): Promise; - /** - * Decreases the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - public ZoomOut(): Promise; - /** - * Resets the zoom level of the webview content. - * - * @public - * @return {Promise} - */ - public ZoomReset(): Promise; -} -export default thisWindow; -export type Screen = import("./screens").Screen; -/** - * A record describing the position of a window. - */ -export type Position = { - /** - * - The horizontal position of the window - */ - x: number; - /** - * - The vertical position of the window - */ - y: number; -}; -/** - * A record describing the size of a window. - */ -export type Size = { - /** - * - The width of the window - */ - width: number; - /** - * - The height of the window - */ - height: number; -}; -/** - * The window within which the script is running. - * - * @type {Window} - */ -declare const thisWindow: Window; diff --git a/v3/internal/runtime/desktop/@wailsio/runtime/types/wml.d.ts b/v3/internal/runtime/desktop/@wailsio/runtime/types/wml.d.ts deleted file mode 100644 index 037912e56..000000000 --- a/v3/internal/runtime/desktop/@wailsio/runtime/types/wml.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Schedules an automatic reload of WML to be performed as soon as the document is fully loaded. - * - * @return {void} - */ -export function Enable(): void; -/** - * Reloads the WML page by adding necessary event listeners and browser listeners. - * - * @return {void} - */ -export function Reload(): void; diff --git a/v3/internal/runtime/vite.config.ts b/v3/internal/runtime/desktop/@wailsio/runtime/vitest.config.ts similarity index 51% rename from v3/internal/runtime/vite.config.ts rename to v3/internal/runtime/desktop/@wailsio/runtime/vitest.config.ts index eb0831c65..efb60170a 100644 --- a/v3/internal/runtime/vite.config.ts +++ b/v3/internal/runtime/desktop/@wailsio/runtime/vitest.config.ts @@ -1,7 +1,8 @@ -import { defineConfig } from 'vitest/config' +import { defineConfig } from "vitest/config"; export default defineConfig({ test: { environment: 'happy-dom', + testTimeout: 200 }, -}) \ No newline at end of file +}); diff --git a/v3/internal/runtime/desktop/README.md b/v3/internal/runtime/desktop/README.md index 3da6938c4..0ca8ed53e 100644 --- a/v3/internal/runtime/desktop/README.md +++ b/v3/internal/runtime/desktop/README.md @@ -1,8 +1,10 @@ # README -The `main.js` file in this directory is the entrypoint for the `runtime.js` file that may be +The `index.js` file in the `compiled` directory is the entrypoint for the `runtime.js` file that may be loaded at runtime. This will add `window.wails` and `window._wails` to the global scope. NOTE: It is preferable to use the `@wailsio/runtime` package to use the runtime. -After updating any files in this directory, you must run `wails3 task build:runtime` to regenerate the compiled JS. \ No newline at end of file +⚠️ Do not rebuild the runtime manually after updating TS code: +the CI pipeline will take care of this. +PRs that touch build artifacts will be blocked from merging. \ No newline at end of file diff --git a/v3/internal/runtime/desktop/compiled/main.js b/v3/internal/runtime/desktop/compiled/main.js index ad35cbeea..d2b21dca1 100644 --- a/v3/internal/runtime/desktop/compiled/main.js +++ b/v3/internal/runtime/desktop/compiled/main.js @@ -11,8 +11,8 @@ The electron alternative for Go import * as Runtime from "../@wailsio/runtime/src"; // NOTE: the following methods MUST be imported explicitly because of how esbuild injection works -import {Enable as EnableWML} from "../@wailsio/runtime/src/wml"; -import {debugLog} from "../@wailsio/runtime/src/utils"; +import { Enable as EnableWML } from "../@wailsio/runtime/src/wml"; +import { debugLog } from "../@wailsio/runtime/src/utils"; window.wails = Runtime; EnableWML(); diff --git a/v3/pkg/application/menu_darwin.go b/v3/pkg/application/menu_darwin.go index 3a5fa69e4..1e3fc7197 100644 --- a/v3/pkg/application/menu_darwin.go +++ b/v3/pkg/application/menu_darwin.go @@ -72,12 +72,14 @@ func newMenuImpl(menu *Menu) *macosMenu { } func (m *macosMenu) update() { - if m.nsMenu == nil { - m.nsMenu = C.createNSMenu(C.CString(m.menu.label)) - } else { - C.clearMenu(m.nsMenu) - } - m.processMenu(m.nsMenu, m.menu) + InvokeSync(func() { + if m.nsMenu == nil { + m.nsMenu = C.createNSMenu(C.CString(m.menu.label)) + } else { + C.clearMenu(m.nsMenu) + } + m.processMenu(m.nsMenu, m.menu) + }) } func (m *macosMenu) processMenu(parent unsafe.Pointer, menu *Menu) { diff --git a/v3/pkg/application/messageprocessor_call.go b/v3/pkg/application/messageprocessor_call.go index 5d7558cb6..dc25d375c 100644 --- a/v3/pkg/application/messageprocessor_call.go +++ b/v3/pkg/application/messageprocessor_call.go @@ -151,7 +151,9 @@ func (m *MessageProcessor) processCallMethod(method int, rw http.ResponseWriter, // Prepare args for logging. This should never fail since json.Unmarshal succeeded before. jsonArgs, _ := json.Marshal(options.Args) var jsonResult []byte - defer m.Info("Binding call complete:", "id", *callID, "method", boundMethod, "args", string(jsonArgs), "result", string(jsonResult)) + defer func() { + m.Info("Binding call complete:", "id", *callID, "method", boundMethod, "args", string(jsonArgs), "result", string(jsonResult)) + }() // Set the context values for the window if window != nil { diff --git a/v3/pkg/application/popupmenu_windows.go b/v3/pkg/application/popupmenu_windows.go index 34bee3995..fbfd5eef9 100644 --- a/v3/pkg/application/popupmenu_windows.go +++ b/v3/pkg/application/popupmenu_windows.go @@ -2,6 +2,7 @@ package application import ( "github.com/wailsapp/wails/v3/pkg/w32" + "unsafe" ) const ( @@ -191,7 +192,26 @@ func (p *Win32Menu) ShowAt(x int, y int) { p.onMenuOpen() } - if !w32.TrackPopupMenuEx(p.menu, w32.TPM_LEFTALIGN, int32(x), int32(y-5), p.parent, nil) { + // Get screen dimensions to determine menu positioning + monitor := w32.MonitorFromWindow(p.parent, w32.MONITOR_DEFAULTTONEAREST) + var monitorInfo w32.MONITORINFO + monitorInfo.CbSize = uint32(unsafe.Sizeof(monitorInfo)) + if !w32.GetMonitorInfo(monitor, &monitorInfo) { + globalApplication.fatal("GetMonitorInfo failed") + } + + // Set flags to always position the menu above the cursor + menuFlags := uint32(w32.TPM_LEFTALIGN | w32.TPM_BOTTOMALIGN) + + // Check if we're close to the right edge of the screen + // If so, right-align the menu with some padding + if x > int(monitorInfo.RcWork.Right)-200 { // Assuming 200px as a reasonable menu width + menuFlags = uint32(w32.TPM_RIGHTALIGN | w32.TPM_BOTTOMALIGN) + // Add a small padding (10px) from the right edge + x = int(monitorInfo.RcWork.Right) - 10 + } + + if !w32.TrackPopupMenuEx(p.menu, menuFlags, int32(x), int32(y), p.parent, nil) { globalApplication.fatal("TrackPopupMenu failed") } diff --git a/v3/tasks/events/generate.go b/v3/tasks/events/generate.go index e643db182..b09b8f028 100644 --- a/v3/tasks/events/generate.go +++ b/v3/tasks/events/generate.go @@ -2,15 +2,12 @@ package main import ( "bytes" - "github.com/Masterminds/semver/v3" - "github.com/tidwall/gjson" - "github.com/tidwall/sjson" "os" "strconv" "strings" ) -var eventsGo = `package events +const eventsGo = `package events type ApplicationEventType uint type WindowEventType uint @@ -64,7 +61,7 @@ $$EVENTTOJS} ` -var darwinEventsH = `//go:build darwin +const darwinEventsH = `//go:build darwin #ifndef _events_h #define _events_h @@ -76,7 +73,7 @@ $$CHEADEREVENTS #endif` -var linuxEventsH = `//go:build linux +const linuxEventsH = `//go:build linux #ifndef _events_h #define _events_h @@ -88,34 +85,32 @@ $$CHEADEREVENTS #endif` -var eventsJS = ` -export const EventTypes = { - Windows: { -$$WINDOWSJSEVENTS }, - Mac: { -$$MACJSEVENTS }, - Linux: { -$$LINUXJSEVENTS }, - Common: { -$$COMMONJSEVENTS }, -}; -` +const eventsTS = `/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ ` + "`" + `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ -var eventsTS = ` -export declare const EventTypes: { - Windows: { -$$WINDOWSTSEVENTS }, - Mac: { -$$MACTSEVENTS }, - Linux: { -$$LINUXTSEVENTS }, - Common: { -$$COMMONTSEVENTS }, -}; +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export const Types = Object.freeze({ + Windows: Object.freeze({ +$$WINDOWSJSEVENTS }), + Mac: Object.freeze({ +$$MACJSEVENTS }), + Linux: Object.freeze({ +$$LINUXJSEVENTS }), + Common: Object.freeze({ +$$COMMONJSEVENTS }), +}); ` func main() { - eventNames, err := os.ReadFile("../../pkg/events/events.txt") if err != nil { panic(err) @@ -138,11 +133,6 @@ func main() { commonEventsDecl := bytes.NewBufferString("") commonEventsValues := bytes.NewBufferString("") - linuxJSEvents := bytes.NewBufferString("") - macJSEvents := bytes.NewBufferString("") - windowsJSEvents := bytes.NewBufferString("") - commonJSEvents := bytes.NewBufferString("") - linuxTSEvents := bytes.NewBufferString("") macTSEvents := bytes.NewBufferString("") windowsTSEvents := bytes.NewBufferString("") @@ -197,8 +187,7 @@ func main() { } linuxEventsDecl.WriteString("\t" + eventTitle + " " + eventType + "\n") linuxEventsValues.WriteString("\t\t" + event + ": " + strconv.Itoa(id) + ",\n") - linuxJSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") - linuxTSEvents.WriteString("\t\t" + event + ": string,\n") + linuxTSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") eventToJS.WriteString("\t" + strconv.Itoa(id) + ": \"" + strings.TrimSpace(string(line)) + "\",\n") maxLinuxEvents = id linuxCHeaderEvents.WriteString("#define Event" + eventTitle + " " + strconv.Itoa(id) + "\n") @@ -212,8 +201,7 @@ func main() { } macEventsDecl.WriteString("\t" + eventTitle + " " + eventType + "\n") macEventsValues.WriteString("\t\t" + event + ": " + strconv.Itoa(id) + ",\n") - macJSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") - macTSEvents.WriteString("\t\t" + event + ": string,\n") + macTSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") macCHeaderEvents.WriteString("#define Event" + eventTitle + " " + strconv.Itoa(id) + "\n") eventToJS.WriteString("\t" + strconv.Itoa(id) + ": \"" + strings.TrimSpace(string(line)) + "\",\n") maxMacEvents = id @@ -261,8 +249,7 @@ func main() { } commonEventsDecl.WriteString("\t" + eventTitle + " " + eventType + "\n") commonEventsValues.WriteString("\t\t" + event + ": " + strconv.Itoa(id) + ",\n") - commonJSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") - commonTSEvents.WriteString("\t\t" + event + ": string,\n") + commonTSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") eventToJS.WriteString("\t" + strconv.Itoa(id) + ": \"" + strings.TrimSpace(string(line)) + "\",\n") case "windows": eventType := "ApplicationEventType" @@ -274,8 +261,7 @@ func main() { } windowsEventsDecl.WriteString("\t" + eventTitle + " " + eventType + "\n") windowsEventsValues.WriteString("\t\t" + event + ": " + strconv.Itoa(id) + ",\n") - windowsJSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") - windowsTSEvents.WriteString("\t\t" + event + ": string,\n") + windowsTSEvents.WriteString("\t\t" + event + ": \"" + strings.TrimSpace(string(line)) + "\",\n") eventToJS.WriteString("\t" + strconv.Itoa(id) + ": \"" + strings.TrimSpace(string(line)) + "\",\n") } } @@ -299,22 +285,12 @@ func main() { panic(err) } - // Save the eventsJS template substituting the values and decls - templateToWrite = strings.ReplaceAll(eventsJS, "$$MACJSEVENTS", macJSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$WINDOWSJSEVENTS", windowsJSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$LINUXJSEVENTS", linuxJSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$COMMONJSEVENTS", commonJSEvents.String()) - err = os.WriteFile("../../internal/runtime/desktop/@wailsio/runtime/src/event_types.js", []byte(templateToWrite), 0644) - if err != nil { - panic(err) - } - // Save the eventsTS template substituting the values and decls - templateToWrite = strings.ReplaceAll(eventsTS, "$$MACTSEVENTS", macTSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$WINDOWSTSEVENTS", windowsTSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$LINUXTSEVENTS", linuxTSEvents.String()) - templateToWrite = strings.ReplaceAll(templateToWrite, "$$COMMONTSEVENTS", commonTSEvents.String()) - err = os.WriteFile("../../internal/runtime/desktop/@wailsio/runtime/types/event_types.d.ts", []byte(templateToWrite), 0644) + templateToWrite = strings.ReplaceAll(eventsTS, "$$MACJSEVENTS", macTSEvents.String()) + templateToWrite = strings.ReplaceAll(templateToWrite, "$$WINDOWSJSEVENTS", windowsTSEvents.String()) + templateToWrite = strings.ReplaceAll(templateToWrite, "$$LINUXJSEVENTS", linuxTSEvents.String()) + templateToWrite = strings.ReplaceAll(templateToWrite, "$$COMMONJSEVENTS", commonTSEvents.String()) + err = os.WriteFile("../../internal/runtime/desktop/@wailsio/runtime/src/event_types.ts", []byte(templateToWrite), 0644) if err != nil { panic(err) } @@ -402,36 +378,4 @@ func main() { if err != nil { panic(err) } - - // Load the runtime package.json - packageJsonFilename := "../../internal/runtime/desktop/@wailsio/runtime/package.json" - packageJSON, err := os.ReadFile(packageJsonFilename) - if err != nil { - panic(err) - } - version := gjson.Get(string(packageJSON), "version").String() - // Parse and increment version - v := semver.MustParse(version) - prerelease := v.Prerelease() - // Split the prerelease by the "." and increment the last part by 1 - parts := strings.Split(prerelease, ".") - prereleaseDigits, err := strconv.Atoi(parts[len(parts)-1]) - if err != nil { - panic(err) - } - prereleaseNumber := strconv.Itoa(prereleaseDigits + 1) - parts[len(parts)-1] = prereleaseNumber - prerelease = strings.Join(parts, ".") - newVersion, err := v.SetPrerelease(prerelease) - if err != nil { - panic(err) - } - - // Set new version using sjson - newJSON, err := sjson.Set(string(packageJSON), "version", newVersion.String()) - if err != nil { - panic(err) - } - - err = os.WriteFile(packageJsonFilename, []byte(newJSON), 0644) } diff --git a/v3/tasks/events/go.mod b/v3/tasks/events/go.mod index 8b0f46531..55ed969ca 100644 --- a/v3/tasks/events/go.mod +++ b/v3/tasks/events/go.mod @@ -1,14 +1,3 @@ module events -go 1.22 - -require ( - github.com/Masterminds/semver/v3 v3.3.0 - github.com/tidwall/gjson v1.18.0 - github.com/tidwall/sjson v1.2.5 -) - -require ( - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect -) +go 1.24 diff --git a/v3/tasks/events/go.sum b/v3/tasks/events/go.sum deleted file mode 100644 index 2379260c6..000000000 --- a/v3/tasks/events/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= -github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= -github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= -github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=