diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md index 946dc5dcff..f1c2ac52e4 100644 --- a/.agents/skills/livecodes/language-support/references/languages.md +++ b/.agents/skills/livecodes/language-support/references/languages.md @@ -163,6 +163,7 @@ Enabled via `processors` config: | ---------- | ------------------------------------------------------------ | ------------------- | | SQL | `sql`, `sqlite`, `sqlite3` | SQLite in browser | | PostgreSQL | `pg.sql`, `pgsql.sql`, `pgsql`, `pg`, `pglite`, `postgresql` | PGLite | +| DuckDB | `duckdb`, `duckdb.sql` | DuckDB-Wasm | | Prolog | `prolog.pl`, `prolog` | Prolog logic | | MiniZinc | `minizinc`, `mzn`, `dzn` | Constraint modeling | | JSON | `json` | JSON data | diff --git a/README.md b/README.md index 8cc089befb..ad23bf4e4e 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-122-blue)](https://livecodes.io/docs/languages/) +[![LiveCodes: languages](https://img.shields.io/badge/languages-123-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/duckdb.mdx b/docs/docs/languages/duckdb.mdx new file mode 100644 index 0000000000..f26e453881 --- /dev/null +++ b/docs/docs/languages/duckdb.mdx @@ -0,0 +1,154 @@ +# DuckDB + +[DuckDB](https://duckdb.org/) is an in-process SQL OLAP (analytical) database management system. LiveCodes runs DuckDB in the browser using [DuckDB-Wasm](https://github.com/duckdb/duckdb-wasm) (DuckDB packaged as [Wasm](https://webassembly.org/)). + +:::info Note + +Please note that LiveCodes also supports [SQL using SQLite](./sql.mdx) and [PostgreSQL](./postgresql.mdx). + +::: + +## Usage + +The SQL code runs (in the browser) and the output is produced as a JSON object. This JSON object is added to the [result page](../features/result.mdx) in a `script` block with type `application/json`. + +[Helper methods](#helper-methods) are provided for easy access/rendering of the JSON object (see below). + +### Helper Methods + +The JavaScript object `livecodes.sql` is globally available in the [result page](../features/result.mdx). This can be used in `script` blocks in the [markup editor](../features/projects.mdx) (page HTML - see HTML editor is [example usage](#example-usage)). It provides the following methods for easy access/rendering of the JSON object: + +- `livecodes.sql.getResult` + + Type: `() => Promise<{ data: Array<{ columns: string[]; values: unknown[][]; }>}>`: + + Returns a promise that resolves to the JSON object. The object has a single property `data` which is an array of objects, each representing the output of a query (e.g. `SELECT * FROM table`). Each object has two properties `columns` (an array of column names) and `values` (an array of arrays of values). + + In case of errors, the promise rejects with the error message. + + Example: + + ```html title="HTML" + + ``` + +- `livecodes.sql.getResultAsObjects` + + Type: `() => Promise<{ [key: string]: unknown; }[][]>`: + + Returns a promise that resolves to the data as an array (representing queries/tables) of arrays (representing rows) of objects. Each object has key/value pairs for the column names and their values. + + In case of errors, the promise rejects with the error message. + + Example: + + ```html title="HTML" + + ``` + +- `livecodes.sql.render: (element?: HTMLElement | string) => Promise`: + + Accepts a single parameter which can be a DOM element or a CSS selector and renders the JSON object as HTML `table`(s) in that element. If no element is specified, it renders the table(s) in `document.body`. + + Example: + + ```html title="HTML" +
+ + ``` + +:::info Note + +Helper methods for DuckDB are identical to those for [SQL using SQLite](./sql.mdx) and [PostgreSQL](./postgresql.mdx). So the same code can be used for all engines. + +::: + +### Limitations + +Currently parameters are not supported. + +### Example Usage + +import LiveCodes from '../../src/components/LiveCodes.tsx'; + + + +### Custom Settings + +[Custom settings](../advanced/custom-settings.mdx) added to the property `duckdb` are used during running the SQL code. It is a JSON object with the following properties: + +- `scriptURLs`: An array of URLs to SQL scripts that should be loaded before running the SQL code. + +Please note that custom settings should be valid JSON (i.e. functions are not allowed). + +**Example:** + +```json title="Custom Settings" +{ + "duckdb": { + "scriptURLs": ["https://myserver.com/sql.sql"] + } +} +``` + +## Language Info + +### Name + +`duckdb` + +### Aliases/Extensions + +`duckdb.sql`, `duckdb` + +### Editor + +`script` + +## Compiler + +[DuckDB-Wasm](https://github.com/duckdb/duckdb-wasm) + +### Version + +`@duckdb/duckdb-wasm`: v1.32.0 + +## Code Formatting + +using [`sql-formatter`](https://github.com/sql-formatter-org/sql-formatter) + +## Starter Template + +https://livecodes.io/?template=duckdb + +## Links + +- [DuckDB official website](https://duckdb.org/) +- [DuckDB documentation](https://duckdb.org/docs/) +- [DuckDB-Wasm GitHub repo](https://github.com/duckdb/duckdb-wasm) +- [SQL in LiveCodes](./sql.mdx) (using SQLite) +- [PostgreSQL in LiveCodes](./postgresql.mdx) diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx index 6472765b1b..f9d6ce81aa 100644 --- a/docs/src/components/LanguageSliders.tsx +++ b/docs/src/components/LanguageSliders.tsx @@ -133,6 +133,7 @@ export default function Sliders() { { name: 'assembly-wasm', title: 'Assembly (Wasm)' }, { name: 'sql', title: 'SQL' }, { name: 'postgresql', title: 'PostgreSQL' }, + { name: 'duckdb', title: 'DuckDB' }, { name: 'prolog', title: 'Prolog' }, { name: 'minizinc', title: 'MiniZinc' }, { name: 'blockly', title: 'Blockly' }, diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx index 94b4d94222..4ae8323165 100644 --- a/docs/src/components/TemplateList.tsx +++ b/docs/src/components/TemplateList.tsx @@ -90,6 +90,7 @@ const templates = [ { name: 'assembly-wasm', title: 'Assembly (Wasm) Starter', thumbnail: 'assembly.svg' }, { name: 'sql', title: 'SQL Starter', thumbnail: 'sqlite.svg' }, { name: 'postgresql', title: 'PostgreSQL Starter', thumbnail: 'postgresql.svg' }, + { name: 'duckdb', title: 'DuckDB Starter', thumbnail: 'duckdb.svg' }, { name: 'prolog', title: 'Prolog Starter', thumbnail: 'tau-prolog.svg' }, { name: 'minizinc', title: 'MiniZinc Starter', thumbnail: 'minizinc.png' }, { name: 'blockly', title: 'Blockly Starter', thumbnail: 'blockly.svg' }, diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts index 8cb8f858df..9196f4eeef 100644 --- a/e2e/specs/starter.spec.ts +++ b/e2e/specs/starter.spec.ts @@ -1804,6 +1804,18 @@ test.describe('Starter Templates from URL', () => { expect(resultText).toContain('Whatever you do, do it well. – Walt Disney'); }); + test('DuckDB Starter (in URL)', async ({ page, getTestUrl }) => { + await page.goto(getTestUrl({ template: 'duckdb' })); + + const { app, getResult, waitForResultUpdate } = await getLoadedApp(page); + + await waitForEditorFocus(app); + await waitForResultUpdate(); + + const resultText = await getResult().innerText('table'); + expect(resultText).toContain('Whatever you do, do it well. – Walt Disney'); + }); + test('Prolog Starter (in URL)', async ({ page, getTestUrl }) => { await page.goto(getTestUrl({ template: 'prolog' })); diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js index 68db74cb56..a9b989323d 100644 --- a/functions/vendors/templates.js +++ b/functions/vendors/templates.js @@ -89,6 +89,7 @@ export const starterTemplates = { "assembly-wasm": "Assembly (Wasm) Starter", "sql": "SQL Starter", "postgresql": "PostgreSQL Starter", + "duckdb": "DuckDB Starter", "prolog": "Prolog Starter", "minizinc": "MiniZinc Starter", "blockly": "Blockly Starter", diff --git a/scripts/build.js b/scripts/build.js index 002a31443e..9436141539 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -201,6 +201,7 @@ const esmBuild = () => 'UI/code-to-image.ts', 'languages/diagrams/lang-diagrams-compiler-esm.ts', 'languages/postgresql/lang-postgresql-compiler-esm.ts', + 'languages/duckdb/lang-duckdb-compiler-esm.ts', 'languages/r/lang-r-script-esm.ts', 'languages/rescript/lang-rescript-compiler-esm.ts', 'i18n/i18n.ts', diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json index 9e641ac7bb..6c14769131 100644 --- a/server/php/inc/starter-templates.json +++ b/server/php/inc/starter-templates.json @@ -89,6 +89,7 @@ "assembly-wasm": "Assembly (Wasm) Starter", "sql": "SQL Starter", "postgresql": "PostgreSQL Starter", + "duckdb": "DuckDB Starter", "prolog": "Prolog Starter", "minizinc": "MiniZinc Starter", "blockly": "Blockly Starter", diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts index 86a3085723..45689e5e35 100644 --- a/src/livecodes/UI/command-menu-actions.ts +++ b/src/livecodes/UI/command-menu-actions.ts @@ -345,6 +345,7 @@ export const getCommandMenuActions = ({ 'assembly-wasm', 'sql', 'postgresql', + 'duckdb', 'prolog', 'minizinc', 'blockly', diff --git a/src/livecodes/assets/templates/duckdb.svg b/src/livecodes/assets/templates/duckdb.svg new file mode 100644 index 0000000000..200339e2e3 --- /dev/null +++ b/src/livecodes/assets/templates/duckdb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/livecodes/compiler/compile.page.ts b/src/livecodes/compiler/compile.page.ts index fcc3a20b94..85d1792872 100644 --- a/src/livecodes/compiler/compile.page.ts +++ b/src/livecodes/compiler/compile.page.ts @@ -1,4 +1,5 @@ import { runOutsideWorker as diagrams } from '../languages/diagrams'; +import { runOutsideWorker as duckdb } from '../languages/duckdb'; import { runOutsideWorker as mdx } from '../languages/mdx'; import { runOutsideWorker as postgresql } from '../languages/postgresql'; import { runOutsideWorker as rescript } from '../languages/rescript'; @@ -10,4 +11,5 @@ import { runOutsideWorker as rescript } from '../languages/rescript'; mdx, diagrams, postgresql, + duckdb, }; diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html index efb17b37a5..f3ace733f1 100644 --- a/src/livecodes/html/language-info.html +++ b/src/livecodes/html/language-info.html @@ -1984,6 +1984,33 @@

PHP (Wasm)

+
+

DuckDB

+
DuckDB packaged as WASM using DuckDB-Wasm
+ +

PostgreSQL

PostgreSQL packaged as WASM using PGlite
diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json index 7b53395af3..66999f5637 100644 --- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "يتم تجميع Ada وتشغيله بالكامل داخل المتصفح بواسطة <1>HAC، وهو مُترجم Ada مكتوب بلغة Ada ومُجمَّع إلى WebAssembly. لا يتضمن ذلك أي خادم." + "translation": "يتم تجميع Ada وتشغيله بالكامل داخل المتصفح بواسطة HAC، وهو مُترجم Ada مكتوب بلغة Ada ومُجمَّع إلى WebAssembly. لا يتضمن ذلك أي خادم." }, "adaWasm.link": { "translation": " مركز معلومات Ada برمجة Ada (ويكيبوكس) مستودع HAC وثائق LiveCodes تحميل قالب البداية " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB معبأة كـ WASM باستخدام DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " الموقع الرسمي لـ DuckDB وثائق DuckDB مستودع GitHub لـ DuckDB-Wasm تعلم X في Y دقائق، حيث X=SQL تحميل القالب الأولي " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "قوالب JavaScript المضمنة." }, diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts index 089aed078f..ba790a63dc 100644 --- a/src/livecodes/i18n/locales/ar/language-info.ts +++ b/src/livecodes/i18n/locales/ar/language-info.ts @@ -377,6 +377,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>الموقع الرسمي لـ PostgreSQL <3> <4>وثائق PostgreSQL <5> <6>مستودع GitHub لـ PGlite <7> <8>تعلم X في Y دقائق، حيث X=SQL <9> <10>تحميل القالب الأولي ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB معبأة كـ WASM باستخدام DuckDB-Wasm', + link: '<1> <2>الموقع الرسمي لـ DuckDB <3> <4>وثائق DuckDB <5> <6>مستودع GitHub لـ DuckDB-Wasm <7> <8>تعلم X في Y دقائق، حيث X=SQL <9> <10>تحميل القالب الأولي ', + name: 'DuckDB', + }, prolog: { desc: 'مترجم Prolog مفتوح المصدر في JavaScript.', link: '<1> <2>الموقع الرسمي لـ Tau Prolog <3> <4>وثائق Tau Prolog <5> <6>SWI-Prolog <7> <8>تعلم X في Y دقائق، حيث X=Prolog <9> <10>تحميل القالب الأولي ', diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json index f47897ccc8..9c6151e3c1 100644 --- a/src/livecodes/i18n/locales/ar/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "قالب الرسوم البيانية" }, + "templates.starter.duckdb": { + "translation": "قالب DuckDB" + }, "templates.starter.elm": { "translation": "قالب Elm" }, diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts index 01a973a0eb..310eaed198 100644 --- a/src/livecodes/i18n/locales/ar/translation.ts +++ b/src/livecodes/i18n/locales/ar/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'قالب PHP', 'php-wasm': 'قالب PHP (Wasm)', postgresql: 'قالب PostgreSQL', + duckdb: 'قالب DuckDB', preact: 'قالب Preact', prolog: 'قالب Prolog', python: 'قالب Python', diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json index 7bb6a044d9..1d41fda745 100644 --- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada সম্পূর্ণরূপে ব্রাউজারে <1>HAC দ্বারা কম্পাইল ও চালিত হয়, যা Ada-তে লেখা এবং WebAssembly-তে কম্পাইল করা একটি Ada কম্পাইলার। কোনো সার্ভার জড়িত নয়।" + "translation": "Ada সম্পূর্ণরূপে ব্রাউজারে HAC দ্বারা কম্পাইল ও চালিত হয়, যা Ada-তে লেখা এবং WebAssembly-তে কম্পাইল করা একটি Ada কম্পাইলার। কোনো সার্ভার জড়িত নয়।" }, "adaWasm.link": { "translation": " Ada তথ্য কেন্দ্র Ada প্রোগ্রামিং (উইকিবই) HAC রিপো LiveCodes ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB-Wasm ব্যবহার করে WASM হিসাবে প্যাকেজ করা DuckDB" + }, + "duckdb.link": { + "translation": " DuckDB অফিসিয়াল ওয়েবসাইট DuckDB ডকুমেন্টেশন DuckDB-Wasm GitHub রেপো Y মিনিটে X শিখুন, যেখানে X=SQL স্টার্টার টেমপ্লেট লোড করুন " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "এম্বেডেড JavaScript টেমপ্লেটিং।" }, diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts index f0ae315391..5584ffced1 100644 --- a/src/livecodes/i18n/locales/bn/language-info.ts +++ b/src/livecodes/i18n/locales/bn/language-info.ts @@ -379,6 +379,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL অফিসিয়াল ওয়েবসাইট <3> <4>PostgreSQL ডকুমেন্টেশন <5> <6>PGlite GitHub রেপো <7> <8>Y মিনিটে X শিখুন, যেখানে X=SQL <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB-Wasm ব্যবহার করে WASM হিসাবে প্যাকেজ করা DuckDB', + link: '<1> <2>DuckDB অফিসিয়াল ওয়েবসাইট <3> <4>DuckDB ডকুমেন্টেশন <5> <6>DuckDB-Wasm GitHub রেপো <7> <8>Y মিনিটে X শিখুন, যেখানে X=SQL <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', + name: 'DuckDB', + }, prolog: { desc: 'JavaScript-এ একটি ওপেন সোর্স Prolog ইন্টারপ্রেটার।', link: '<1> <2>Tau Prolog অফিসিয়াল ওয়েবসাইট <3> <4>Tau Prolog ডকুমেন্টেশন <5> <6>SWI-Prolog <7> <8>Y মিনিটে X শিখুন, যেখানে X=Prolog <9> <10>স্টার্টার টেমপ্লেট লোড করুন ', diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json index 399c428725..0eb6f4228f 100644 --- a/src/livecodes/i18n/locales/bn/translation.lokalise.json +++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Diagrams স্টার্টার" }, + "templates.starter.duckdb": { + "translation": "DuckDB স্টার্টার" + }, "templates.starter.elm": { "translation": "Elm স্টার্টার" }, diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts index ea98bf61e1..12d0ac84aa 100644 --- a/src/livecodes/i18n/locales/bn/translation.ts +++ b/src/livecodes/i18n/locales/bn/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'PHP স্টার্টার', 'php-wasm': 'PHP (Wasm) স্টার্টার', postgresql: 'PostgreSQL স্টার্টার', + duckdb: 'DuckDB স্টার্টার', preact: 'Preact স্টার্টার', prolog: 'Prolog স্টার্টার', python: 'Python স্টার্টার', diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json index f4ecb05372..b2f38934bd 100644 --- a/src/livecodes/i18n/locales/de/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada wird vollständig im Browser von <1>HAC kompiliert und ausgeführt, einem in Ada geschriebenen und zu WebAssembly kompilierten Ada-Compiler. Es ist kein Server beteiligt." + "translation": "Ada wird vollständig im Browser von HAC kompiliert und ausgeführt, einem in Ada geschriebenen und zu WebAssembly kompilierten Ada-Compiler. Es ist kein Server beteiligt." }, "adaWasm.link": { "translation": " Ada-Informationsstelle Ada-Programmierung (Wikibooks) HAC Repository LiveCodes-Dokumentation Starter-Vorlage laden " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB als WASM verpackt mit DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " DuckDB offizielle Website DuckDB Dokumentation DuckDB-Wasm GitHub Repository Lerne X in Y Minuten, wobei X=SQL Starter-Vorlage laden " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Eingebettetes JavaScript-Templating." }, diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts index 758e63a9f0..2fd50e8499 100644 --- a/src/livecodes/i18n/locales/de/language-info.ts +++ b/src/livecodes/i18n/locales/de/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL offizielle Website <3> <4>PostgreSQL Dokumentation <5> <6>PGlite GitHub Repository <7> <8>Lerne X in Y Minuten, wobei X=SQL <9> <10>Starter-Vorlage laden ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB als WASM verpackt mit DuckDB-Wasm', + link: '<1> <2>DuckDB offizielle Website <3> <4>DuckDB Dokumentation <5> <6>DuckDB-Wasm GitHub Repository <7> <8>Lerne X in Y Minuten, wobei X=SQL <9> <10>Starter-Vorlage laden ', + name: 'DuckDB', + }, prolog: { desc: 'Ein Open-Source-Prolog-Interpreter in JavaScript.', link: '<1> <2>Tau Prolog offizielle Website <3> <4>Tau Prolog Dokumentation <5> <6>SWI-Prolog <7> <8>Lerne X in Y Minuten, wobei X=Prolog <9> <10>Starter-Vorlage laden ', diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json index 002b693965..ff2f1db7e4 100644 --- a/src/livecodes/i18n/locales/de/translation.lokalise.json +++ b/src/livecodes/i18n/locales/de/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Diagramm-Starter" }, + "templates.starter.duckdb": { + "translation": "DuckDB-Starter" + }, "templates.starter.elm": { "translation": "Elm-Starter" }, diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts index 3fe84fc633..06096e119e 100644 --- a/src/livecodes/i18n/locales/de/translation.ts +++ b/src/livecodes/i18n/locales/de/translation.ts @@ -1045,6 +1045,7 @@ const translation: I18nTranslation = { php: 'PHP-Starter', 'php-wasm': 'PHP (Wasm)-Starter', postgresql: 'PostgreSQL-Starter', + duckdb: 'DuckDB-Starter', preact: 'Preact-Starter', prolog: 'Prolog-Starter', python: 'Python-Starter', diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json index 68bdba1594..bc97a3e294 100644 --- a/src/livecodes/i18n/locales/en/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json @@ -324,6 +324,18 @@ "notes": "", "translation": "doT.js" }, + "duckdb.desc": { + "notes": "", + "translation": "DuckDB packaged as WASM using DuckDB-Wasm" + }, + "duckdb.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": " DuckDB official website DuckDB documentation DuckDB-Wasm GitHub repo Learn X in Y minutes, where X=SQL Load starter template " + }, + "duckdb.name": { + "notes": "", + "translation": "DuckDB" + }, "ejs.desc": { "notes": "", "translation": "Embedded JavaScript templating." diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts index 264ee13892..00c565f32e 100644 --- a/src/livecodes/i18n/locales/en/language-info.ts +++ b/src/livecodes/i18n/locales/en/language-info.ts @@ -147,6 +147,11 @@ const languageInfo = { link: '<1> <2>Official website <3> <4>LiveCodes Documentations ', name: 'doT.js', }, + duckdb: { + desc: 'DuckDB packaged as WASM using DuckDB-Wasm', + link: '<1> <2>DuckDB official website <3> <4>DuckDB documentation <5> <6>DuckDB-Wasm GitHub repo <7> <8>Learn X in Y minutes, where X=SQL <9> <10>Load starter template ', + name: 'DuckDB', + }, ejs: { desc: 'Embedded JavaScript templating.', link: '<1><2>Official website <3> <4>LiveCodes Documentations ', diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json index d708490d5c..0b576592fc 100644 --- a/src/livecodes/i18n/locales/en/translation.lokalise.json +++ b/src/livecodes/i18n/locales/en/translation.lokalise.json @@ -2652,6 +2652,10 @@ "notes": "", "translation": "Diagrams Starter" }, + "templates.starter.duckdb": { + "notes": "", + "translation": "DuckDB Starter" + }, "templates.starter.elm": { "notes": "", "translation": "Elm Starter" diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts index 3b50c8ef81..d5d471fa69 100644 --- a/src/livecodes/i18n/locales/en/translation.ts +++ b/src/livecodes/i18n/locales/en/translation.ts @@ -1009,6 +1009,7 @@ const translation = { daisyui: 'daisyUI Starter', dart: 'Dart Starter', diagrams: 'Diagrams Starter', + duckdb: 'DuckDB Starter', elm: 'Elm Starter', fanak: 'Fanak Starter', fennel: 'Fennel Starter', diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json index 0a024157b2..3e8ab5a1f2 100644 --- a/src/livecodes/i18n/locales/es/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada se compila y ejecuta íntegramente en el navegador mediante <1>HAC, un compilador de Ada escrito en Ada y compilado a WebAssembly. No hay ningún servidor involucrado." + "translation": "Ada se compila y ejecuta íntegramente en el navegador mediante HAC, un compilador de Ada escrito en Ada y compilado a WebAssembly. No hay ningún servidor involucrado." }, "adaWasm.link": { "translation": " Centro de Información de Ada Programación en Ada (Wikibooks) Repositorio de HAC Documentación de LiveCodes Cargar plantilla de inicio " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB empaquetado como WASM usando DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Sitio web oficial de DuckDB Documentación de DuckDB Repositorio GitHub de DuckDB-Wasm Aprende X en Y minutos, donde X=SQL Cargar plantilla inicial " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Plantillas de JavaScript integradas." }, diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts index 7a472980ef..0d08961637 100644 --- a/src/livecodes/i18n/locales/es/language-info.ts +++ b/src/livecodes/i18n/locales/es/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Sitio web oficial de PostgreSQL <3> <4>Documentación de PostgreSQL <5> <6>Repositorio GitHub de PGlite <7> <8>Aprende X en Y minutos, donde X=SQL <9> <10>Cargar plantilla inicial ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB empaquetado como WASM usando DuckDB-Wasm', + link: '<1> <2>Sitio web oficial de DuckDB <3> <4>Documentación de DuckDB <5> <6>Repositorio GitHub de DuckDB-Wasm <7> <8>Aprende X en Y minutos, donde X=SQL <9> <10>Cargar plantilla inicial ', + name: 'DuckDB', + }, prolog: { desc: 'Un intérprete de Prolog de código abierto en JavaScript.', link: '<1> <2>Sitio web oficial de Tau Prolog <3> <4>Documentación de Tau Prolog <5> <6>SWI-Prolog <7> <8>Aprende X en Y minutos, donde X=Prolog <9> <10>Cargar plantilla inicial ', diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json index 7bd6c2b288..f891de46a9 100644 --- a/src/livecodes/i18n/locales/es/translation.lokalise.json +++ b/src/livecodes/i18n/locales/es/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Inicio Diagramas" }, + "templates.starter.duckdb": { + "translation": "Inicio DuckDB" + }, "templates.starter.elm": { "translation": "Inicio Elm" }, diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts index 8cc9413d3e..5d28d699e6 100644 --- a/src/livecodes/i18n/locales/es/translation.ts +++ b/src/livecodes/i18n/locales/es/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'Inicio PHP', 'php-wasm': 'Inicio PHP (Wasm)', postgresql: 'Inicio PostgreSQL', + duckdb: 'Inicio DuckDB', preact: 'Inicio Preact', prolog: 'Inicio Prolog', python: 'Inicio Python', diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json index c92e3324bc..2f8987b4fa 100644 --- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada به‌طور کامل در مرورگر توسط <1>HAC کامپایل و اجرا می‌شود، که یک کامپایلر Ada نوشته‌شده به زبان Ada و کامپایل‌شده به WebAssembly است. هیچ سروری درگیر نیست." + "translation": "Ada به‌طور کامل در مرورگر توسط HAC کامپایل و اجرا می‌شود، که یک کامپایلر Ada نوشته‌شده به زبان Ada و کامپایل‌شده به WebAssembly است. هیچ سروری درگیر نیست." }, "adaWasm.link": { "translation": " مرکز اطلاعات Ada برنامه‌نویسی Ada (ویکی‌کتاب) مخزن HAC مستندات LiveCodes بارگذاری قالب شروع " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB بسته‌بندی شده به صورت WASM با استفاده از DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " وب‌سایت رسمی DuckDB مستندات DuckDB مخزن GitHub DuckDB-Wasm یادگیری X در Y دقیقه، جایی که X=SQL بارگذاری قالب شروع کننده " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "قالب‌سازی جاواسکریپت تعبیه شده." }, diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts index cdfbb48afc..89b0a7e546 100644 --- a/src/livecodes/i18n/locales/fa/language-info.ts +++ b/src/livecodes/i18n/locales/fa/language-info.ts @@ -380,6 +380,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>وب‌سایت رسمی PostgreSQL <3> <4>مستندات PostgreSQL <5> <6>مخزن GitHub PGlite <7> <8>یادگیری X در Y دقیقه، جایی که X=SQL <9> <10>بارگذاری قالب شروع کننده ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB بسته‌بندی شده به صورت WASM با استفاده از DuckDB-Wasm', + link: '<1> <2>وب‌سایت رسمی DuckDB <3> <4>مستندات DuckDB <5> <6>مخزن GitHub DuckDB-Wasm <7> <8>یادگیری X در Y دقیقه، جایی که X=SQL <9> <10>بارگذاری قالب شروع کننده ', + name: 'DuckDB', + }, prolog: { desc: 'یک مفسر پرولوگ متن‌باز در JavaScript.', link: '<1> <2>وب‌سایت رسمی Tau Prolog <3> <4>مستندات Tau Prolog <5> <6>SWI-Prolog <7> <8>یادگیری X در Y دقیقه، جایی که X=Prolog <9> <10>بارگذاری قالب شروع کننده ', diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json index 80eb9246dd..d428fe0928 100644 --- a/src/livecodes/i18n/locales/fa/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "شروع کننده نمودارها" }, + "templates.starter.duckdb": { + "translation": "شروع کننده DuckDB" + }, "templates.starter.elm": { "translation": "شروع کننده Elm" }, diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts index ae20c53f26..1d2f6d1d67 100644 --- a/src/livecodes/i18n/locales/fa/translation.ts +++ b/src/livecodes/i18n/locales/fa/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'شروع کننده PHP', 'php-wasm': 'شروع کننده PHP (Wasm)', postgresql: 'شروع کننده PostgreSQL', + duckdb: 'شروع کننده DuckDB', preact: 'شروع کننده Preact', prolog: 'شروع کننده Prolog', python: 'شروع کننده پایتون', diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json index 2a281d85cf..8aa0cbdde7 100644 --- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada est compilé et exécuté entièrement dans le navigateur par <1>HAC, un compilateur Ada écrit en Ada et compilé en WebAssembly. Aucun serveur n'est impliqué." + "translation": "Ada est compilé et exécuté entièrement dans le navigateur par HAC, un compilateur Ada écrit en Ada et compilé en WebAssembly. Aucun serveur n'est impliqué." }, "adaWasm.link": { "translation": " Centre d'information Ada Programmation Ada (Wikibooks) Dépôt HAC Documentation LiveCodes Charger un modèle de démarrage " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB packagé en WASM en utilisant DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Site officiel de DuckDB Documentation DuckDB Dépôt GitHub DuckDB-Wasm Apprenez X en Y minutes, où X=SQL Charger le modèle de démarrage " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Modèles JavaScript embarqués." }, diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts index 15db23c4f8..9947601f43 100644 --- a/src/livecodes/i18n/locales/fr/language-info.ts +++ b/src/livecodes/i18n/locales/fr/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Site officiel de PostgreSQL <3> <4>Documentation PostgreSQL <5> <6>Dépôt GitHub PGlite <7> <8>Apprenez X en Y minutes, où X=SQL <9> <10>Charger le modèle de démarrage ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB packagé en WASM en utilisant DuckDB-Wasm', + link: '<1> <2>Site officiel de DuckDB <3> <4>Documentation DuckDB <5> <6>Dépôt GitHub DuckDB-Wasm <7> <8>Apprenez X en Y minutes, où X=SQL <9> <10>Charger le modèle de démarrage ', + name: 'DuckDB', + }, prolog: { desc: 'Un interpréteur Prolog open source en JavaScript.', link: '<1> <2>Site officiel de Tau Prolog <3> <4>Documentation Tau Prolog <5> <6>SWI-Prolog <7> <8>Apprenez X en Y minutes, où X=Prolog <9> <10>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 98ca53b2b3..7a5274215b 100644 --- a/src/livecodes/i18n/locales/fr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Démarrage Diagrammes" }, + "templates.starter.duckdb": { + "translation": "Démarrage DuckDB" + }, "templates.starter.elm": { "translation": "Démarrage Elm" }, diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts index 8d39a69a50..abf00fb010 100644 --- a/src/livecodes/i18n/locales/fr/translation.ts +++ b/src/livecodes/i18n/locales/fr/translation.ts @@ -1045,6 +1045,7 @@ const translation: I18nTranslation = { php: 'Démarrage PHP', 'php-wasm': 'Démarrage PHP (Wasm)', postgresql: 'Démarrage PostgreSQL', + duckdb: 'Démarrage DuckDB', preact: 'Démarrage Preact', prolog: 'Démarrage Prolog', python: 'Démarrage Python', diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json index 643fdc7634..02bb9b3cf1 100644 --- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada को पूरी तरह से ब्राउज़र में <1>HAC द्वारा संकलित और चलाया जाता है, जो Ada में लिखा गया और WebAssembly में संकलित एक Ada कंपाइलर है। कोई सर्वर शामिल नहीं है।" + "translation": "Ada को पूरी तरह से ब्राउज़र में HAC द्वारा संकलित और चलाया जाता है, जो Ada में लिखा गया और WebAssembly में संकलित एक Ada कंपाइलर है। कोई सर्वर शामिल नहीं है।" }, "adaWasm.link": { "translation": " Ada सूचना केंद्र Ada प्रोग्रामिंग (विकिबुक्स) HAC रेपो लाइवकोड दस्तावेज़ीकरण स्टार्टर टेम्पलेट लोड करें " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB-Wasm का उपयोग करके WASM के रूप में पैकेज किया गया DuckDB" + }, + "duckdb.link": { + "translation": " DuckDB आधिकारिक वेबसाइट DuckDB दस्तावेज़ीकरण DuckDB-Wasm GitHub रेपो X को Y मिनटों में सीखें, जहां X=SQL स्टार्टर टेम्पलेट लोड करें " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "एम्बेडेड जावास्क्रिप्ट टेम्प्लेटिंग।" }, diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts index 52e2568b7d..da1df6a9d4 100644 --- a/src/livecodes/i18n/locales/hi/language-info.ts +++ b/src/livecodes/i18n/locales/hi/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL आधिकारिक वेबसाइट <3> <4>PostgreSQL दस्तावेज़ीकरण <5> <6>PGlite GitHub रेपो <7> <8>X को Y मिनटों में सीखें, जहां X=SQL <9> <10>स्टार्टर टेम्पलेट लोड करें ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB-Wasm का उपयोग करके WASM के रूप में पैकेज किया गया DuckDB', + link: '<1> <2>DuckDB आधिकारिक वेबसाइट <3> <4>DuckDB दस्तावेज़ीकरण <5> <6>DuckDB-Wasm GitHub रेपो <7> <8>X को Y मिनटों में सीखें, जहां X=SQL <9> <10>स्टार्टर टेम्पलेट लोड करें ', + name: 'DuckDB', + }, prolog: { desc: 'JavaScript में एक ओपन सोर्स Prolog इंटरप्रेटर।', link: '<1> <2>Tau Prolog आधिकारिक वेबसाइट <3> <4>Tau Prolog दस्तावेज़ीकरण <5> <6>SWI-Prolog <7> <8>X को Y मिनटों में सीखें, जहां X=Prolog <9> <10>स्टार्टर टेम्पलेट लोड करें ', diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json index 6a291a3cdc..4586943c8d 100644 --- a/src/livecodes/i18n/locales/hi/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "आरेख स्टार्टर" }, + "templates.starter.duckdb": { + "translation": "DuckDB स्टार्टर" + }, "templates.starter.elm": { "translation": "Elm स्टार्टर" }, diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts index f54269e7c5..bedcf6fe12 100644 --- a/src/livecodes/i18n/locales/hi/translation.ts +++ b/src/livecodes/i18n/locales/hi/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'PHP स्टार्टर', 'php-wasm': 'PHP (Wasm) स्टार्टर', postgresql: 'PostgreSQL स्टार्टर', + duckdb: 'DuckDB स्टार्टर', preact: 'Preact स्टार्टर', prolog: 'Prolog स्टार्टर', python: 'Python स्टार्टर', diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json index e4ebd379b6..d98cd14b15 100644 --- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Az Ada-t teljes egészében a böngészőben fordítja le és futtatja a <1>HAC, egy Ada nyelven írt, WebAssembly-re fordított Ada-fordító. Nem vesz igénybe szervert." + "translation": "Az Ada-t teljes egészében a böngészőben fordítja le és futtatja a HAC, egy Ada nyelven írt, WebAssembly-re fordított Ada-fordító. Nem vesz igénybe szervert." }, "adaWasm.link": { "translation": " Ada Információs Központ Ada programozás (Wikibooks) HAC repo LiveCodes dokumentáció Indító sablon betöltése " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB WASM-ként csomagolva a DuckDB-Wasm használatával" + }, + "duckdb.link": { + "translation": " DuckDB hivatalos weboldal DuckDB dokumentáció DuckDB-Wasm GitHub repo Tanulj X-et Y perc alatt, ahol X=SQL Kezdő sablon betöltése " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Beágyazott JavaScript sablonozás." }, diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts index 2aedbc3057..d0050b1970 100644 --- a/src/livecodes/i18n/locales/hu/language-info.ts +++ b/src/livecodes/i18n/locales/hu/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL hivatalos weboldal <3> <4>PostgreSQL dokumentáció <5> <6>PGlite GitHub repo <7> <8>Tanulj X-et Y perc alatt, ahol X=SQL <9> <10>Kezdő sablon betöltése ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB WASM-ként csomagolva a DuckDB-Wasm használatával', + link: '<1> <2>DuckDB hivatalos weboldal <3> <4>DuckDB dokumentáció <5> <6>DuckDB-Wasm GitHub repo <7> <8>Tanulj X-et Y perc alatt, ahol X=SQL <9> <10>Kezdő sablon betöltése ', + name: 'DuckDB', + }, prolog: { desc: 'Egy nyílt forráskódú Prolog értelmező JavaScript-ben.', link: '<1> <2>Tau Prolog hivatalos weboldal <3> <4>Tau Prolog dokumentáció <5> <6>SWI-Prolog <7> <8>Tanulj X-et Y perc alatt, ahol X=Prolog <9> <10>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 b514de76a5..bfa3a76193 100644 --- a/src/livecodes/i18n/locales/hu/translation.lokalise.json +++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Diagramok kezdő" }, + "templates.starter.duckdb": { + "translation": "DuckDB kezdő" + }, "templates.starter.elm": { "translation": "Elm kezdő" }, diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts index 82ffa83907..f6620bc854 100644 --- a/src/livecodes/i18n/locales/hu/translation.ts +++ b/src/livecodes/i18n/locales/hu/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'PHP kezdő', 'php-wasm': 'PHP (Wasm) kezdő', postgresql: 'PostgreSQL kezdő', + duckdb: 'DuckDB kezdő', preact: 'Preact kezdő', prolog: 'Prolog kezdő', python: 'Python kezdő', diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json index ae1274dc20..93dc5a4fe9 100644 --- a/src/livecodes/i18n/locales/id/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada dikompilasi dan dijalankan sepenuhnya di dalam browser oleh <1>HAC, kompiler Ada yang ditulis dalam bahasa Ada dan dikompilasi ke WebAssembly. Tidak ada server yang terlibat." + "translation": "Ada dikompilasi dan dijalankan sepenuhnya di dalam browser oleh HAC, kompiler Ada yang ditulis dalam bahasa Ada dan dikompilasi ke WebAssembly. Tidak ada server yang terlibat." }, "adaWasm.link": { "translation": " Pusat Informasi Ada Pemrograman Ada (Wikibooks) Repo HAC Dokumentasi LiveCodes Muat templat awal " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB dikemas sebagai WASM menggunakan DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Situs web resmi DuckDB Dokumentasi DuckDB Repo GitHub DuckDB-Wasm Pelajari X dalam Y menit, dengan X=SQL Muat template pemula " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Templating JavaScript Tertanam." }, diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts index 45af16c790..6fa26feef7 100644 --- a/src/livecodes/i18n/locales/id/language-info.ts +++ b/src/livecodes/i18n/locales/id/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Situs web resmi PostgreSQL <3> <4>Dokumentasi PostgreSQL <5> <6>Repo GitHub PGlite <7> <8>Pelajari X dalam Y menit, dengan X=SQL <9> <10>Muat template pemula ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB dikemas sebagai WASM menggunakan DuckDB-Wasm', + link: '<1> <2>Situs web resmi DuckDB <3> <4>Dokumentasi DuckDB <5> <6>Repo GitHub DuckDB-Wasm <7> <8>Pelajari X dalam Y menit, dengan X=SQL <9> <10>Muat template pemula ', + name: 'DuckDB', + }, prolog: { desc: 'Interpreter Prolog open source di JavaScript.', link: '<1> <2>Situs web resmi Tau Prolog <3> <4>Dokumentasi Tau Prolog <5> <6>SWI-Prolog <7> <8>Pelajari X dalam Y menit, dengan X=Prolog <9> <10>Muat template pemula ', diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json index d5ec567f78..8692aa62d4 100644 --- a/src/livecodes/i18n/locales/id/translation.lokalise.json +++ b/src/livecodes/i18n/locales/id/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Pemula Diagram" }, + "templates.starter.duckdb": { + "translation": "Pemula DuckDB" + }, "templates.starter.elm": { "translation": "Pemula Elm" }, diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts index f314c322ff..c025ca477b 100644 --- a/src/livecodes/i18n/locales/id/translation.ts +++ b/src/livecodes/i18n/locales/id/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'Pemula PHP', 'php-wasm': 'Pemula PHP (Wasm)', postgresql: 'Pemula PostgreSQL', + duckdb: 'Pemula DuckDB', preact: 'Pemula Preact', prolog: 'Pemula Prolog', python: 'Pemula Python', diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json index 988ca6e6f1..666bd9b59f 100644 --- a/src/livecodes/i18n/locales/it/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada viene compilato ed eseguito interamente nel browser da <1>HAC, un compilatore Ada scritto in Ada e compilato in WebAssembly. Nessun server è coinvolto." + "translation": "Ada viene compilato ed eseguito interamente nel browser da HAC, un compilatore Ada scritto in Ada e compilato in WebAssembly. Nessun server è coinvolto." }, "adaWasm.link": { "translation": " Centro informazioni Ada Programmazione in Ada (Wikibooks) Repository di HAC Documentazione LiveCodes Carica il modello di avvio " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB impacchettato come WASM utilizzando DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Sito ufficiale di DuckDB Documentazione di DuckDB Repository GitHub di DuckDB-Wasm Impara X in Y minuti, dove X=SQL Carica modello di partenza " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Templating JavaScript incorporato." }, diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts index 42873b47d0..2ff5f7546a 100644 --- a/src/livecodes/i18n/locales/it/language-info.ts +++ b/src/livecodes/i18n/locales/it/language-info.ts @@ -380,6 +380,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Sito ufficiale di PostgreSQL <3> <4>Documentazione di PostgreSQL <5> <6>Repository GitHub di PGlite <7> <8>Impara X in Y minuti, dove X=SQL <9> <10>Carica modello di partenza ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB impacchettato come WASM utilizzando DuckDB-Wasm', + link: '<1> <2>Sito ufficiale di DuckDB <3> <4>Documentazione di DuckDB <5> <6>Repository GitHub di DuckDB-Wasm <7> <8>Impara X in Y minuti, dove X=SQL <9> <10>Carica modello di partenza ', + name: 'DuckDB', + }, prolog: { desc: 'Un interprete Prolog open source in JavaScript.', link: '<1> <2>Sito ufficiale di Tau Prolog <3> <4>Documentazione di Tau Prolog <5> <6>SWI-Prolog <7> <8>Impara X in Y minuti, dove X=Prolog <9> <10>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 e1e144de39..b0fb46284a 100644 --- a/src/livecodes/i18n/locales/it/translation.lokalise.json +++ b/src/livecodes/i18n/locales/it/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Starter Diagrammi" }, + "templates.starter.duckdb": { + "translation": "Starter DuckDB" + }, "templates.starter.elm": { "translation": "Starter Elm" }, diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts index 1c6d1599ad..f58d0479ce 100644 --- a/src/livecodes/i18n/locales/it/translation.ts +++ b/src/livecodes/i18n/locales/it/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'Starter PHP', 'php-wasm': 'Starter PHP (Wasm)', postgresql: 'Starter PostgreSQL', + duckdb: 'Starter DuckDB', preact: 'Starter Preact', prolog: 'Starter Prolog', python: 'Starter Python', diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json index 76264bd9f8..f53213bab5 100644 --- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada は Ada で書かれ WebAssembly にコンパイルされた Ada コンパイラである <1>HAC によって、完全にブラウザ内でコンパイルおよび実行されます。サーバーは関与しません。" + "translation": "Ada は Ada で書かれ WebAssembly にコンパイルされた Ada コンパイラである HAC によって、完全にブラウザ内でコンパイルおよび実行されます。サーバーは関与しません。" }, "adaWasm.link": { "translation": " Ada 情報センター Ada プログラミング(Wikibooks) HAC リポジトリ LiveCodes ドキュメント スターターテンプレートを読み込む " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB-Wasm を使用して WASM としてパッケージ化された DuckDB" + }, + "duckdb.link": { + "translation": " DuckDB 公式ウェブサイト DuckDB ドキュメント DuckDB-Wasm GitHub リポジトリ X分でYを学ぶ、X=SQL スターターテンプレートを読み込む " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "埋め込み JavaScript テンプレート。" }, diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts index ad822f4056..7adf4071ee 100644 --- a/src/livecodes/i18n/locales/ja/language-info.ts +++ b/src/livecodes/i18n/locales/ja/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL 公式ウェブサイト <3> <4>PostgreSQL ドキュメント <5> <6>PGlite GitHub リポジトリ <7> <8>X分でYを学ぶ、X=SQL <9> <10>スターターテンプレートを読み込む ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB-Wasm を使用して WASM としてパッケージ化された DuckDB', + link: '<1> <2>DuckDB 公式ウェブサイト <3> <4>DuckDB ドキュメント <5> <6>DuckDB-Wasm GitHub リポジトリ <7> <8>X分でYを学ぶ、X=SQL <9> <10>スターターテンプレートを読み込む ', + name: 'DuckDB', + }, prolog: { desc: 'JavaScript で書かれたオープンソースの Prolog インタプリタ。', link: '<1> <2>Tau Prolog 公式ウェブサイト <3> <4>Tau Prolog ドキュメント <5> <6>SWI-Prolog <7> <8>X分でYを学ぶ、X=Prolog <9> <10>スターターテンプレートを読み込む ', diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json index 0999e74294..1f5141fe25 100644 --- a/src/livecodes/i18n/locales/ja/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "ダイアグラムスターター" }, + "templates.starter.duckdb": { + "translation": "DuckDBスターター" + }, "templates.starter.elm": { "translation": "Elmスターター" }, diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts index d85683b8b7..494d0b5174 100644 --- a/src/livecodes/i18n/locales/ja/translation.ts +++ b/src/livecodes/i18n/locales/ja/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'PHPスターター', 'php-wasm': 'PHP(Wasm)スターター', postgresql: 'PostgreSQLスターター', + duckdb: 'DuckDBスターター', preact: 'Preactスターター', prolog: 'Prologスターター', python: 'Pythonスターター', diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json index 520ea44ccb..9e791e5f3e 100644 --- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada wordt volledig in de browser gecompileerd en uitgevoerd door <1>HAC, een in Ada geschreven en naar WebAssembly gecompileerde Ada-compiler. Er is geen server bij betrokken." + "translation": "Ada wordt volledig in de browser gecompileerd en uitgevoerd door HAC, een in Ada geschreven en naar WebAssembly gecompileerde Ada-compiler. Er is geen server bij betrokken." }, "adaWasm.link": { "translation": " Ada Informatiecentrum Programmeren in Ada (Wikibooks) HAC-repo LiveCodes-documentatie Starterssjabloon laden " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB verpakt als WASM met DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " DuckDB officiële website DuckDB documentatie DuckDB-Wasm GitHub repo Leer X in Y minuten, waarbij X=SQL Startsjabloon laden " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Embedded JavaScript-templating." }, diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts index 7f9466accc..fe5a3b303f 100644 --- a/src/livecodes/i18n/locales/nl/language-info.ts +++ b/src/livecodes/i18n/locales/nl/language-info.ts @@ -380,6 +380,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL officiële website <3> <4>PostgreSQL documentatie <5> <6>PGlite GitHub repo <7> <8>Leer X in Y minuten, waarbij X=SQL <9> <10>Startsjabloon laden ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB verpakt als WASM met DuckDB-Wasm', + link: '<1> <2>DuckDB officiële website <3> <4>DuckDB documentatie <5> <6>DuckDB-Wasm GitHub repo <7> <8>Leer X in Y minuten, waarbij X=SQL <9> <10>Startsjabloon laden ', + name: 'DuckDB', + }, prolog: { desc: 'Een open source Prolog-interpreter in JavaScript.', link: '<1> <2>Tau Prolog officiële website <3> <4>Tau Prolog documentatie <5> <6>SWI-Prolog <7> <8>Leer X in Y minuten, waarbij X=Prolog <9> <10>Startsjabloon laden ', diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json index 3dfe0802d9..6e1729fe00 100644 --- a/src/livecodes/i18n/locales/nl/translation.lokalise.json +++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Diagrammen-starter" }, + "templates.starter.duckdb": { + "translation": "DuckDB-starter" + }, "templates.starter.elm": { "translation": "Elm-starter" }, diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts index a82e8155da..fce2ffb52a 100644 --- a/src/livecodes/i18n/locales/nl/translation.ts +++ b/src/livecodes/i18n/locales/nl/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'PHP-starter', 'php-wasm': 'PHP (Wasm)-starter', postgresql: 'PostgreSQL-starter', + duckdb: 'DuckDB-starter', preact: 'Preact-starter', prolog: 'Prolog-starter', python: 'Python-starter', diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json index 77201bf96e..18a2fea497 100644 --- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "O Ada é compilado e executado inteiramente no navegador pelo <1>HAC, um compilador Ada escrito em Ada e compilado para WebAssembly. Nenhum servidor está envolvido." + "translation": "O Ada é compilado e executado inteiramente no navegador pelo HAC, um compilador Ada escrito em Ada e compilado para WebAssembly. Nenhum servidor está envolvido." }, "adaWasm.link": { "translation": " Centro de Informação Ada Programação em Ada (Wikibooks) Repositório do HAC Documentação do LiveCodes Carregar modelo inicial " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB empacotado como WASM usando DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Site oficial do DuckDB Documentação do DuckDB Repositório GitHub do DuckDB-Wasm Aprenda X em Y minutos, onde X=SQL Carregar modelo inicial " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Modelagem JavaScript incorporada." }, diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts index fc681c58f8..dc7df1f9b9 100644 --- a/src/livecodes/i18n/locales/pt/language-info.ts +++ b/src/livecodes/i18n/locales/pt/language-info.ts @@ -380,6 +380,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Site oficial do PostgreSQL <3> <4>Documentação do PostgreSQL <5> <6>Repositório GitHub do PGlite <7> <8>Aprenda X em Y minutos, onde X=SQL <9> <10>Carregar modelo inicial ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB empacotado como WASM usando DuckDB-Wasm', + link: '<1> <2>Site oficial do DuckDB <3> <4>Documentação do DuckDB <5> <6>Repositório GitHub do DuckDB-Wasm <7> <8>Aprenda X em Y minutos, onde X=SQL <9> <10>Carregar modelo inicial ', + name: 'DuckDB', + }, prolog: { desc: 'Um interpretador Prolog de código aberto em JavaScript.', link: '<1> <2>Site oficial do Tau Prolog <3> <4>Documentação do Tau Prolog <5> <6>SWI-Prolog <7> <8>Aprenda X em Y minutos, onde X=Prolog <9> <10>Carregar modelo inicial ', diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json index d9b58e7715..3ec5ee1dda 100644 --- a/src/livecodes/i18n/locales/pt/translation.lokalise.json +++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Iniciante Diagrams" }, + "templates.starter.duckdb": { + "translation": "Iniciante DuckDB" + }, "templates.starter.elm": { "translation": "Iniciante Elm" }, diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts index 12a509b999..6fbed58c5f 100644 --- a/src/livecodes/i18n/locales/pt/translation.ts +++ b/src/livecodes/i18n/locales/pt/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'Iniciante PHP', 'php-wasm': 'Iniciante PHP (Wasm)', postgresql: 'Iniciante PostgreSQL', + duckdb: 'Iniciante DuckDB', preact: 'Iniciante Preact', prolog: 'Iniciante Prolog', python: 'Iniciante Python', diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json index dbec4ac230..a37d96b9ed 100644 --- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada компилируется и выполняется полностью в браузере с помощью <1>HAC — компилятора Ada, написанного на Ada и скомпилированного в WebAssembly. Сервер не задействован." + "translation": "Ada компилируется и выполняется полностью в браузере с помощью HAC — компилятора Ada, написанного на Ada и скомпилированного в WebAssembly. Сервер не задействован." }, "adaWasm.link": { "translation": " Информационный центр Ada Программирование на Ada (Wikibooks) Репозиторий HAC Документация LiveCodes Загрузить стартовый шаблон " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB, упакованный в WASM с использованием DuckDB-Wasm" + }, + "duckdb.link": { + "translation": " Официальный сайт DuckDB Документация DuckDB GitHub-репозиторий DuckDB-Wasm Изучите X за Y минут, где X=SQL Загрузить стартовый шаблон " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Встроенные шаблоны JavaScript." }, diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts index e3f02cfb62..0ae66ae67a 100644 --- a/src/livecodes/i18n/locales/ru/language-info.ts +++ b/src/livecodes/i18n/locales/ru/language-info.ts @@ -382,6 +382,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>Официальный сайт PostgreSQL <3> <4>Документация PostgreSQL <5> <6>GitHub-репозиторий PGlite <7> <8>Изучите X за Y минут, где X=SQL <9> <10>Загрузить стартовый шаблон ', name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB, упакованный в WASM с использованием DuckDB-Wasm', + link: '<1> <2>Официальный сайт DuckDB <3> <4>Документация DuckDB <5> <6>GitHub-репозиторий DuckDB-Wasm <7> <8>Изучите X за Y минут, где X=SQL <9> <10>Загрузить стартовый шаблон ', + name: 'DuckDB', + }, prolog: { desc: 'Интерпретатор Prolog с открытым исходным кодом на JavaScript.', link: '<1> <2>Официальный сайт Tau Prolog <3> <4>Документация Tau Prolog <5> <6>SWI-Prolog <7> <8>Изучите X за Y минут, где X=Prolog <9> <10>Загрузить стартовый шаблон ', diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json index 62cd62ec9d..698a451697 100644 --- a/src/livecodes/i18n/locales/ru/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Стартер диаграмм" }, + "templates.starter.duckdb": { + "translation": "Стартер DuckDB" + }, "templates.starter.elm": { "translation": "Стартер Elm" }, diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts index 06e56c3eca..12b2c9d264 100644 --- a/src/livecodes/i18n/locales/ru/translation.ts +++ b/src/livecodes/i18n/locales/ru/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'Стартер PHP', 'php-wasm': 'Стартер PHP (Wasm)', postgresql: 'Стартер PostgreSQL', + duckdb: 'Стартер DuckDB', preact: 'Стартер Preact', prolog: 'Стартер Prolog', python: 'Стартер Python', diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json index cd4fd421f3..12a018af49 100644 --- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada, Ada ile yazılmış ve WebAssembly'ye derlenmiş bir Ada derleyicisi olan <1>HAC tarafından tamamen tarayıcı içinde derlenir ve çalıştırılır. Hiçbir sunucu devreye girmez." + "translation": "Ada, Ada ile yazılmış ve WebAssembly'ye derlenmiş bir Ada derleyicisi olan HAC tarafından tamamen tarayıcı içinde derlenir ve çalıştırılır. Hiçbir sunucu devreye girmez." }, "adaWasm.link": { "translation": " Ada Bilgi Merkezi Ada programlama (Wikibooks) HAC repo'su LiveCodes Belgeleri Başlangıç şablonunu yükle " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "DuckDB-Wasm kullanılarak WASM olarak paketlenmiş DuckDB." + }, + "duckdb.link": { + "translation": " DuckDB resmi web sitesi DuckDB dokümantasyonu DuckDB-Wasm GitHub repo'su Y Dakikada X Öğrenin, X=SQL Başlangıç şablonunu yükle " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "Gömülü JavaScript şablonlama." }, diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts index ed71d0a3a7..c9919b01ee 100644 --- a/src/livecodes/i18n/locales/tr/language-info.ts +++ b/src/livecodes/i18n/locales/tr/language-info.ts @@ -381,6 +381,11 @@ const languageInfo: I18nLangInfoTranslation = { link: "<1> <2>PostgreSQL resmi web sitesi <3> <4>PostgreSQL dokümantasyonu <5> <6>PGlite GitHub repo'su <7> <8>Y Dakikada X Öğrenin, X=SQL <9> <10>Başlangıç şablonunu yükle ", name: 'PostgreSQL', }, + duckdb: { + desc: 'DuckDB-Wasm kullanılarak WASM olarak paketlenmiş DuckDB.', + link: "<1> <2>DuckDB resmi web sitesi <3> <4>DuckDB dokümantasyonu <5> <6>DuckDB-Wasm GitHub repo'su <7> <8>Y Dakikada X Öğrenin, X=SQL <9> <10>Başlangıç şablonunu yükle ", + name: 'DuckDB', + }, prolog: { desc: "JavaScript'te açık kaynaklı bir Prolog yorumlayıcısı.", link: '<1> <2>Tau Prolog resmi web sitesi <3> <4>Tau Prolog dokümantasyonu <5> <6>SWI-Prolog <7> <8>Y Dakikada X Öğrenin, X=Prolog <9> <10>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 8f9c3bd83a..21f71ca22e 100644 --- a/src/livecodes/i18n/locales/tr/translation.lokalise.json +++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "Diyagramlar Başlangıç" }, + "templates.starter.duckdb": { + "translation": "DuckDB Başlangıç" + }, "templates.starter.elm": { "translation": "Elm Başlangıç" }, diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts index b973784178..40cbbb8a62 100644 --- a/src/livecodes/i18n/locales/tr/translation.ts +++ b/src/livecodes/i18n/locales/tr/translation.ts @@ -1044,6 +1044,7 @@ const translation: I18nTranslation = { php: 'PHP Başlangıç', 'php-wasm': 'PHP (Wasm) Başlangıç', postgresql: 'PostgreSQL Başlangıç', + duckdb: 'DuckDB Başlangıç', preact: 'Preact Başlangıç', prolog: 'Prolog Başlangıç', python: 'Python 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 19aff173c2..3b41cfa401 100644 --- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada کو مکمل طور پر براؤزر میں <1>HAC کے ذریعے مرتب اور چلایا جاتا ہے، جو Ada میں لکھا گیا اور WebAssembly میں مرتب کردہ ایک Ada کمپائلر ہے۔ کوئی سرور شامل نہیں ہے۔" + "translation": "Ada کو مکمل طور پر براؤزر میں HAC کے ذریعے مرتب اور چلایا جاتا ہے، جو Ada میں لکھا گیا اور WebAssembly میں مرتب کردہ ایک Ada کمپائلر ہے۔ کوئی سرور شامل نہیں ہے۔" }, "adaWasm.link": { "translation": " Ada معلوماتی مرکز Ada پروگرامنگ (ویکی کتب) HAC ریپو LiveCodes دستاویزات اسٹارٹر ٹیمپلیٹ لوڈ کریں " @@ -243,6 +243,15 @@ "dot.name": { "translation": "ڈاٹ.جے ایس" }, + "duckdb.desc": { + "translation": "ڈک ڈی بی-واسم کا استعمال کرتے ہوئے ڈبلیو اے ایس ایم کے طور پر پیکیج کیا گیا ڈک ڈی بی" + }, + "duckdb.link": { + "translation": " ڈک ڈی بی کی سرکاری ویب سائٹ ڈک ڈی بی دستاویزات ڈک ڈی بی-واسم گٹ ہب ریپو X کو Y منٹ میں سیکھیں، جہاں X=ایس کیو ایل ابتدائی سانچہ لوڈ کریں " + }, + "duckdb.name": { + "translation": "ڈک ڈی بی" + }, "ejs.desc": { "translation": "ایمبیڈڈ جاوا اسکرپٹ ٹیمپلیٹنگ۔" }, diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts index 96e63c83f6..65134f09f6 100644 --- a/src/livecodes/i18n/locales/ur/language-info.ts +++ b/src/livecodes/i18n/locales/ur/language-info.ts @@ -382,6 +382,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>پوسٹگریس کیو ایل کی سرکاری ویب سائٹ <3> <4>پوسٹگریس کیو ایل دستاویزات <5> <6>پی جی لائٹ گٹ ہب ریپو <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=ایس کیو ایل <9> <10>ابتدائی سانچہ لوڈ کریں ', name: 'پوسٹگریس کیو ایل', }, + duckdb: { + desc: 'ڈک ڈی بی-واسم کا استعمال کرتے ہوئے ڈبلیو اے ایس ایم کے طور پر پیکیج کیا گیا ڈک ڈی بی', + link: '<1> <2>ڈک ڈی بی کی سرکاری ویب سائٹ <3> <4>ڈک ڈی بی دستاویزات <5> <6>ڈک ڈی بی-واسم گٹ ہب ریپو <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=ایس کیو ایل <9> <10>ابتدائی سانچہ لوڈ کریں ', + name: 'ڈک ڈی بی', + }, prolog: { desc: 'جاوا اسکرپٹ میں ایک اوپن سورس پرولوگ انٹرپریٹر۔', link: '<1> <2>ٹاؤ پرولوگ کی سرکاری ویب سائٹ <3> <4>ٹاؤ پرولوگ دستاویزات <5> <6>ایس ڈبلیو آئی-پرولوگ <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=پرولوگ <9> <10>ابتدائی سانچہ لوڈ کریں ', diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json index 3e5e382dc3..00ba8dd0c1 100644 --- a/src/livecodes/i18n/locales/ur/translation.lokalise.json +++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "ڈایاگرامز شروعاتی" }, + "templates.starter.duckdb": { + "translation": "ڈک ڈی بی شروعاتی" + }, "templates.starter.elm": { "translation": "ایلم شروعاتی" }, diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts index 4ffe0b3a9b..5e27137393 100644 --- a/src/livecodes/i18n/locales/ur/translation.ts +++ b/src/livecodes/i18n/locales/ur/translation.ts @@ -1043,6 +1043,7 @@ const translation: I18nTranslation = { php: 'پی ایچ پی شروعاتی', 'php-wasm': 'پی ایچ پی (واسم) شروعاتی', postgresql: 'پوسٹگریس کیو ایل شروعاتی', + duckdb: 'ڈک ڈی بی شروعاتی', preact: 'پری ایکٹ شروعاتی', prolog: 'پرولوگ شروعاتی', python: 'پائتھن شروعاتی', 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 7392a070b1..5abff12b47 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json @@ -1,7 +1,7 @@ { "$comment": "ATTENTION: This file is auto-generated from source code. Do not edit manually!", "adaWasm.desc": { - "translation": "Ada 由用 Ada 编写并编译为 WebAssembly 的 Ada 编译器 <1>HAC 完全在浏览器中编译和运行。不涉及任何服务器。" + "translation": "Ada 由用 Ada 编写并编译为 WebAssembly 的 Ada 编译器 HAC 完全在浏览器中编译和运行。不涉及任何服务器。" }, "adaWasm.link": { "translation": " Ada 信息交换中心 Ada 编程(Wikibooks) HAC 仓库 LiveCodes 文档 加载入门模板 " @@ -243,6 +243,15 @@ "dot.name": { "translation": "doT.js" }, + "duckdb.desc": { + "translation": "使用 DuckDB-Wasm 打包为 WASM 的 DuckDB。" + }, + "duckdb.link": { + "translation": " DuckDB官网 DuckDB文档 DuckDB-Wasm GitHub 仓库 在 Y 分钟内学习 X,其中 X=SQL 加载启动模板 " + }, + "duckdb.name": { + "translation": "DuckDB" + }, "ejs.desc": { "translation": "嵌入式 JavaScript 模板。" }, diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts index 33b067eed4..286e371b41 100644 --- a/src/livecodes/i18n/locales/zh-CN/language-info.ts +++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts @@ -375,6 +375,11 @@ const languageInfo: I18nLangInfoTranslation = { link: '<1> <2>PostgreSQL官网 <3> <4>PostgreSQL文档 <5> <6>PGlite GitHub 仓库 <7> <8>在 Y 分钟内学习 X,其中 X=SQL <9> <10>加载启动模板 ', name: 'PostgreSQL', }, + duckdb: { + desc: '使用 DuckDB-Wasm 打包为 WASM 的 DuckDB。', + link: '<1> <2>DuckDB官网 <3> <4>DuckDB文档 <5> <6>DuckDB-Wasm GitHub 仓库 <7> <8>在 Y 分钟内学习 X,其中 X=SQL <9> <10>加载启动模板 ', + name: 'DuckDB', + }, prolog: { desc: 'JavaScript 中的开源 Prolog 解释器。', link: '<1> <2>Tau Prolog 官方网站 <3> <4>Tau Prolog 文档 <5> <6>SWI-Prolog <7> <8>在 Y 分钟内学习 X,其中 X=Prolog <9> <10>加载启动模板 ', diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json index 2a4ae41f3a..a60b50a2f4 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json +++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json @@ -1989,6 +1989,9 @@ "templates.starter.diagrams": { "translation": "图表启动模板" }, + "templates.starter.duckdb": { + "translation": "DuckDB 启动模板" + }, "templates.starter.elm": { "translation": "Elm 启动模板" }, diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts index 297550662f..11c63750d6 100644 --- a/src/livecodes/i18n/locales/zh-CN/translation.ts +++ b/src/livecodes/i18n/locales/zh-CN/translation.ts @@ -1041,6 +1041,7 @@ const translation: I18nTranslation = { php: 'PHP 启动模板', 'php-wasm': 'PHP(WASM)启动模板', postgresql: 'PostgreSQL 启动模板', + duckdb: 'DuckDB 启动模板', preact: 'Preact 启动模板', prolog: 'Prolog 启动模板', python: 'Python 启动模板', diff --git a/src/livecodes/languages/duckdb/index.ts b/src/livecodes/languages/duckdb/index.ts new file mode 100644 index 0000000000..710e2b7e47 --- /dev/null +++ b/src/livecodes/languages/duckdb/index.ts @@ -0,0 +1 @@ +export * from './lang-duckdb'; diff --git a/src/livecodes/languages/duckdb/lang-duckdb-compiler-esm.ts b/src/livecodes/languages/duckdb/lang-duckdb-compiler-esm.ts new file mode 100644 index 0000000000..148f5bd454 --- /dev/null +++ b/src/livecodes/languages/duckdb/lang-duckdb-compiler-esm.ts @@ -0,0 +1,127 @@ +import type { CompilerFunction } from '../../models'; +import { getLanguageCustomSettings } from '../../utils/utils'; +import { duckdbWasmBaseUrl, duckdbWasmModuleUrl } from '../../vendors'; + +declare global { + interface Window { + duckdb: any; + } +} + +const getDuckDB = async () => { + if (!window.duckdb) { + window.duckdb = await import(duckdbWasmModuleUrl); + } + return window.duckdb; +}; + +const createDB = async (duckdb: any) => { + const bundles = { + mvp: { + mainModule: duckdbWasmBaseUrl + 'duckdb-mvp.wasm', + mainWorker: duckdbWasmBaseUrl + 'duckdb-browser-mvp.worker.js', + }, + eh: { + mainModule: duckdbWasmBaseUrl + 'duckdb-eh.wasm', + mainWorker: duckdbWasmBaseUrl + 'duckdb-browser-eh.worker.js', + }, + }; + const bundle = await duckdb.selectBundle(bundles); + const workerUrl = URL.createObjectURL( + new Blob([`importScripts("${bundle.mainWorker}");`], { type: 'text/javascript' }), + ); + const worker = new Worker(workerUrl); + const logger = new duckdb.ConsoleLogger(); + const db = new duckdb.AsyncDuckDB(logger, worker); + await db.instantiate(bundle.mainModule, bundle.pthreadWorker); + return db; +}; + +export const duckdbCompiler: CompilerFunction = async (code, { config }) => { + if (!code.trim()) return '{ "data": [] }'; + const duckdb = await getDuckDB(); + + const options = getLanguageCustomSettings('duckdb', config); + const { scriptURLs } = options; + + if (Array.isArray(scriptURLs)) { + const scripts = await Promise.all( + scriptURLs + .map((url) => + fetch(url) + .then((res) => { + if (!res.ok) { + throw new Error('Error fetching: ' + url); + } + return res.text(); + }) + // eslint-disable-next-line no-console + .catch(console.warn), + ) + .filter(Boolean), + ); + code = [...scripts, code].join('; '); + } + + const db = await createDB(duckdb); + const conn = await db.connect(); + + try { + // `conn.query` materializes only the first result-returning statement, so + // statements are run one at a time and their results collected. + const statements = splitStatements(code, await db.tokenize(code)); + const data: Array<{ columns: string[]; values: unknown[][] }> = []; + for (const statement of statements) { + const result = await conn.query(`${statement}\n; SELECT 0 AS "${resultMarker}"`); + const fields = result?.schema?.fields ?? []; + // DDL/DML statements return no query result; appending the marker query + // makes them return the marker instead, so they can be skipped. + if (fields.length === 1 && fields[0].name === resultMarker) continue; + data.push(...transformData(result)); + } + return `${JSON.stringify({ data }, jsonReplacer, 2)}`; + } catch (error: any) { + return `${JSON.stringify({ error: error.message }, null, 2)}`; + } finally { + await conn.close(); + await db.terminate(); + } +}; + +const resultMarker = '__livecodes_result__'; + +const splitStatements = (code: string, tokens: { offsets: number[] }): string[] => { + const bytes = new TextEncoder().encode(code); + const statements: string[] = []; + let start = 0; + for (const offset of [...tokens.offsets, bytes.length]) { + if (offset === bytes.length || bytes[offset] === 0x3b) { + const statement = new TextDecoder().decode(bytes.subarray(start, offset)).trim(); + if (statement) { + statements.push(statement); + } + start = offset + 1; + } + } + return statements; +}; + +const jsonReplacer = (_key: string, value: any) => { + if (typeof value === 'bigint') { + return value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER) + ? Number(value) + : value.toString(); + } + return value; +}; + +const transformData = (result: any): Array<{ columns: string[]; values: unknown[][] }> => { + const fields = result?.schema?.fields ?? []; + if (fields.length === 0) return []; + const columns = fields.map((field: any) => field.name); + const values = result.toArray().map((row: any) => { + const obj = typeof row.toJSON === 'function' ? row.toJSON() : row; + return columns.map((column: string) => obj[column]); + }); + return [{ columns, values }]; +}; diff --git a/src/livecodes/languages/duckdb/lang-duckdb.ts b/src/livecodes/languages/duckdb/lang-duckdb.ts new file mode 100644 index 0000000000..7f0f31a401 --- /dev/null +++ b/src/livecodes/languages/duckdb/lang-duckdb.ts @@ -0,0 +1,33 @@ +import type { CompilerFunction, LanguageSpecs } from '../../models'; +import { sqlFormatterUrl } from '../../vendors'; + +declare const importScripts: (...args: string[]) => void; + +export const runOutsideWorker: CompilerFunction = async (code: string, { baseUrl, config }) => { + const { duckdbCompiler } = await import(baseUrl + '{{hash:lang-duckdb-compiler-esm.js}}'); + return duckdbCompiler(code, { baseUrl, config }); +}; + +export const duckdb: LanguageSpecs = { + name: 'duckdb', + title: 'DuckDB', + formatter: { + factory: () => { + importScripts(sqlFormatterUrl); + return async (value: string) => ({ + formatted: await (self as any).sqlFormatter.format(value, { linesBetweenQueries: 2 }), + cursorOffset: 0, + }); + }, + }, + compiler: { + factory: () => async (code) => code, + runOutsideWorker, + scripts: ({ baseUrl }) => [baseUrl + '{{hash:lang-sql-script.js}}'], + scriptType: 'application/json', + compiledCodeLanguage: 'json', + }, + extensions: ['duckdb.sql', 'duckdb'], + editor: 'script', + editorLanguage: 'sql', +}; diff --git a/src/livecodes/languages/languages.ts b/src/livecodes/languages/languages.ts index 647455e0e6..5f13c0f553 100644 --- a/src/livecodes/languages/languages.ts +++ b/src/livecodes/languages/languages.ts @@ -25,6 +25,7 @@ import { dWasm } from './d-wasm'; import { dart } from './dart'; import { diagrams } from './diagrams'; import { dot } from './dot'; +import { duckdb } from './duckdb'; import { ejs } from './ejs'; import { elm } from './elm'; import { eta } from './eta'; @@ -219,6 +220,7 @@ export const languages: LanguageSpecs[] = [ assemblyWasm, sql, postgresql, + duckdb, prolog, minizinc, blockly, diff --git a/src/livecodes/languages/postgresql/lang-postgresql-compiler-esm.ts b/src/livecodes/languages/postgresql/lang-postgresql-compiler-esm.ts index aacc74f089..96f71be7fb 100644 --- a/src/livecodes/languages/postgresql/lang-postgresql-compiler-esm.ts +++ b/src/livecodes/languages/postgresql/lang-postgresql-compiler-esm.ts @@ -10,7 +10,7 @@ declare global { } export const pgSqlCompiler: CompilerFunction = async (code, { config }) => { - if (!code.trim()) return '{ data: [] }'; + if (!code.trim()) return '{ "data": [] }'; window.PGlite = window.PGlite || (await import(pgliteUrl)).PGlite; const options = getLanguageCustomSettings('pgsql', config); diff --git a/src/livecodes/templates/starter/duckdb-starter.ts b/src/livecodes/templates/starter/duckdb-starter.ts new file mode 100644 index 0000000000..397572c779 --- /dev/null +++ b/src/livecodes/templates/starter/duckdb-starter.ts @@ -0,0 +1,124 @@ +import type { Template } from '../../models'; + +export const duckdbStarter: Template = { + name: 'duckdb', + title: window.deps.translateString('templates.starter.duckdb', 'DuckDB Starter'), + thumbnail: 'assets/templates/duckdb.svg', + activeEditor: 'script', + markup: { + language: 'html', + content: ` +
    +
    + Tables +
    +
    +
    + Result +
    +
    +
    + Result as objects +
    +
    +
    + + +`.trimStart(), + }, + style: { + language: 'css', + content: ` +#output { + color: #3d3d3d; + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +} + +#output summary { + cursor: pointer; +} + +#output table { + border: 1px solid #ddd; + border-collapse: separate; + border-radius: 4px; + border-spacing: 0; + font-size: 0.9em; + margin: 1em; + width: 95%; +} + +#output th, +#output td { + padding: 0.5em; +} + +#output tr:nth-child(odd) { + background-color: #f2f2f2; +} + +#output pre { + background-color: #fafafa; + border: 1px solid #ddd; + border-radius: 4px; + box-sizing: border-box; + display: inline-block; + margin: 1em; + min-width: 95%; + padding: 1em; +} +`.trimStart(), + }, + script: { + language: 'duckdb', + content: ` +-- based on https://stackoverflow.com/q/7745609 + +CREATE TABLE IF NOT EXISTS quotes ( + id int NOT NULL, + rev int NOT NULL, + quote varchar NOT NULL, + PRIMARY KEY (id, rev) +); + +INSERT INTO quotes (id, rev, quote) VALUES + (1, 1, 'Simplicity is the ultimate sophistication. – Leonardo da Vinci'), + (2, 1, 'Change the world by being yourself. – Amy Poehler'), + (1, 2, 'Every moment is a fresh beginning. – T.S Eliot'), + (1, 3, 'Whatever you do, do it well. – Walt Disney'); + +SELECT a.id, a.rev, a.quote +FROM quotes a +INNER JOIN ( + SELECT id, MAX(rev) rev + FROM quotes + GROUP BY id +) b ON a.id = b.id AND a.rev = b.rev; + +SELECT a.* +FROM quotes a +LEFT OUTER JOIN quotes b + ON a.id = b.id AND a.rev < b.rev +WHERE b.id IS NULL; + +SELECT a.id, a.rev, a.quote + FROM (SELECT id, rev, quote, + ROW_NUMBER() OVER (PARTITION BY id ORDER BY rev DESC) rank + FROM quotes) a + WHERE a.rank = 1; +`.trimStart(), + }, +}; diff --git a/src/livecodes/templates/starter/index.ts b/src/livecodes/templates/starter/index.ts index 76fd3ad70f..18a2a1e3b9 100644 --- a/src/livecodes/templates/starter/index.ts +++ b/src/livecodes/templates/starter/index.ts @@ -26,6 +26,7 @@ import { d3Starter } from './d3-starter'; import { daisyuiStarter } from './daisyui-starter'; import { dartStarter } from './dart-starter'; import { diagramsStarter } from './diagrams-starter'; +import { duckdbStarter } from './duckdb-starter'; import { elmStarter } from './elm-starter'; import { fanakStarter } from './fanak-starter'; import { fennelStarter } from './fennel-starter'; @@ -186,6 +187,7 @@ export const starterTemplates = [ assemblyWasmStarter, sqlStarter, postgresqlStarter, + duckdbStarter, prologStarter, minizincStarter, blocklyStarter, diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts index 4d1c8285c6..5c60c99741 100644 --- a/src/livecodes/vendors.ts +++ b/src/livecodes/vendors.ts @@ -146,6 +146,10 @@ export const doppioJvmBaseUrl = 'https://unpkg.com/@seth0x41/doppio@1.0.0/'; export const dotUrl = /* @__PURE__ */ getUrl('dot@1.1.3/doT.js'); +export const duckdbWasmBaseUrl = /* @__PURE__ */ getUrl('@duckdb/duckdb-wasm@1.32.0/dist/'); + +export const duckdbWasmModuleUrl = /* @__PURE__ */ getModuleUrl('@duckdb/duckdb-wasm@1.32.0'); + export const ejsUrl = /* @__PURE__ */ getUrl('ejs@4.0.1/ejs.js'); export const elkjsBaseUrl = /* @__PURE__ */ getUrl('elkjs@0.8.2/lib/'); diff --git a/src/sdk/models.ts b/src/sdk/models.ts index 749c50a74e..956ec547e4 100644 --- a/src/sdk/models.ts +++ b/src/sdk/models.ts @@ -357,6 +357,8 @@ export type Language = | 'postgres' | 'postgre.sql' | 'postgresql.sql' + | 'duckdb' + | 'duckdb.sql' | 'prolog.pl' | 'prolog' | 'minizinc' @@ -558,6 +560,7 @@ export type TemplateName = | 'assembly-wasm' | 'sql' | 'postgresql' + | 'duckdb' | 'prolog' | 'minizinc' | 'blockly' diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts index 8670e7b1c0..b2408f34eb 100644 --- a/storybook/_stories/EmbedOptions/template.ts +++ b/storybook/_stories/EmbedOptions/template.ts @@ -94,6 +94,7 @@ const storyDef: StoryDef = { AssemblyWasm: { props: { template: 'assembly-wasm' }, storyName: 'Assembly (Wasm)' }, SQL: { props: { template: 'sql' } }, PostgreSQL: { props: { template: 'postgresql' } }, + DuckDB: { props: { template: 'duckdb' } }, Prolog: { props: { template: 'prolog' } }, Minizinc: { props: { template: 'minizinc' } }, Blockly: { props: { template: 'blockly' } }, diff --git a/storybook/preact/stories/EmbedOptions/template.stories.ts b/storybook/preact/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/preact/stories/EmbedOptions/template.stories.ts +++ b/storybook/preact/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/storybook/react/stories/EmbedOptions/template.stories.ts b/storybook/react/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/react/stories/EmbedOptions/template.stories.ts +++ b/storybook/react/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/storybook/solid/stories/EmbedOptions/template.stories.ts b/storybook/solid/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/solid/stories/EmbedOptions/template.stories.ts +++ b/storybook/solid/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/storybook/svelte/stories/EmbedOptions/template.stories.ts b/storybook/svelte/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/svelte/stories/EmbedOptions/template.stories.ts +++ b/storybook/svelte/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/storybook/vue/stories/EmbedOptions/template.stories.ts b/storybook/vue/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/vue/stories/EmbedOptions/template.stories.ts +++ b/storybook/vue/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/storybook/web-components/stories/EmbedOptions/template.stories.ts b/storybook/web-components/stories/EmbedOptions/template.stories.ts index f49d5295cb..a0136e2acd 100644 --- a/storybook/web-components/stories/EmbedOptions/template.stories.ts +++ b/storybook/web-components/stories/EmbedOptions/template.stories.ts @@ -111,6 +111,7 @@ export const AssemblyWasm = livecodesStory({ template: 'assembly-wasm' }); AssemblyWasm.storyName = 'Assembly (Wasm)'; export const SQL = livecodesStory({ template: 'sql' }); export const PostgreSQL = livecodesStory({ template: 'postgresql' }); +export const DuckDB = livecodesStory({ template: 'duckdb' }); export const Prolog = livecodesStory({ template: 'prolog' }); export const Minizinc = livecodesStory({ template: 'minizinc' }); export const Blockly = livecodesStory({ template: 'blockly' }); diff --git a/vendor-licenses.md b/vendor-licenses.md index 6a32514a61..2c581b3e45 100644 --- a/vendor-licenses.md +++ b/vendor-licenses.md @@ -74,6 +74,8 @@ Dart: [BSD-3-Clause License](https://github.com/dart-lang/sdk/blob/e6f4207adef69 DoppioJVM: [MIT License](https://github.com/plasma-umass/doppio/blob/9a8bcf705c74f91301a542abfe8b7175ca757259/LICENSE) +DuckDB-Wasm: [MIT License](https://github.com/duckdb/duckdb-wasm/blob/main/LICENSE) + dts-bundle: [MIT License](https://github.com/TypeStrong/dts-bundle/blob/2ca1591e890dc4276efc4bb0893367e6ff32a039/LICENSE-MIT) EasyQRCodeJS: [MIT License](https://github.com/ushelp/EasyQRCodeJS/blob/573373b110d706132a41cc8abb5b297016b80094/LICENSE)