diff --git a/README.md b/README.md index 20e492ceaa..22186ae7a2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ A [feature-rich](https://livecodes.io/docs/features/), open-source, **client-sid [![LiveCodes: npm version](https://img.shields.io/npm/v/livecodes)](https://www.npmjs.com/package/livecodes) [![LiveCodes: npm downloads](https://img.shields.io/npm/dm/livecodes)](https://www.npmjs.com/package/livecodes) [![LiveCodes: jsdelivr downloads](https://data.jsdelivr.com/v1/package/npm/livecodes/badge?style=rounded)](https://www.jsdelivr.com/package/npm/livecodes) -[![LiveCodes: languages](https://img.shields.io/badge/languages-109-blue)](https://livecodes.io/docs/languages/) +[![LiveCodes: languages](https://img.shields.io/badge/languages-110-blue)](https://livecodes.io/docs/languages/) [![LiveCodes: docs](https://img.shields.io/badge/Documentation-575757?logo=gitbook&logoColor=white)](https://livecodes.io/docs/) [![LiveCodes: llms.txt](https://img.shields.io/badge/llms.txt-575757?logo=googledocs&logoColor=white)](https://livecodes.io/docs/llms.txt) [![LiveCodes: llms-full.txt](https://img.shields.io/badge/llms--full.txt-575757?logo=googledocs&logoColor=white)](https://livecodes.io/docs/llms-full.txt) diff --git a/docs/docs/languages/swift-wasm.mdx b/docs/docs/languages/swift-wasm.mdx new file mode 100644 index 0000000000..97ad18edea --- /dev/null +++ b/docs/docs/languages/swift-wasm.mdx @@ -0,0 +1,119 @@ +# Swift (Wasm) + +[Swift](https://www.swift.org/) is a general-purpose programming language developed by Apple, designed for safety, performance and expressiveness. + +In LiveCodes, Swift is compiled to WebAssembly by the Swift compiler itself, running on WebAssembly: `swift-frontend` compiles the source and LLVM's `wasm-ld` links the result, entirely in the browser. No backend is involved. + +:::info Note + +The native `swiftc` is a driver that spawns the compiler frontend and the linker as separate processes, and WebAssembly cannot spawn processes. Here the two run as separate WebAssembly modules in the same [result page](../features/result.mdx), driven by JavaScript. The toolchain is about 70 MB and is downloaded on the first run, which can take some time. + +::: + +## Usage + +Demo: + +import LiveCodes from '../../src/components/LiveCodes.tsx'; + +export const swiftConfig = { + activeEditor: 'script', + script: { + language: 'swift-wasm', + content: `struct Greeting { + let name: String + var message: String { "Hello, \\(name)!" } +}\n +for name in ["World", "LiveCodes", "Swift"] { + print(Greeting(name: name).message) +}`, + }, + mode: 'simple', + editor: 'auto', + tools: { + status: 'full', + }, +}; + + + +### Standard I/O + +Swift code runs in the context of the [result page](../features/result.mdx). Standard output (e.g. `print`) is captured and displayed in the [console](../features/console.mdx). Standard input is passed by setting the `livecodes.swift.input` property in JavaScript and is read in the Swift code using `readLine()`. + +### Communication with JavaScript + +The Swift code runs in the context of the result page. A few helper properties and methods are available in the browser global `livecodes.swift` object: + +- `livecodes.swift.input`: The standard input passed to the Swift program. It can be set before the initial run, or passed to `run` for subsequent runs. +- `livecodes.swift.loaded`: A promise that resolves when the Swift environment (compiler, linker and standard library) is fully loaded (and rejects if it fails to load). Other helpers should be used after this promise resolves. +- `livecodes.swift.ready`: A boolean that is `true` once the environment is loaded and a run has completed. +- `livecodes.swift.output`: The standard output of the last run. +- `livecodes.swift.error`: The compiler diagnostics or runtime error of the last run, if any. +- `livecodes.swift.exitCode`: The exit code of the last run. +- `livecodes.swift.run(input)`: Runs the code in the editor, optionally passing standard input, and returns a promise that resolves to `{ output, error, exitCode }`. + +```js +await livecodes.swift.loaded; +const { output, error, exitCode } = await livecodes.swift.run(livecodes.swift.input); +console.log(output); +``` + +## Language Info + +### Name + +`swift-wasm` + +### Aliases / Extensions + +`swift`, `swift-wasm`, `wasm.swift` + +### Editor + +`script` + +## Compiler + +The [Swift compiler](https://github.com/swiftlang/swift) frontend (`swift-frontend`) and LLVM's `wasm-ld` linker, both compiled to WebAssembly and running in the browser. The build is provided by [`swift-toolchain-wasm`](https://github.com/tothambrus11/swift-toolchain-wasm). + +### Version + +Swift 6.3.3 + +## Code Formatting + +Not supported. + +## Limitations + +The compiler runs on WebAssembly, which affects what it can do: + +- Programs are single-file. +- **Macros and compiler plugins are not supported.** Swift runs them as separate processes, and WebAssembly cannot spawn processes. +- **The Swift-implemented optimizer passes are disabled** because C++ interop is not available for this target. This affects optimization quality, not correctness. +- **A 4 GiB address space limit applies.** Single-file programs fit comfortably; very large modules may not. +- The toolchain (about 70 MB) is downloaded on the first run. + +## Example Usage + +This example passes standard input and runs the code again on each click, using the browser global `livecodes.swift` (also check the code in the HTML editor): + + + +## Live Reload + +By default, new code changes are sent to the result page for re-evaluation without a full page reload, avoiding the need to reinitialize the Swift WebAssembly environment. This behavior can be disabled by adding the code comment `// __livecodes_reload__` to the Swift code, which forces a full page reload. + +This comment can be added in the [`hiddenContent` property of the editor](../configuration/configuration-object.mdx#markup) for embedded playgrounds. + +## Starter Template + +https://livecodes.io/?template=swift-wasm + +## Links + +- [Swift](https://www.swift.org/) +- [The Swift Programming Language](https://docs.swift.org/swift-book/) +- [Swift compiler](https://github.com/swiftlang/swift) +- [swift-toolchain-wasm](https://github.com/tothambrus11/swift-toolchain-wasm) diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx index 13fbd2b58e..3ba35444b0 100644 --- a/docs/src/components/LanguageSliders.tsx +++ b/docs/src/components/LanguageSliders.tsx @@ -93,6 +93,7 @@ export default function Sliders() { { name: 'objc-wasm', title: 'Objective-C (Wasm)' }, { name: 'objcpp-wasm', title: 'Objective-C++ (Wasm)' }, { name: 'rust-wasm', title: 'Rust (Wasm)' }, + { name: 'swift-wasm', title: 'Swift (Wasm)' }, { name: 'haskell', title: 'Haskell' }, { name: 'haskell-wasm', title: 'Haskell (Wasm)' }, { name: 'zig-wasm', title: 'Zig (Wasm)' }, diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx index 00d0173de4..f6a6501883 100644 --- a/docs/src/components/TemplateList.tsx +++ b/docs/src/components/TemplateList.tsx @@ -51,6 +51,7 @@ const templates = [ { name: 'cpp-wasm', title: 'C++ (Wasm) Starter', thumbnail: 'cpp.svg' }, { name: 'objc-wasm', title: 'Objective-C (Wasm) Starter', thumbnail: 'objective-c.svg' }, { name: 'rust-wasm', title: 'Rust (Wasm) Starter', thumbnail: 'rust.svg' }, + { name: 'swift-wasm', title: 'Swift (Wasm) Starter', thumbnail: 'swift.svg' }, { name: 'haskell', title: 'Haskell Starter', thumbnail: 'haskell.svg' }, { name: 'haskell-wasm', title: 'Haskell (Wasm) Starter', thumbnail: 'haskell.svg' }, { name: 'zig-wasm', title: 'Zig (Wasm) Starter', thumbnail: 'zig.svg' }, diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts index 184b1e002a..95db9067cf 100644 --- a/e2e/specs/starter.spec.ts +++ b/e2e/specs/starter.spec.ts @@ -324,6 +324,35 @@ test.describe('Starter Templates from UI', () => { await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); }); + test('swift-wasm Starter', async ({ page, getTestUrl }) => { + // the Swift compiler, the linker and the stdlib sysroot (~70 MB) are downloaded on + // the first run + test.slow(); + + await page.goto(getTestUrl()); + + const { app, getResult, waitForResultUpdate } = await getLoadedApp(page); + + await app.click('[aria-label="Project"]'); + await app.click('text=New'); + await app.click('text=Swift (Wasm) Starter'); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + + // the counter stays disabled until the toolchain has loaded and run once + await expect(getResult().locator('#counter-button')).toBeEnabled({ timeout: 280_000 }); + + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + await getResult().click('text=Click me'); + + await expect(getResult().locator('h1')).toHaveText('Hello, Swift!'); + // Each click triggers an asynchronous run, so the counter is asserted with + // retries rather than read once. + await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.'); + }); + test('c-wasm Starter', async ({ page, getTestUrl }) => { // the compiler, linker and sysroot (~29 MB) are downloaded on the first run test.slow(); diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js index d98520c15e..4e9c320618 100644 --- a/functions/vendors/templates.js +++ b/functions/vendors/templates.js @@ -51,6 +51,7 @@ export const starterTemplates = { "cpp-wasm": "C++ (Wasm) Starter", "objc-wasm": "Objective-C (Wasm) Starter", "rust-wasm": "Rust (Wasm) Starter", + "swift-wasm": "Swift (Wasm) Starter", "zig-wasm": "Zig (Wasm) Starter", "java": "Java Starter", "csharp-wasm": "C# (Wasm) Starter", diff --git a/scripts/build.js b/scripts/build.js index 44e897eb98..175b06a45e 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -265,6 +265,7 @@ const iifeBuild = () => 'languages/scss/lang-scss-compiler.ts', 'languages/solid/lang-solid-compiler.ts', 'languages/sql/lang-sql-compiler.ts', + 'languages/swift-wasm/lang-swift-wasm-script.ts', 'languages/sql/lang-sql-script.ts', 'languages/svelte/lang-svelte-compiler.ts', 'languages/tcl/lang-tcl-script.ts', diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json index 3f7d0f7774..984a4497a0 100644 --- a/server/php/inc/starter-templates.json +++ b/server/php/inc/starter-templates.json @@ -51,6 +51,7 @@ "cpp-wasm": "C++ (Wasm) Starter", "objc-wasm": "Objective-C (Wasm) Starter", "rust-wasm": "Rust (Wasm) Starter", + "swift-wasm": "Swift (Wasm) Starter", "zig-wasm": "Zig (Wasm) Starter", "java": "Java Starter", "csharp-wasm": "C# (Wasm) Starter", diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts index 6374871fd4..091bc04112 100644 --- a/src/livecodes/UI/command-menu-actions.ts +++ b/src/livecodes/UI/command-menu-actions.ts @@ -307,6 +307,7 @@ export const getCommandMenuActions = ({ 'cpp-wasm', 'objc-wasm', 'rust-wasm', + 'swift-wasm', 'zig-wasm', 'java', 'csharp-wasm', diff --git a/src/livecodes/assets/templates/swift.svg b/src/livecodes/assets/templates/swift.svg new file mode 100644 index 0000000000..68630abe02 --- /dev/null +++ b/src/livecodes/assets/templates/swift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html index ec931cf2d0..a3af5fa038 100644 --- a/src/livecodes/html/language-info.html +++ b/src/livecodes/html/language-info.html @@ -1433,6 +1433,39 @@

Rust (Wasm)

+
+

Swift (Wasm)

+
+ Swift is compiled to WebAssembly by the Swift compiler itself: swift-frontend and + wasm-ld, both compiled to WebAssembly, run entirely in the browser. No server is + involved. +
+ +

Twig

diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json index 6bb24477c7..2a2565f934 100644 --- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "يتم تجميع Swift إلى WebAssembly بواسطة مُترجم Swift نفسه: swift-frontend وwasm-ld، وكلاهما مُجمَّع إلى WebAssembly ويعمل بالكامل داخل المتصفح. لا يتضمن ذلك أي خادم." + }, + "swiftWasm.link": { + "translation": " الموقع الرسمي لـ Swift لغة البرمجة Swift تعلم X في Y دقائق، حيث X = Swift وثائق LiveCodes تحميل قالب البدء " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl يعمل في المتصفح، باستخدام wacl." }, diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts index ef022213d7..f9db2261f8 100644 --- a/src/livecodes/i18n/locales/ar/language-info.ts +++ b/src/livecodes/i18n/locales/ar/language-info.ts @@ -451,6 +451,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>الموقع الرسمي لـ Svelte <3> <4>وثائق Svelte <5> <6>تحميل القالب الأولي ', name: 'Svelte', }, + swiftWasm: { + desc: 'يتم تجميع Swift إلى WebAssembly بواسطة مُترجم Swift نفسه: <1>swift-frontend و<2>wasm-ld، وكلاهما مُجمَّع إلى WebAssembly ويعمل بالكامل داخل المتصفح. لا يتضمن ذلك أي خادم.', + link: '<1> <2>الموقع الرسمي لـ Swift <3> <4>لغة البرمجة Swift <5> <6>تعلم X في Y دقائق، حيث X = Swift <7> <8>وثائق LiveCodes <9> <10>تحميل قالب البدء ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl يعمل في المتصفح، باستخدام <1>wacl.', link: '<1> <2>الموقع الرسمي لـ Tcl <3> <4>مستودع wacl <5> <6>تعلم X في Y دقائق، حيث X=Tcl <7> <8>تحميل القالب الأولي ', diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json index 72155023ac..f2feafe7c6 100644 --- a/src/livecodes/i18n/locales/ar/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "قالب Svelte" }, + "templates.starter.swift-wasm": { + "translation": "قالب Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "قالب Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts index 7b59d49733..54eb34f467 100644 --- a/src/livecodes/i18n/locales/ar/translation.ts +++ b/src/livecodes/i18n/locales/ar/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'قالب SQL', stencil: 'قالب Stencil', svelte: 'قالب Svelte', + 'swift-wasm': 'قالب Swift (Wasm)', tailwindcss: 'قالب Tailwind CSS', tcl: 'قالب Tcl', teal: 'قالب Teal', diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json index 4d266c8c31..5946bb66a4 100644 --- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift স্বয়ং Swift কম্পাইলার দ্বারা WebAssembly-তে কম্পাইল করা হয়েছে: swift-frontend এবং wasm-ld, উভয়ই WebAssembly-তে কম্পাইল করা হয়েছে এবং সম্পূর্ণরূপে ব্রাউজারে চলে। কোনো সার্ভার জড়িত নয়।" + }, + "swiftWasm.link": { + "translation": " Swift অফিসিয়াল ওয়েবসাইট Swift প্রোগ্রামিং ভাষা Y মিনিটে X শিখুন, যেখানে X=Swift লাইভকোডস ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "wacl ব্যবহার করে ব্রাউজারে চলমান Tcl।" }, diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts index dd714c4b38..40afdc745c 100644 --- a/src/livecodes/i18n/locales/bn/language-info.ts +++ b/src/livecodes/i18n/locales/bn/language-info.ts @@ -453,6 +453,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte অফিসিয়াল ওয়েবসাইট <3> <4>Svelte ডকুমেন্টেশন <5> <6>স্টার্টার টেমপ্লেট লোড করুন ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift স্বয়ং Swift কম্পাইলার দ্বারা WebAssembly-তে কম্পাইল করা হয়েছে: <1>swift-frontend এবং <2>wasm-ld, উভয়ই WebAssembly-তে কম্পাইল করা হয়েছে এবং সম্পূর্ণরূপে ব্রাউজারে চলে। কোনো সার্ভার জড়িত নয়।', + link: '<1> <2>Swift অফিসিয়াল ওয়েবসাইট <3> <4>Swift প্রোগ্রামিং ভাষা <5> <6>Y মিনিটে X শিখুন, যেখানে X=Swift <7> <8>লাইভকোডস ডকুমেন্টেশন <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', + name: 'Swift (Wasm)', + }, tcl: { desc: '<1>wacl ব্যবহার করে ব্রাউজারে চলমান Tcl।', link: '<1> <2>Tcl অফিসিয়াল ওয়েবসাইট <3> <4>wacl রেপো <5> <6>Y মিনিটে X শিখুন, যেখানে X=Tcl <7> <8>স্টার্টার টেমপ্লেট লোড করুন ', diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json index ea9f7036af..914792bd9b 100644 --- a/src/livecodes/i18n/locales/bn/translation.lokalise.json +++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte স্টার্টার" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm) স্টার্টার" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS স্টার্টার" }, diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts index 3ec23901ac..c677bfcc35 100644 --- a/src/livecodes/i18n/locales/bn/translation.ts +++ b/src/livecodes/i18n/locales/bn/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'SQL স্টার্টার', stencil: 'Stencil স্টার্টার', svelte: 'Svelte স্টার্টার', + 'swift-wasm': 'Swift (Wasm) স্টার্টার', tailwindcss: 'Tailwind CSS স্টার্টার', tcl: 'Tcl স্টার্টার', teal: 'Teal স্টার্টার', diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json index aee8e5666b..0fbdaf2e0c 100644 --- a/src/livecodes/i18n/locales/de/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift wird vom Swift-Compiler selbst zu WebAssembly kompiliert: swift-frontend und wasm-ld sind beide zu WebAssembly kompiliert und laufen vollständig im Browser. Es ist kein Server beteiligt." + }, + "swiftWasm.link": { + "translation": " Offizielle Website von Swift Die Swift Programmiersprache Lerne X in Y Minuten, wobei X = Swift LiveCodes-Dokumentation Startervorlage laden " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl läuft im Browser mit wacl." }, diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts index f63dd5dfe6..f5e540a135 100644 --- a/src/livecodes/i18n/locales/de/language-info.ts +++ b/src/livecodes/i18n/locales/de/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Offizielle Svelte-Website <3> <4>Svelte-Dokumentation <5> <6>Starter-Vorlage laden ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift wird vom Swift-Compiler selbst zu WebAssembly kompiliert: <1>swift-frontend und <2>wasm-ld sind beide zu WebAssembly kompiliert und laufen vollständig im Browser. Es ist kein Server beteiligt.', + link: '<1> <2>Offizielle Website von Swift <3> <4>Die Swift Programmiersprache <5> <6>Lerne X in Y Minuten, wobei X = Swift <7> <8>LiveCodes-Dokumentation <9> <10>Startervorlage laden ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl läuft im Browser mit <1>wacl.', link: '<1> <2>Offizielle Tcl-Website <3> <4>wacl-Repository <5> <6>Lerne X in Y Minuten, wobei X=Tcl <7> <8>Starter-Vorlage laden ', diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json index ff21e11d38..be9f2e91a9 100644 --- a/src/livecodes/i18n/locales/de/translation.lokalise.json +++ b/src/livecodes/i18n/locales/de/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte-Starter" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm)-Starter" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS-Starter" }, diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts index 13c141a2ff..501fbf92ad 100644 --- a/src/livecodes/i18n/locales/de/translation.ts +++ b/src/livecodes/i18n/locales/de/translation.ts @@ -1050,6 +1050,7 @@ const translation: I18nTranslation = { sql: 'SQL-Starter', stencil: 'Stencil-Starter', svelte: 'Svelte-Starter', + 'swift-wasm': 'Swift (Wasm)-Starter', tailwindcss: 'Tailwind CSS-Starter', tcl: 'Tcl-Starter', teal: 'Teal-Starter', diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json index fa108af989..cfc122c7aa 100644 --- a/src/livecodes/i18n/locales/en/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json @@ -1072,6 +1072,18 @@ "notes": "", "translation": "Svelte" }, + "swiftWasm.desc": { + "notes": "### ###\n\n\n### ###\n\n\n", + "translation": "Swift is compiled to WebAssembly by the Swift compiler itself: swift-frontend and wasm-ld, both compiled to WebAssembly, run entirely in the browser. No server is involved." + }, + "swiftWasm.link": { + "notes": "### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n### ###\n
  • \n\n### ###\n\n\n", + "translation": " Swift official website The Swift Programming Language Learn X in Y minutes, where X=Swift LiveCodes Documentation Load starter template " + }, + "swiftWasm.name": { + "notes": "", + "translation": "Swift (Wasm)" + }, "tcl.desc": { "notes": "### ###\n\n\n", "translation": "Tcl running in the browser, using wacl." diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts index 77bf111ed5..1c5e4eb021 100644 --- a/src/livecodes/i18n/locales/en/language-info.ts +++ b/src/livecodes/i18n/locales/en/language-info.ts @@ -461,6 +461,11 @@ const languageInfo = { link: '<1> <2>Svelte official website <3> <4>Svelte documentation <5> <6>Load starter template ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift is compiled to WebAssembly by the Swift compiler itself: <1>swift-frontend and <2>wasm-ld, both compiled to WebAssembly, run entirely in the browser. No server is involved.', + link: '<1> <2>Swift official website <3> <4>The Swift Programming Language <5> <6>Learn X in Y minutes, where X=Swift <7> <8>LiveCodes Documentation <9> <10>Load starter template ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl running in the browser, using <1>wacl.', link: '<1> <2>Tcl official website <3> <4>wacl repo <5> <6>Learn X in Y minutes, where X=Tcl <7> <8>Load starter template ', diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json index b8d30ff3cf..482321065f 100644 --- a/src/livecodes/i18n/locales/en/translation.lokalise.json +++ b/src/livecodes/i18n/locales/en/translation.lokalise.json @@ -2836,6 +2836,10 @@ "notes": "", "translation": "Svelte Starter" }, + "templates.starter.swift-wasm": { + "notes": "", + "translation": "Swift (Wasm) Starter" + }, "templates.starter.tailwindcss": { "notes": "", "translation": "Tailwind CSS Starter" diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts index ea3e305035..d80bc7f6ec 100644 --- a/src/livecodes/i18n/locales/en/translation.ts +++ b/src/livecodes/i18n/locales/en/translation.ts @@ -1055,6 +1055,7 @@ const translation = { sql: 'SQL Starter', stencil: 'Stencil Starter', svelte: 'Svelte Starter', + 'swift-wasm': 'Swift (Wasm) Starter', tailwindcss: 'Tailwind CSS Starter', tcl: 'Tcl Starter', teal: 'Teal Starter', diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json index cca2bb5d0a..4ff33090fa 100644 --- a/src/livecodes/i18n/locales/es/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift se compila a WebAssembly por el propio compilador de Swift: swift-frontend y wasm-ld, ambos compilados a WebAssembly, se ejecutan íntegramente en el navegador. No hay ningún servidor involucrado." + }, + "swiftWasm.link": { + "translation": " Página web oficial de Swift El Lenguaje de Programación Swift Aprende X en Y minutos, donde X = Swift Documentación de LiveCodes Cargar plantilla de inicio " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl ejecutándose en el navegador, usando wacl." }, diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts index 0eed2116d1..49d5ecdfbc 100644 --- a/src/livecodes/i18n/locales/es/language-info.ts +++ b/src/livecodes/i18n/locales/es/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Sitio web oficial de Svelte <3> <4>Documentación de Svelte <5> <6>Cargar plantilla inicial ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift se compila a WebAssembly por el propio compilador de Swift: <1>swift-frontend y <2>wasm-ld, ambos compilados a WebAssembly, se ejecutan íntegramente en el navegador. No hay ningún servidor involucrado.', + link: '<1> <2>Página web oficial de Swift <3> <4>El Lenguaje de Programación Swift <5> <6>Aprende X en Y minutos, donde X = Swift <7> <8>Documentación de LiveCodes <9> <10>Cargar plantilla de inicio ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl ejecutándose en el navegador, usando <1>wacl.', link: '<1> <2>Sitio web oficial de Tcl <3> <4>Repositorio de wacl <5> <6>Aprende X en Y minutos, donde X=Tcl <7> <8>Cargar plantilla inicial ', diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json index fa60fc91bb..e694648254 100644 --- a/src/livecodes/i18n/locales/es/translation.lokalise.json +++ b/src/livecodes/i18n/locales/es/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Inicio Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Inicio Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Inicio Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts index 5eb246339e..c943ad56f7 100644 --- a/src/livecodes/i18n/locales/es/translation.ts +++ b/src/livecodes/i18n/locales/es/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'Inicio SQL', stencil: 'Inicio Stencil', svelte: 'Inicio Svelte', + 'swift-wasm': 'Inicio Swift (Wasm)', tailwindcss: 'Inicio Tailwind CSS', tcl: 'Inicio Tcl', teal: 'Inicio Teal', diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json index d95d566527..fc3245b201 100644 --- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift توسط خود کامپایلر Swift به WebAssembly کامپایل می‌شود: swift-frontend و wasm-ld که هر دو به WebAssembly کامپایل شده‌اند و کاملاً در مرورگر اجرا می‌شوند. هیچ سروری درگیر نیست." + }, + "swiftWasm.link": { + "translation": " وب‌سایت رسمی Swift زبان برنامه‌نویسی Swift یادگیری X در Y دقیقه، که X=Swift مستندات لایوکدز بارگذاری قالب شروع " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl که در مرورگر اجرا می‌شود، با استفاده از wacl." }, diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts index c650f797ed..0d394b3eb9 100644 --- a/src/livecodes/i18n/locales/fa/language-info.ts +++ b/src/livecodes/i18n/locales/fa/language-info.ts @@ -454,6 +454,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>وب‌سایت رسمی Svelte <3> <4>مستندات Svelte <5> <6>بارگذاری قالب شروع کننده ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift توسط خود کامپایلر Swift به WebAssembly کامپایل می‌شود: <1>swift-frontend و <2>wasm-ld که هر دو به WebAssembly کامپایل شده‌اند و کاملاً در مرورگر اجرا می‌شوند. هیچ سروری درگیر نیست.', + link: '<1> <2>وب‌سایت رسمی Swift <3> <4>زبان برنامه‌نویسی Swift <5> <6>یادگیری X در Y دقیقه، که X=Swift <7> <8>مستندات لایوکدز <9> <10>بارگذاری قالب شروع ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl که در مرورگر اجرا می‌شود، با استفاده از <1>wacl.', link: '<1> <2>وب‌سایت رسمی Tcl <3> <4>مخزن wacl <5> <6>یادگیری X در Y دقیقه، جایی که X=Tcl <7> <8>بارگذاری قالب شروع کننده ', diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json index cd2a637323..ec20a37980 100644 --- a/src/livecodes/i18n/locales/fa/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "شروع کننده Svelte" }, + "templates.starter.swift-wasm": { + "translation": "شروع کننده Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "شروع کننده Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts index 8ab63e9250..55163f22b0 100644 --- a/src/livecodes/i18n/locales/fa/translation.ts +++ b/src/livecodes/i18n/locales/fa/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'شروع کننده SQL', stencil: 'شروع کننده Stencil', svelte: 'شروع کننده Svelte', + 'swift-wasm': 'شروع کننده Swift (Wasm)', tailwindcss: 'شروع کننده Tailwind CSS', tcl: 'شروع کننده Tcl', teal: 'شروع کننده Teal', diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json index 80cfa86b57..30547f00c1 100644 --- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift est compilé en WebAssembly par le compilateur Swift lui-même : swift-frontend et wasm-ld, tous deux compilés en WebAssembly, s'exécutent entièrement dans le navigateur. Aucun serveur n'est impliqué." + }, + "swiftWasm.link": { + "translation": " Site officiel de Swift Le langage de programmation Swift Apprenez X en Y minutes, où X = Swift Documentation LiveCodes Charger un modèle de démarrage " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl s'exécutant dans le navigateur, en utilisant wacl." }, diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts index 89953200dd..753745d587 100644 --- a/src/livecodes/i18n/locales/fr/language-info.ts +++ b/src/livecodes/i18n/locales/fr/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Site officiel de Svelte <3> <4>Documentation de Svelte <5> <6>Charger le modèle de démarrage ', name: 'Svelte', }, + swiftWasm: { + desc: "Swift est compilé en WebAssembly par le compilateur Swift lui-même : <1>swift-frontend et <2>wasm-ld, tous deux compilés en WebAssembly, s'exécutent entièrement dans le navigateur. Aucun serveur n'est impliqué.", + link: '<1> <2>Site officiel de Swift <3> <4>Le langage de programmation Swift <5> <6>Apprenez X en Y minutes, où X = Swift <7> <8>Documentation LiveCodes <9> <10>Charger un modèle de démarrage ', + name: 'Swift (Wasm)', + }, tcl: { desc: "Tcl s'exécutant dans le navigateur, en utilisant <1>wacl.", link: '<1> <2>Site officiel de Tcl <3> <4>Dépôt wacl <5> <6>Apprenez X en Y minutes, où X=Tcl <7> <8>Charger le modèle de démarrage ', diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json index f1d696ba05..ecf3a38156 100644 --- a/src/livecodes/i18n/locales/fr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Démarrage Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Démarrage Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Démarrage Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts index 06cd6ee5a0..88b5d1df05 100644 --- a/src/livecodes/i18n/locales/fr/translation.ts +++ b/src/livecodes/i18n/locales/fr/translation.ts @@ -1050,6 +1050,7 @@ const translation: I18nTranslation = { sql: 'Démarrage SQL', stencil: 'Démarrage Stencil', svelte: 'Démarrage Svelte', + 'swift-wasm': 'Démarrage Swift (Wasm)', tailwindcss: 'Démarrage Tailwind CSS', tcl: 'Démarrage Tcl', teal: 'Démarrage Teal', diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json index 5cb25eb594..beabd6f8ec 100644 --- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift को स्वयं Swift कंपाइलर द्वारा WebAssembly में संकलित किया गया है: swift-frontend और wasm-ld, दोनों WebAssembly में संकलित हैं और पूरी तरह से ब्राउज़र में चलते हैं। कोई सर्वर शामिल नहीं है।" + }, + "swiftWasm.link": { + "translation": " Swift आधिकारिक वेबसाइट Swift प्रोग्रामिंग भाषा Y मिनट में X सीखें, जहाँ X=Swift लाइवकोड्स दस्तावेज़ीकरण स्टार्टर टेम्पलेट लोड करें " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "wacl का उपयोग करके ब्राउज़र में चलने वाला Tcl।" }, diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts index bb0e724eef..c1cbc04830 100644 --- a/src/livecodes/i18n/locales/hi/language-info.ts +++ b/src/livecodes/i18n/locales/hi/language-info.ts @@ -456,6 +456,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte आधिकारिक वेबसाइट <3> <4>Svelte दस्तावेज़ीकरण <5> <6>स्टार्टर टेम्पलेट लोड करें ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift को स्वयं Swift कंपाइलर द्वारा WebAssembly में संकलित किया गया है: <1>swift-frontend और <2>wasm-ld, दोनों WebAssembly में संकलित हैं और पूरी तरह से ब्राउज़र में चलते हैं। कोई सर्वर शामिल नहीं है।', + link: '<1> <2>Swift आधिकारिक वेबसाइट <3> <4>Swift प्रोग्रामिंग भाषा <5> <6>Y मिनट में X सीखें, जहाँ X=Swift <7> <8>लाइवकोड्स दस्तावेज़ीकरण <9> <10>स्टार्टर टेम्पलेट लोड करें ', + name: 'Swift (Wasm)', + }, tcl: { desc: '<1>wacl का उपयोग करके ब्राउज़र में चलने वाला Tcl।', link: '<1> <2>Tcl आधिकारिक वेबसाइट <3> <4>wacl रेपो <5> <6>X को Y मिनटों में सीखें, जहां X=Tcl <7> <8>स्टार्टर टेम्पलेट लोड करें ', diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json index 2de91b7ab3..ff6dc55e66 100644 --- a/src/livecodes/i18n/locales/hi/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte स्टार्टर" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm) स्टार्टर" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS स्टार्टर" }, diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts index e58d96f5b0..a815bfa6a4 100644 --- a/src/livecodes/i18n/locales/hi/translation.ts +++ b/src/livecodes/i18n/locales/hi/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'SQL स्टार्टर', stencil: 'Stencil स्टार्टर', svelte: 'Svelte स्टार्टर', + 'swift-wasm': 'Swift (Wasm) स्टार्टर', tailwindcss: 'Tailwind CSS स्टार्टर', tcl: 'Tcl स्टार्टर', teal: 'Teal स्टार्टर', diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json index e994cd63b8..e44f08e61d 100644 --- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "A Swiftet maga a Swift-fordító fordítja WebAssembly-re: a swift-frontend és a wasm-ld is WebAssembly-re van fordítva, és teljes egészében a böngészőben fut. Nem vesz igénybe szervert." + }, + "swiftWasm.link": { + "translation": " A Swift hivatalos weboldala A Swift programozási nyelv Tanulj meg X-et Y perc alatt, ahol X=Swift LiveCodes dokumentáció Indító sablon betöltése " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl fut a böngészőben, a wacl használatával." }, diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts index 68d675e987..d2306d8a53 100644 --- a/src/livecodes/i18n/locales/hu/language-info.ts +++ b/src/livecodes/i18n/locales/hu/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte hivatalos weboldal <3> <4>Svelte dokumentáció <5> <6>Kezdő sablon betöltése ', name: 'Svelte', }, + swiftWasm: { + desc: 'A Swiftet maga a Swift-fordító fordítja WebAssembly-re: a <1>swift-frontend és a <2>wasm-ld is WebAssembly-re van fordítva, és teljes egészében a böngészőben fut. Nem vesz igénybe szervert.', + link: '<1> <2>A Swift hivatalos weboldala <3> <4>A Swift programozási nyelv <5> <6>Tanulj meg X-et Y perc alatt, ahol X=Swift <7> <8>LiveCodes dokumentáció <9> <10>Indító sablon betöltése ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl fut a böngészőben, a <1>wacl használatával.', link: '<1> <2>Tcl hivatalos weboldal <3> <4>wacl repo <5> <6>Tanulj X-et Y perc alatt, ahol X=Tcl <7> <8>Kezdő sablon betöltése ', diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json index 1042d7f77d..104635491a 100644 --- a/src/livecodes/i18n/locales/hu/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte kezdő" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm) kezdő" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS kezdő" }, diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts index 57f8fc7175..2211b85db4 100644 --- a/src/livecodes/i18n/locales/hu/translation.ts +++ b/src/livecodes/i18n/locales/hu/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'SQL kezdő', stencil: 'Stencil kezdő', svelte: 'Svelte kezdő', + 'swift-wasm': 'Swift (Wasm) kezdő', tailwindcss: 'Tailwind CSS kezdő', tcl: 'Tcl kezdő', teal: 'Teal kezdő', diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json index eb099732b4..c16b14315e 100644 --- a/src/livecodes/i18n/locales/id/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift dikompilasi ke WebAssembly oleh kompiler Swift itu sendiri: swift-frontend dan wasm-ld, keduanya dikompilasi ke WebAssembly dan berjalan sepenuhnya di dalam browser. Tidak ada server yang terlibat." + }, + "swiftWasm.link": { + "translation": " Situs web resmi Swift Bahasa Pemrograman Swift Belajar X dalam Y menit, di mana X = Swift Dokumentasi LiveCodes Muat templat awal " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl berjalan di browser, menggunakan wacl." }, diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts index cb1f8338e7..29d6af08b0 100644 --- a/src/livecodes/i18n/locales/id/language-info.ts +++ b/src/livecodes/i18n/locales/id/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Situs web resmi Svelte <3> <4>Dokumentasi Svelte <5> <6>Muat template pemula ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift dikompilasi ke WebAssembly oleh kompiler Swift itu sendiri: <1>swift-frontend dan <2>wasm-ld, keduanya dikompilasi ke WebAssembly dan berjalan sepenuhnya di dalam browser. Tidak ada server yang terlibat.', + link: '<1> <2>Situs web resmi Swift <3> <4>Bahasa Pemrograman Swift <5> <6>Belajar X dalam Y menit, di mana X = Swift <7> <8>Dokumentasi LiveCodes <9> <10>Muat templat awal ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl berjalan di browser, menggunakan <1>wacl.', link: '<1> <2>Situs web resmi Tcl <3> <4>Repo wacl <5> <6>Pelajari X dalam Y menit, dengan X=Tcl <7> <8>Muat template pemula ', diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json index 859904e2eb..88ff86c599 100644 --- a/src/livecodes/i18n/locales/id/translation.lokalise.json +++ b/src/livecodes/i18n/locales/id/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Pemula Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Pemula Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Pemula Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts index dd1b6c6ce1..fb8b322120 100644 --- a/src/livecodes/i18n/locales/id/translation.ts +++ b/src/livecodes/i18n/locales/id/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'Pemula SQL', stencil: 'Pemula Stencil', svelte: 'Pemula Svelte', + 'swift-wasm': 'Pemula Swift (Wasm)', tailwindcss: 'Pemula Tailwind CSS', tcl: 'Pemula Tcl', teal: 'Pemula Teal', diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json index b6769267c7..e87184820a 100644 --- a/src/livecodes/i18n/locales/it/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift viene compilato in WebAssembly dal compilatore Swift stesso: swift-frontend e wasm-ld, entrambi compilati in WebAssembly, vengono eseguiti interamente nel browser. Nessun server è coinvolto." + }, + "swiftWasm.link": { + "translation": " Sito web ufficiale di Swift Il linguaggio di programmazione Swift Impara X in Y minuti, dove X = Swift Documentazione di LiveCodes Carica il modello di partenza " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl in esecuzione nel browser, utilizzando wacl." }, diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts index c90adeda89..946954ff46 100644 --- a/src/livecodes/i18n/locales/it/language-info.ts +++ b/src/livecodes/i18n/locales/it/language-info.ts @@ -454,6 +454,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Sito ufficiale di Svelte <3> <4>Documentazione di Svelte <5> <6>Carica modello di partenza ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift viene compilato in WebAssembly dal compilatore Swift stesso: <1>swift-frontend e <2>wasm-ld, entrambi compilati in WebAssembly, vengono eseguiti interamente nel browser. Nessun server è coinvolto.', + link: '<1> <2>Sito web ufficiale di Swift <3> <4>Il linguaggio di programmazione Swift <5> <6>Impara X in Y minuti, dove X = Swift <7> <8>Documentazione di LiveCodes <9> <10>Carica il modello di partenza ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl in esecuzione nel browser, utilizzando <1>wacl.', link: '<1> <2>Sito ufficiale di Tcl <3> <4>Repository di wacl <5> <6>Impara X in Y minuti, dove X=Tcl <7> <8>Carica modello di partenza ', diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json index 1bc2feacf0..c8c7981ddd 100644 --- a/src/livecodes/i18n/locales/it/translation.lokalise.json +++ b/src/livecodes/i18n/locales/it/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Starter Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Starter Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Starter Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts index bdb355a444..af608f2a13 100644 --- a/src/livecodes/i18n/locales/it/translation.ts +++ b/src/livecodes/i18n/locales/it/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'Starter SQL', stencil: 'Starter Stencil', svelte: 'Starter Svelte', + 'swift-wasm': 'Starter Swift (Wasm)', tailwindcss: 'Starter Tailwind CSS', tcl: 'Starter Tcl', teal: 'Starter Teal', diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json index 71a266a5d3..d510b784d6 100644 --- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift は Swift コンパイラ自身によって WebAssembly にコンパイルされます。swift-frontend と wasm-ld はいずれも WebAssembly にコンパイルされ、完全にブラウザ内で実行されます。サーバーは関与しません。" + }, + "swiftWasm.link": { + "translation": " Swift 公式サイト Swiftプログラミング言語 「Y分でXを学ぶ」(X=Swift) LiveCodes ドキュメント スターターテンプレートを読み込む " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "waclを使用してブラウザで動作する Tcl。" }, diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts index 9213e76bad..2c4fa14c44 100644 --- a/src/livecodes/i18n/locales/ja/language-info.ts +++ b/src/livecodes/i18n/locales/ja/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte 公式ウェブサイト <3> <4>Svelte ドキュメント <5> <6>スターターテンプレートを読み込む ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift は Swift コンパイラ自身によって WebAssembly にコンパイルされます。<1>swift-frontend と <2>wasm-ld はいずれも WebAssembly にコンパイルされ、完全にブラウザ内で実行されます。サーバーは関与しません。', + link: '<1> <2>Swift 公式サイト <3> <4>Swiftプログラミング言語 <5> <6>「Y分でXを学ぶ」(X=Swift) <7> <8>LiveCodes ドキュメント <9> <10>スターターテンプレートを読み込む ', + name: 'Swift (Wasm)', + }, tcl: { desc: '<1>waclを使用してブラウザで動作する Tcl。', link: '<1> <2>Tcl 公式ウェブサイト <3> <4>wacl リポジトリ <5> <6>X分でYを学ぶ、X=Tcl <7> <8>スターターテンプレートを読み込む ', diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json index 84d988f0a9..01185a398e 100644 --- a/src/livecodes/i18n/locales/ja/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelteスターター" }, + "templates.starter.swift-wasm": { + "translation": "Swift(Wasm)スターター" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSSスターター" }, diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts index d2c019e3d3..000e5cf657 100644 --- a/src/livecodes/i18n/locales/ja/translation.ts +++ b/src/livecodes/i18n/locales/ja/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'SQLスターター', stencil: 'Stencilスターター', svelte: 'Svelteスターター', + 'swift-wasm': 'Swift(Wasm)スターター', tailwindcss: 'Tailwind CSSスターター', tcl: 'Tclスターター', teal: 'Tealスターター', diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json index 24e4e6eda5..f962a695b8 100644 --- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift wordt door de Swift-compiler zelf naar WebAssembly gecompileerd: swift-frontend en wasm-ld zijn beide naar WebAssembly gecompileerd en draaien volledig in de browser. Er is geen server bij betrokken." + }, + "swiftWasm.link": { + "translation": " Officiële website van Swift The Swift Programming Language Leer X in Y minuten, waarbij X = Swift LiveCodes-documentatie Starterssjabloon laden " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl draaiend in de browser, met wacl." }, diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts index 488cac5f59..d355a2d516 100644 --- a/src/livecodes/i18n/locales/nl/language-info.ts +++ b/src/livecodes/i18n/locales/nl/language-info.ts @@ -454,6 +454,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte officiële website <3> <4>Svelte documentatie <5> <6>Startsjabloon laden ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift wordt door de Swift-compiler zelf naar WebAssembly gecompileerd: <1>swift-frontend en <2>wasm-ld zijn beide naar WebAssembly gecompileerd en draaien volledig in de browser. Er is geen server bij betrokken.', + link: '<1> <2>Officiële website van Swift <3> <4>The Swift Programming Language <5> <6>Leer X in Y minuten, waarbij X = Swift <7> <8>LiveCodes-documentatie <9> <10>Starterssjabloon laden ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl draaiend in de browser, met <1>wacl.', link: '<1> <2>Tcl officiële website <3> <4>wacl repo <5> <6>Leer X in Y minuten, waarbij X=Tcl <7> <8>Startsjabloon laden ', diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json index 93598f3957..28bad6fb4e 100644 --- a/src/livecodes/i18n/locales/nl/translation.lokalise.json +++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte-starter" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm)-starter" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS-starter" }, diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts index 2130970f82..eae95d3766 100644 --- a/src/livecodes/i18n/locales/nl/translation.ts +++ b/src/livecodes/i18n/locales/nl/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'SQL-starter', stencil: 'Stencil-starter', svelte: 'Svelte-starter', + 'swift-wasm': 'Swift (Wasm)-starter', tailwindcss: 'Tailwind CSS-starter', tcl: 'Tcl-starter', teal: 'Teal-starter', diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json index 185a1c2b58..527e405db1 100644 --- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "O Swift é compilado para WebAssembly pelo próprio compilador Swift: swift-frontend e wasm-ld, ambos compilados para WebAssembly, são executados inteiramente no navegador. Nenhum servidor está envolvido." + }, + "swiftWasm.link": { + "translation": " Site oficial do Swift A Linguagem de Programação Swift Aprenda X em Y minutos, onde X = Swift Documentação do LiveCodes Carregar modelo inicial " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl rodando no navegador, usando wacl." }, diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts index 616c965a82..c30c4689e1 100644 --- a/src/livecodes/i18n/locales/pt/language-info.ts +++ b/src/livecodes/i18n/locales/pt/language-info.ts @@ -454,6 +454,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Site oficial do Svelte <3> <4>Documentação do Svelte <5> <6>Carregar modelo inicial ', name: 'Svelte', }, + swiftWasm: { + desc: 'O Swift é compilado para WebAssembly pelo próprio compilador Swift: <1>swift-frontend e <2>wasm-ld, ambos compilados para WebAssembly, são executados inteiramente no navegador. Nenhum servidor está envolvido.', + link: '<1> <2>Site oficial do Swift <3> <4>A Linguagem de Programação Swift <5> <6>Aprenda X em Y minutos, onde X = Swift <7> <8>Documentação do LiveCodes <9> <10>Carregar modelo inicial ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl rodando no navegador, usando <1>wacl.', link: '<1> <2>Site oficial do Tcl <3> <4>Repositório do wacl <5> <6>Aprenda X em Y minutos, onde X=Tcl <7> <8>Carregar modelo inicial ', diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json index 5235490e33..a9f4e98a9f 100644 --- a/src/livecodes/i18n/locales/pt/translation.lokalise.json +++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Iniciante Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Iniciante Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Iniciante Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts index 09214b06cf..b08a6eb025 100644 --- a/src/livecodes/i18n/locales/pt/translation.ts +++ b/src/livecodes/i18n/locales/pt/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'Iniciante SQL', stencil: 'Iniciante Stencil', svelte: 'Iniciante Svelte', + 'swift-wasm': 'Iniciante Swift (Wasm)', tailwindcss: 'Iniciante Tailwind CSS', tcl: 'Iniciante Tcl', teal: 'Iniciante Teal', diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json index 912af64d61..76c5c5f4fc 100644 --- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift компилируется в WebAssembly самим компилятором Swift: swift-frontend и wasm-ld также скомпилированы в WebAssembly и выполняются полностью в браузере. Сервер не задействован." + }, + "swiftWasm.link": { + "translation": " Официальный сайт Swift Язык программирования Swift «Изучите X за Y минут», где X = Swift Документация LiveCodes Загрузить стартовый шаблон " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tcl, работающий в браузере, с использованием wacl." }, diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts index bb9498cd55..791f0d80b4 100644 --- a/src/livecodes/i18n/locales/ru/language-info.ts +++ b/src/livecodes/i18n/locales/ru/language-info.ts @@ -456,6 +456,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Официальный сайт Svelte <3> <4>Документация Svelte <5> <6>Загрузить стартовый шаблон ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift компилируется в WebAssembly самим компилятором Swift: <1>swift-frontend и <2>wasm-ld также скомпилированы в WebAssembly и выполняются полностью в браузере. Сервер не задействован.', + link: '<1> <2>Официальный сайт Swift <3> <4>Язык программирования Swift <5> <6>«Изучите X за Y минут», где X = Swift <7> <8>Документация LiveCodes <9> <10>Загрузить стартовый шаблон ', + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tcl, работающий в браузере, с использованием <1>wacl.', link: '<1> <2>Официальный сайт Tcl <3> <4>Репозиторий wacl <5> <6>Изучите X за Y минут, где X=Tcl <7> <8>Загрузить стартовый шаблон ', diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json index b9a3330222..555a504e14 100644 --- a/src/livecodes/i18n/locales/ru/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Стартер Svelte" }, + "templates.starter.swift-wasm": { + "translation": "Стартер Swift (Wasm)" + }, "templates.starter.tailwindcss": { "translation": "Стартер Tailwind CSS" }, diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts index 1b15b20e06..37c1cde383 100644 --- a/src/livecodes/i18n/locales/ru/translation.ts +++ b/src/livecodes/i18n/locales/ru/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'Стартер SQL', stencil: 'Стартер Stencil', svelte: 'Стартер Svelte', + 'swift-wasm': 'Стартер Swift (Wasm)', tailwindcss: 'Стартер Tailwind CSS', tcl: 'Стартер Tcl', teal: 'Стартер Teal', diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json index e19a93fb22..78771904f1 100644 --- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift, Swift derleyicisinin kendisi tarafından WebAssembly'ye derlenir: swift-frontend ve wasm-ld de WebAssembly'ye derlenir ve tamamen tarayıcı içinde çalışır. Hiçbir sunucu devreye girmez." + }, + "swiftWasm.link": { + "translation": " Swift resmi web sitesi Swift Programlama Dili Y dakikada X'i öğrenin, burada X=Swift LiveCodes Belgeleri Başlangıç şablonunu yükle " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "Tarayıcıda, wacl kullanılarak çalışan Tcl." }, diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts index af9bebfb41..81a269936b 100644 --- a/src/livecodes/i18n/locales/tr/language-info.ts +++ b/src/livecodes/i18n/locales/tr/language-info.ts @@ -455,6 +455,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte resmi web sitesi <3> <4>Svelte dokümantasyonu <5> <6>Başlangıç şablonunu yükle ', name: 'Svelte', }, + swiftWasm: { + desc: "Swift, Swift derleyicisinin kendisi tarafından WebAssembly'ye derlenir: <1>swift-frontend ve <2>wasm-ld de WebAssembly'ye derlenir ve tamamen tarayıcı içinde çalışır. Hiçbir sunucu devreye girmez.", + link: "<1> <2>Swift resmi web sitesi <3> <4>Swift Programlama Dili <5> <6>Y dakikada X'i öğrenin, burada X=Swift <7> <8>LiveCodes Belgeleri <9> <10>Başlangıç şablonunu yükle ", + name: 'Swift (Wasm)', + }, tcl: { desc: 'Tarayıcıda, <1>wacl kullanılarak çalışan Tcl.', link: "<1> <2>Tcl resmi web sitesi <3> <4>wacl repo'su <5> <6>Y Dakikada X Öğrenin, X=Tcl <7> <8>Başlangıç şablonunu yükle ", diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json index 8c70b159c8..48f581a7e0 100644 --- a/src/livecodes/i18n/locales/tr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte Başlangıç" }, + "templates.starter.swift-wasm": { + "translation": "Swift (Wasm) Başlangıç" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS Başlangıç" }, diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts index 32fa784668..77025c5968 100644 --- a/src/livecodes/i18n/locales/tr/translation.ts +++ b/src/livecodes/i18n/locales/tr/translation.ts @@ -1049,6 +1049,7 @@ const translation: I18nTranslation = { sql: 'SQL Başlangıç', stencil: 'Stencil Başlangıç', svelte: 'Svelte Başlangıç', + 'swift-wasm': 'Swift (Wasm) Başlangıç', tailwindcss: 'Tailwind CSS Başlangıç', tcl: 'Tcl Başlangıç', teal: 'Teal Başlangıç', diff --git a/src/livecodes/i18n/locales/ur/language-info.lokalise.json b/src/livecodes/i18n/locales/ur/language-info.lokalise.json index 2440d4542d..e836b2d5b2 100644 --- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift کو خود Swift کمپائلر کے ذریعے WebAssembly میں مرتب کیا گیا ہے: swift-frontend اور wasm-ld, دونوں WebAssembly میں مرتب ہیں اور مکمل طور پر براؤزر میں چلتے ہیں۔ کوئی سرور شامل نہیں ہے۔" + }, + "swiftWasm.link": { + "translation": " Swift آفیشل ویب سائٹ Swift پروگرامنگ زبان Y منٹ میں X سیکھیں، جہاں X=Swift لائیو کوڈز دستاویزات اسٹارٹر ٹیمپلیٹ لوڈ کریں " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "wacl کا استعمال کرتے ہوئے براؤزر میں چلنے والی Tcl۔" }, diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts index eae6ae722e..894a3292c1 100644 --- a/src/livecodes/i18n/locales/ur/language-info.ts +++ b/src/livecodes/i18n/locales/ur/language-info.ts @@ -457,6 +457,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte کی سرکاری ویب سائٹ <3> <4>Svelte دستاویزات <5> <6>شروعاتی سانچہ لوڈ کریں ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift کو خود Swift کمپائلر کے ذریعے WebAssembly میں مرتب کیا گیا ہے: <1>swift-frontend اور <2>wasm-ld, دونوں WebAssembly میں مرتب ہیں اور مکمل طور پر براؤزر میں چلتے ہیں۔ کوئی سرور شامل نہیں ہے۔', + link: '<1> <2>Swift آفیشل ویب سائٹ <3> <4>Swift پروگرامنگ زبان <5> <6>Y منٹ میں X سیکھیں، جہاں X=Swift <7> <8>لائیو کوڈز دستاویزات <9> <10>اسٹارٹر ٹیمپلیٹ لوڈ کریں ', + name: 'Swift (Wasm)', + }, tcl: { desc: '<1>wacl کا استعمال کرتے ہوئے براؤزر میں چلنے والی Tcl۔', link: '<1> <2>Tcl کی سرکاری ویب سائٹ <3> <4>wacl ریپو <5> <6>X کو Y منٹ میں سیکھیں، جہاں X=Tcl <7> <8>شروعاتی سانچہ لوڈ کریں ', diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json index fe6532506c..e3c100f646 100644 --- a/src/livecodes/i18n/locales/ur/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "سویلٹ شروعاتی" }, + "templates.starter.swift-wasm": { + "translation": "سوفٹ (واسم) شروعاتی" + }, "templates.starter.tailwindcss": { "translation": "ٹیل ونڈ سی ایس ایس شروعاتی" }, diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts index 1b9bd36c99..de0e09e88a 100644 --- a/src/livecodes/i18n/locales/ur/translation.ts +++ b/src/livecodes/i18n/locales/ur/translation.ts @@ -1048,6 +1048,7 @@ const translation: I18nTranslation = { sql: 'ایس کیو ایل شروعاتی', stencil: 'اسٹینسل شروعاتی', svelte: 'سویلٹ شروعاتی', + 'swift-wasm': 'سوفٹ (واسم) شروعاتی', tailwindcss: 'ٹیل ونڈ سی ایس ایس شروعاتی', tcl: 'ٹی سی ایل شروعاتی', teal: 'ٹیل شروعاتی', diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json index 4853c99f1d..21618b6c8f 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json @@ -804,6 +804,15 @@ "svelte.name": { "translation": "Svelte" }, + "swiftWasm.desc": { + "translation": "Swift 由 Swift 编译器自身编译为 WebAssembly:swift-frontend 和 wasm-ld 均编译为 WebAssembly,完全在浏览器中运行。不涉及任何服务器。" + }, + "swiftWasm.link": { + "translation": " Swift 官方网站 Swift 编程语言 《Y分钟学会X》,其中X=Swift LiveCodes 文档 加载入门模板 " + }, + "swiftWasm.name": { + "translation": "Swift (Wasm)" + }, "tcl.desc": { "translation": "使用 wacl 在浏览器中运行的 Tcl。" }, diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts index f18b92b47e..5673a2f181 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.ts +++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts @@ -448,6 +448,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Svelte 官方网站 <3> <4>Svelte 文档 <5> <6>加载启动模板 ', name: 'Svelte', }, + swiftWasm: { + desc: 'Swift 由 Swift 编译器自身编译为 WebAssembly:<1>swift-frontend 和 <2>wasm-ld 均编译为 WebAssembly,完全在浏览器中运行。不涉及任何服务器。', + link: '<1> <2>Swift 官方网站 <3> <4>Swift 编程语言 <5> <6>《Y分钟学会X》,其中X=Swift <7> <8>LiveCodes 文档 <9> <10>加载入门模板 ', + name: 'Swift (Wasm)', + }, tcl: { desc: '使用 <1>wacl 在浏览器中运行的 Tcl。', link: '<1> <2>Tcl 官方网站 <3> <4>wacl 仓库 <5> <6>在 Y 分钟内学习 X,其中 X=Tcl <7> <8>加载启动模板 ', diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json index 9202fc4e89..8baeaa45d1 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json @@ -2127,6 +2127,9 @@ "templates.starter.svelte": { "translation": "Svelte 启动模板" }, + "templates.starter.swift-wasm": { + "translation": "Swift(WASM)启动模板" + }, "templates.starter.tailwindcss": { "translation": "Tailwind CSS 启动模板" }, diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts index 74695d6680..c90e5e0ce6 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.ts +++ b/src/livecodes/i18n/locales/zh-CN/translation.ts @@ -1046,6 +1046,7 @@ const translation: I18nTranslation = { sql: 'SQL 启动模板', stencil: 'Stencil 启动模板', svelte: 'Svelte 启动模板', + 'swift-wasm': 'Swift(WASM)启动模板', tailwindcss: 'Tailwind CSS 启动模板', tcl: 'Tcl 启动模板', teal: 'Teal 启动模板', diff --git a/src/livecodes/languages/languages.ts b/src/livecodes/languages/languages.ts index f6ed3728d4..c065a0b354 100644 --- a/src/livecodes/languages/languages.ts +++ b/src/livecodes/languages/languages.ts @@ -79,6 +79,7 @@ import { stylis } from './stylis'; import { stylus } from './stylus'; import { sucrase } from './sucrase'; import { svelte, svelteApp } from './svelte'; +import { swiftWasm } from './swift-wasm'; import { tcl } from './tcl'; import { teal } from './teal'; import { twig } from './twig'; @@ -164,6 +165,7 @@ export const languages: LanguageSpecs[] = [ objcWasm, objcppWasm, rustWasm, + swiftWasm, zigWasm, java, csharpWasm, diff --git a/src/livecodes/languages/swift-wasm/index.ts b/src/livecodes/languages/swift-wasm/index.ts new file mode 100644 index 0000000000..fdc3d0e5ca --- /dev/null +++ b/src/livecodes/languages/swift-wasm/index.ts @@ -0,0 +1 @@ +export * from './lang-swift-wasm'; diff --git a/src/livecodes/languages/swift-wasm/lang-swift-wasm-script.ts b/src/livecodes/languages/swift-wasm/lang-swift-wasm-script.ts new file mode 100644 index 0000000000..5853ac39da --- /dev/null +++ b/src/livecodes/languages/swift-wasm/lang-swift-wasm-script.ts @@ -0,0 +1,209 @@ +import { swiftWasmBaseUrl } from '../../vendors'; + +interface SwiftDiagnostic { + file: string; + line: number; + column: number; + severity: string; + message: string; +} + +interface SwiftResult { + ok: boolean; + output: string; + error: string; + exitCode: number; + diagnostics: SwiftDiagnostic[]; +} + +interface SwiftRuntime { + warmUp: () => Promise; + run: (files: string, options?: { input?: string }) => Promise; + destroy: () => void; +} + +interface SwiftRunResult { + output: string | null; + error: string | null; + exitCode: number; +} + +declare const window: Window & { + SwiftWasm?: { + createRuntime: (options?: { baseUrl?: string }) => Promise; + }; + livecodes: { + swift?: { + ready?: boolean; + failed?: boolean; + init?: Promise | null; + runtime?: SwiftRuntime; + run?: (input?: string) => Promise; + loaded?: Promise; + input?: string; + output?: string | null; + error?: string | null; + exitCode?: number | null; + }; + }; +}; + +// The toolchain is ~70 MB on first use, so boot gets a generous budget; a single compile +// takes seconds, so anything far beyond that means the worker is stuck. +const BOOT_TIMEOUT_MS = 5 * 60_000; +const RUN_TIMEOUT_MS = 60_000; + +const formatDiagnostic = (diagnostic: SwiftDiagnostic) => + `${diagnostic.file}:${diagnostic.line}:${diagnostic.column}: ${diagnostic.severity}: ${diagnostic.message}`; + +const withTimeout = ( + promise: Promise, + ms: number, + message: string, + onTimeout?: () => void, +): Promise => + new Promise((resolve, reject) => { + const timer = setTimeout(() => { + onTimeout?.(); + reject(new Error(message)); + }, ms); + promise.then( + (value) => { + clearTimeout(timer); + resolve(value); + }, + (error) => { + clearTimeout(timer); + reject(error); + }, + ); + }); + +window.livecodes.swift ??= {}; + +const swift = window.livecodes.swift; +swift.ready = false; + +/** Start (once) loading the runtime and its toolchain. */ +const ensureLoaded = (): Promise => { + let init = swift.init; + if (!init) { + init = (async () => { + parent.postMessage({ type: 'loading', payload: true }, '*'); + try { + // Injected by the language's `scripts`; it installs `window.SwiftWasm`. + const createRuntime = window.SwiftWasm?.createRuntime; + if (!createRuntime) { + throw new Error('the swift-wasm runtime failed to load'); + } + const runtime = await createRuntime({ baseUrl: `${swiftWasmBaseUrl}toolchain/` }); + await runtime.warmUp(); + swift.runtime = runtime; + } finally { + parent.postMessage({ type: 'loading', payload: false }, '*'); + } + })().catch((err: Error) => { + // Reset so a later run can retry the download, and record the failure so + // `loaded` can reject instead of resolving into a broken environment. + swift.init = null; + swift.failed = true; + swift.error = err.message; + throw err; + }); + // The failure is surfaced through `run`; do not also report it unhandled. + init.catch(() => undefined); + swift.init = init; + } + return init; +}; + +const setResult = (output: string | null, error: string | null, exitCode: number) => { + swift.output = output; + swift.error = error; + swift.exitCode = exitCode; + swift.ready = true; + + if (error != null) { + // eslint-disable-next-line no-console + console.error(error); + } else if (output != null) { + // eslint-disable-next-line no-console + console.log(output); + } + return { output, error, exitCode }; +}; + +swift.run = async (input?: string) => { + let code = ''; + document.querySelectorAll('script[type="text/swift-wasm"]').forEach((script) => { + code += `${script.innerHTML}\n`; + }); + swift.input = input; + + if (!code.trim()) return setResult(null, null, 0); + + try { + await withTimeout( + ensureLoaded(), + BOOT_TIMEOUT_MS, + 'Timed out while loading the Swift toolchain.', + ); + } catch (err) { + return setResult(null, `Error: ${(err as Error).message}`, 1); + } + + try { + const result = await withTimeout( + swift.runtime!.run(code, { input: input ?? '' }), + RUN_TIMEOUT_MS, + 'Swift execution timed out.', + () => { + // The package has no per-run timeout and dispatches every run to a single + // worker, so a hung program (e.g. an infinite loop) leaves that worker busy. + // Tear it down so the next run starts from a fresh worker. + swift.runtime?.destroy(); + swift.runtime = undefined; + swift.init = null; + }, + ); + + const diagnostics = result.diagnostics.map(formatDiagnostic).join('\n'); + if (!result.ok) { + // Compiler diagnostics are the useful message; fall back to raw stderr. + return setResult( + result.output || null, + diagnostics || result.error.trim() || `Exited with code ${result.exitCode}`, + result.exitCode || 1, + ); + } + + if (diagnostics) { + // Warnings on a successful run are worth surfacing, but are not errors. + // eslint-disable-next-line no-console + console.warn(diagnostics); + } + return setResult(result.output, null, 0); + } catch (err) { + return setResult(null, `Error: ${(err as Error).message}`, 1); + } +}; + +ensureLoaded(); + +swift.loaded = new Promise((resolve, reject) => { + const interval = setInterval(() => { + if (swift.failed) { + clearInterval(interval); + reject(new Error(swift.error || 'Failed to initialize the Swift environment')); + } else if (swift.ready) { + clearInterval(interval); + resolve(); + } + }, 50); +}); + +window.addEventListener('load', async () => { + parent.postMessage({ type: 'loading', payload: true }, '*'); + await swift.run?.(swift.input); + parent.postMessage({ type: 'loading', payload: false }, '*'); +}); diff --git a/src/livecodes/languages/swift-wasm/lang-swift-wasm.ts b/src/livecodes/languages/swift-wasm/lang-swift-wasm.ts new file mode 100644 index 0000000000..dc42100d06 --- /dev/null +++ b/src/livecodes/languages/swift-wasm/lang-swift-wasm.ts @@ -0,0 +1,29 @@ +import { codemirrorLegacy } from '../../editor/codemirror/utils'; +import type { LanguageSpecs } from '../../models'; +import { codeMirrorBaseUrl, monacoLanguagesBaseUrl, swiftWasmBaseUrl } from '../../vendors'; + +export const swiftWasm: LanguageSpecs = { + name: 'swift-wasm', + title: 'Swift (Wasm)', + compiler: { + factory: () => async (code) => code, + scripts: ({ baseUrl }) => [ + swiftWasmBaseUrl + 'dist/swift-wasm.iife.js', + baseUrl + '{{hash:lang-swift-wasm-script.js}}', + ], + scriptType: 'text/swift-wasm', + compiledCodeLanguage: 'swift', + liveReload: true, + }, + extensions: ['swift', 'wasm.swift', 'swift-wasm'], + editor: 'script', + editorSupport: { + monaco: { languageSupport: monacoLanguagesBaseUrl + 'swift.js', language: 'swift' }, + codemirror: { + languageSupport: async () => + codemirrorLegacy((await import(codeMirrorBaseUrl + 'codemirror-lang-swift.js')).swift), + }, + codejar: { language: 'swift' }, + }, + largeDownload: true, +}; diff --git a/src/livecodes/models.ts b/src/livecodes/models.ts index 642f7268ee..97e897d66c 100644 --- a/src/livecodes/models.ts +++ b/src/livecodes/models.ts @@ -217,6 +217,7 @@ export interface Compiler { | 'text/haskell-wasm' | 'text/minizinc' | 'text/go-wasm' + | 'text/swift-wasm' | 'application/json' | 'application/lua' | 'text/fennel' @@ -263,6 +264,7 @@ export type TemplateAlias = | 'fs-wasm' | 'rust' | 'rs' + | 'swift' | 'hs' | 'hs-wasm' | 'pl' diff --git a/src/livecodes/templates/starter/index.ts b/src/livecodes/templates/starter/index.ts index b77261fade..fb6ac41bf8 100644 --- a/src/livecodes/templates/starter/index.ts +++ b/src/livecodes/templates/starter/index.ts @@ -69,6 +69,7 @@ import { solidStarter } from './solid-starter'; import { sqlStarter } from './sql-starter'; import { stencilStarter } from './stencil-starter'; import { svelteStarter } from './svelte-starter'; +import { swiftWasmStarter } from './swift-wasm-starter'; import { tailwindcssStarter } from './tailwindcss-starter'; import { tclStarter } from './tcl-starter'; import { tealStarter } from './teal-starter'; @@ -132,6 +133,7 @@ export const starterTemplates = [ cppWasmStarter, objcWasmStarter, rustWasmStarter, + swiftWasmStarter, zigWasmStarter, javaStarter, csharpWasmStarter, diff --git a/src/livecodes/templates/starter/swift-wasm-starter.ts b/src/livecodes/templates/starter/swift-wasm-starter.ts new file mode 100644 index 0000000000..f41e77fa60 --- /dev/null +++ b/src/livecodes/templates/starter/swift-wasm-starter.ts @@ -0,0 +1,98 @@ +import type { Template } from '../../models'; + +export const swiftWasmStarter: Template = { + name: 'swift-wasm', + aliases: ['swift'], + title: window.deps.translateString('templates.starter.swift-wasm', 'Swift (Wasm) Starter'), + thumbnail: 'assets/templates/swift.svg', + activeEditor: 'script', + markup: { + language: 'html', + content: ` +
    +

    Hello, World!

    + +

    You clicked 0 times.

    + +
    + + +`.trimStart(), + }, + style: { + language: 'css', + content: ` +.container, +.container button { + text-align: center; + font: 1em sans-serif; +} +.logo { + width: 150px; +} +`.trimStart(), + }, + script: { + language: 'swift-wasm', + content: ` +// The current count arrives on standard input, so every run is a fresh process +// that prints the next value. +let current = Int(readLine() ?? "") ?? 0 +print("Swift") +print(current + 1) + +struct Greeting { + let name: String + var message: String { "Hello, \\(name)!" } +} + +for name in ["World", "LiveCodes", "Swift"] { + print(Greeting(name: name).message) +} +`.trimStart(), + }, +}; diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts index 4da75840fb..ab2e3163d5 100644 --- a/src/livecodes/vendors.ts +++ b/src/livecodes/vendors.ts @@ -456,6 +456,8 @@ export const wasmRustcBaseUrl = /* @__PURE__ */ getUrl('@live-codes/wasm-rustc@0 export const snackbarUrl = /* @__PURE__ */ getUrl('@snackbar/core@1.7.0/dist/snackbar.css'); +export const swiftWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/swift-wasm@0.1.0/'); + export const spacingJsUrl = /* @__PURE__ */ getUrl('spacingjs@1.0.7/dist/bundle.js'); export const sqlFormatterUrl = /* @__PURE__ */ getUrl( diff --git a/src/sdk/models.ts b/src/sdk/models.ts index 53e04210ce..c67357382b 100644 --- a/src/sdk/models.ts +++ b/src/sdk/models.ts @@ -255,6 +255,8 @@ export type Language = | 'edn' | 'gleam' | 'swift' + | 'swift-wasm' + | 'wasm.swift' | 'rust' | 'zig' | 'zig-wasm' @@ -452,6 +454,7 @@ export type TemplateName = | 'fsharp' | 'fsharp-wasm' | 'rust-wasm' + | 'swift-wasm' | 'zig-wasm' | 'perl' | 'lua' diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts index 63a5de4c1a..da0d6f4de4 100644 --- a/storybook/_stories/EmbedOptions/template.ts +++ b/storybook/_stories/EmbedOptions/template.ts @@ -52,6 +52,7 @@ const storyDef: StoryDef = { CppWasm: { props: { template: 'cpp-wasm' } }, ObjcWasm: { props: { template: 'objc-wasm' } }, RustWasm: { props: { template: 'rust-wasm' } }, + SwiftWasm: { props: { template: 'swift-wasm' } }, ZigWasm: { props: { template: 'zig-wasm' } }, Java: { props: { template: 'java' } }, CSharpWasm: { props: { template: 'csharp-wasm' } }, diff --git a/storybook/preact/stories/EmbedOptions/template.stories.ts b/storybook/preact/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/preact/stories/EmbedOptions/template.stories.ts +++ b/storybook/preact/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/storybook/react/stories/EmbedOptions/template.stories.ts b/storybook/react/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/react/stories/EmbedOptions/template.stories.ts +++ b/storybook/react/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/storybook/solid/src/solid.ts b/storybook/solid/src/solid.ts index 8319c10a3e..60804254ee 100644 --- a/storybook/solid/src/solid.ts +++ b/storybook/solid/src/solid.ts @@ -8,9 +8,10 @@ */ import { createComponent } from '@live-codes/solid-sdk'; -import type { EmbedOptions, Playground } from 'livecodes'; -import { createPlayground } from 'livecodes'; import type { Component, JSX } from 'solid-js'; +import { createPlayground } from 'livecodes'; + +import type { EmbedOptions, Playground } from 'livecodes'; export type { Code, Config, EmbedOptions, Language, Playground } from 'livecodes'; /** diff --git a/storybook/solid/stories/EmbedOptions/template.stories.ts b/storybook/solid/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/solid/stories/EmbedOptions/template.stories.ts +++ b/storybook/solid/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/storybook/svelte/stories/EmbedOptions/template.stories.ts b/storybook/svelte/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/svelte/stories/EmbedOptions/template.stories.ts +++ b/storybook/svelte/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/storybook/vue/stories/EmbedOptions/template.stories.ts b/storybook/vue/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/vue/stories/EmbedOptions/template.stories.ts +++ b/storybook/vue/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/storybook/web-components/stories/EmbedOptions/template.stories.ts b/storybook/web-components/stories/EmbedOptions/template.stories.ts index 4a912db246..48c6b69067 100644 --- a/storybook/web-components/stories/EmbedOptions/template.stories.ts +++ b/storybook/web-components/stories/EmbedOptions/template.stories.ts @@ -66,6 +66,7 @@ export const CWasm = livecodesStory({ template: 'c-wasm' }); export const CppWasm = livecodesStory({ template: 'cpp-wasm' }); export const ObjcWasm = livecodesStory({ template: 'objc-wasm' }); export const RustWasm = livecodesStory({ template: 'rust-wasm' }); +export const SwiftWasm = livecodesStory({ template: 'swift-wasm' }); export const ZigWasm = livecodesStory({ template: 'zig-wasm' }); export const Java = livecodesStory({ template: 'java' }); export const CSharpWasm = livecodesStory({ template: 'csharp-wasm' }); diff --git a/vendor-licenses.md b/vendor-licenses.md index 3ff02207b3..9f69e8528a 100644 --- a/vendor-licenses.md +++ b/vendor-licenses.md @@ -284,6 +284,8 @@ Sucrase: [MIT License](https://github.com/alangpierce/sucrase/blob/7284b3733aa11 Svelte: [MIT License](https://github.com/sveltejs/svelte/blob/dafbdc286eef3de2243088a9a826e6899e20465c/LICENSE) +Swift: [Apache License 2.0 with Runtime Library Exception](https://github.com/swiftlang/swift/blob/main/LICENSE.txt) (the Swift compiler frontend, the linker and the standard library, built to run on WebAssembly by [swift-toolchain-wasm](https://github.com/tothambrus11/swift-toolchain-wasm): [Apache License 2.0](https://github.com/tothambrus11/swift-toolchain-wasm/blob/main/LICENSE)) + SVG Logos: [CC0-1.0 License](https://github.com/gilbarbara/logos/blob/e0babf54f7ac9127942111bf177f549b709a60be/LICENSE.txt) svgbob-wasm: [Apache License 2.0](https://github.com/agoose77/svgbob-wasm/blob/45e280096ee7f7a07981de2ce95aba343bc94123/LICENSE_APACHE)