Skip to content

Commit

Permalink
Merge pull request #566 from live-codes/gleam-modules
Browse files Browse the repository at this point in the history
add rest of Gleam modules
  • Loading branch information
hatemhosny committed Apr 27, 2024
2 parents ca842ab + 582f6e6 commit b66c2f8
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 59 deletions.
12 changes: 7 additions & 5 deletions docs/docs/languages/gleam.md
Expand Up @@ -18,10 +18,12 @@ The compiled JavaScript code can be inspected in the [Compiled Code Viewer](../f
[Gleam's standard library](https://hexdocs.pm/gleam_stdlib/) in addition to the following packages are available for use and can be imported as usual with no additional configuration:

- [gleam/crypto](https://hexdocs.pm/gleam_crypto/)
- [gleam/erlang](https://hexdocs.pm/gleam_erlang/)
- [gleam/fetch](https://hexdocs.pm/gleam_fetch/)
- [gleam/http](https://hexdocs.pm/gleam_http/)
- [gleam/javascript](https://hexdocs.pm/gleam_javascript/)
- [gleam/json](https://hexdocs.pm/gleam_json/)
- [gleam/otp](https://hexdocs.pm/gleam_otp/)

Demo:

Expand Down Expand Up @@ -65,8 +67,8 @@ Example:
"gleam": {
"modules": {
"plinth/browser/document": {
"srcUrl": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.2.0/build/packages/plinth/src/plinth/browser/document.gleam",
"compiledUrl": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.2.0/build/dev/javascript/plinth/plinth/browser/document.mjs"
"srcUrl": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.3.0/build/packages/plinth/src/plinth/browser/document.gleam",
"compiledUrl": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.3.0/build/dev/javascript/plinth/plinth/browser/document.mjs"
}
}
}
Expand Down Expand Up @@ -108,7 +110,7 @@ Example:
**Example:**

The following script is hosted on this URL:
https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.2.0/demo/greet.js
https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.3.0/demo/greet.js

```js title="greet.js"
export const hello = (str) => `Hello, ${str}!`;
Expand All @@ -119,7 +121,7 @@ Use this in custom settings:
```json title="Custom Settings"
{
"imports": {
"my_pkg/greet.js": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.2.0/demo/greet.js"
"my_pkg/greet.js": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.3.0/demo/greet.js"
}
}
```
Expand Down Expand Up @@ -150,7 +152,7 @@ content: 'import gleam/io\n\n@external(javascript, "my_pkg/greet.js", "hello")\n
tools: { status: 'open'},
customSettings: {
"imports": {
"my_pkg/greet.js": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.2.0/demo/greet.js"
"my_pkg/greet.js": "https://cdn.jsdelivr.net/gh/live-codes/gleam-precompiled@v0.3.0/demo/greet.js"
}
}
}
Expand Down
69 changes: 69 additions & 0 deletions src/livecodes/languages/gleam/gleam-modules.ts
@@ -0,0 +1,69 @@
import { gleamBaseUrl } from '../../vendors';

const srcBaseUrl = gleamBaseUrl + 'build/packages/';

export interface Modules {
[key: string]: {
srcUrl?: string;
src?: string;
compiledUrl?: string;
};
}

export const modules: Modules = {
// gleam_stdlib
'gleam/bit_array': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bit_array.gleam' },
'gleam/bool': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bool.gleam' },
'gleam/bytes_builder': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bytes_builder.gleam' },
'gleam/dict': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/dict.gleam' },
'gleam/dynamic': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/dynamic.gleam' },
'gleam/float': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/float.gleam' },
'gleam/function': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/function.gleam' },
'gleam/int': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/int.gleam' },
'gleam/io': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/io.gleam' },
'gleam/iterator': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/iterator.gleam' },
'gleam/list': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/list.gleam' },
'gleam/option': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/option.gleam' },
'gleam/order': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/order.gleam' },
'gleam/pair': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/pair.gleam' },
'gleam/queue': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/queue.gleam' },
'gleam/regex': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/regex.gleam' },
'gleam/result': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/result.gleam' },
'gleam/set': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/set.gleam' },
'gleam/string': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/string.gleam' },
'gleam/string_builder': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/string_builder.gleam' },
'gleam/uri': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/uri.gleam' },
// extras
'gleam/crypto': { srcUrl: srcBaseUrl + 'gleam_crypto/src/gleam/crypto.gleam' },
'gleam/erlang': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang.gleam' },
'gleam/erlang/atom': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang/atom.gleam' },
'gleam/erlang/charlist': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang/charlist.gleam' },
'gleam/erlang/node': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang/node.gleam' },
'gleam/erlang/os': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang/os.gleam' },
'gleam/erlang/process': { srcUrl: srcBaseUrl + 'gleam_erlang/src/gleam/erlang/process.gleam' },
'gleam/fetch': { srcUrl: srcBaseUrl + 'gleam_fetch/src/gleam/fetch.gleam' },
'gleam/http': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http.gleam' },
'gleam/http/cookie': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/cookie.gleam' },
'gleam/http/request': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/request.gleam' },
'gleam/http/response': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/response.gleam' },
'gleam/http/service': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/service.gleam' },
'gleam/javascript': { srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript.gleam' },
'gleam/javascript/array': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/array.gleam',
},
'gleam/javascript/map': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/map.gleam',
},
'gleam/javascript/promise': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/promise.gleam',
},
'gleam/json': { srcUrl: srcBaseUrl + 'gleam_json/src/gleam/json.gleam' },
'gleam/otp/actor': { srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/actor.gleam' },
'gleam/otp/intensity_tracker': {
srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/intensity_tracker.gleam',
},
'gleam/otp/port': { srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/port.gleam' },
'gleam/otp/supervisor': { srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/supervisor.gleam' },
'gleam/otp/system': { srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/system.gleam' },
'gleam/otp/task': { srcUrl: srcBaseUrl + 'gleam_otp/src/gleam/otp/task.gleam' },
};
54 changes: 1 addition & 53 deletions src/livecodes/languages/gleam/lang-gleam-compiler.ts
Expand Up @@ -5,66 +5,14 @@
import type { CompilerFunction } from '../../models';
import { gleamBaseUrl } from '../../vendors';
import { getLanguageCustomSettings } from '../utils';
import { type Modules, modules } from './gleam-modules';

(self as any).createGleamCompiler = (): CompilerFunction => {
const compilerUrl = gleamBaseUrl + 'compiler/v1.1.0/gleam_wasm.js';
const srcBaseUrl = gleamBaseUrl + 'build/packages/';
const compiledBaseUrl = gleamBaseUrl + 'build/dev/javascript/';

let compiler: any;

interface Modules {
[key: string]: {
srcUrl?: string;
src?: string;
compiledUrl?: string;
};
}

const modules: Modules = {
// gleam_stdlib
'gleam/bit_array': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bit_array.gleam' },
'gleam/bool': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bool.gleam' },
'gleam/bytes_builder': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/bytes_builder.gleam' },
'gleam/dict': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/dict.gleam' },
'gleam/dynamic': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/dynamic.gleam' },
'gleam/float': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/float.gleam' },
'gleam/function': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/function.gleam' },
'gleam/int': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/int.gleam' },
'gleam/io': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/io.gleam' },
'gleam/iterator': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/iterator.gleam' },
'gleam/list': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/list.gleam' },
'gleam/option': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/option.gleam' },
'gleam/order': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/order.gleam' },
'gleam/pair': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/pair.gleam' },
'gleam/queue': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/queue.gleam' },
'gleam/regex': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/regex.gleam' },
'gleam/result': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/result.gleam' },
'gleam/set': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/set.gleam' },
'gleam/string': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/string.gleam' },
'gleam/string_builder': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/string_builder.gleam' },
'gleam/uri': { srcUrl: srcBaseUrl + 'gleam_stdlib/src/gleam/uri.gleam' },
// extras
'gleam/javascript': { srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript.gleam' },
'gleam/javascript/array': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/array.gleam',
},
'gleam/javascript/map': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/map.gleam',
},
'gleam/javascript/promise': {
srcUrl: srcBaseUrl + 'gleam_javascript/src/gleam/javascript/promise.gleam',
},
'gleam/json': { srcUrl: srcBaseUrl + 'gleam_json/src/gleam/json.gleam' },
'gleam/crypto': { srcUrl: srcBaseUrl + 'gleam_crypto/src/gleam/crypto.gleam' },
'gleam/fetch': { srcUrl: srcBaseUrl + 'gleam_fetch/src/gleam/fetch.gleam' },
'gleam/http': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http.gleam' },
'gleam/http/cookie': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/cookie.gleam' },
'gleam/http/request': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/request.gleam' },
'gleam/http/response': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/response.gleam' },
'gleam/http/service': { srcUrl: srcBaseUrl + 'gleam_http/src/gleam/http/service.gleam' },
};

async function initGleamCompiler() {
const wasm = await import(compilerUrl);
await wasm.default();
Expand Down
2 changes: 1 addition & 1 deletion src/livecodes/vendors.ts
Expand Up @@ -216,7 +216,7 @@ export const githubMarkdownCss = /* @__PURE__ */ getUrl(
'github-markdown-css@5.1.0/github-markdown.css',
);

export const gleamBaseUrl = /* @__PURE__ */ getUrl('gh:live-codes/gleam-precompiled@v0.2.0/');
export const gleamBaseUrl = /* @__PURE__ */ getUrl('gh:live-codes/gleam-precompiled@v0.3.0/');

export const go2jsBaseUrl = /* @__PURE__ */ getUrl('@live-codes/go2js@0.4.0/build/');

Expand Down

0 comments on commit b66c2f8

Please sign in to comment.