Skip to content

Commit 1539650

Browse files
committed
Merge branch 'release/0.2.1'
2 parents 1331e4a + 3a8ef8d commit 1539650

File tree

9 files changed

+76
-13
lines changed

9 files changed

+76
-13
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
## v0.2.1 - 2025.10.17
10+
11+
### Added
12+
13+
- Add support for auto-types in the script editor ([#37](https://github.com/studiometa/playground/pull/37), [0a3a495](https://github.com/studiometa/playground/commit/0a3a495))
14+
915
## v0.2.0 - 2025.10.16
1016

1117
### Added

package-lock.json

Lines changed: 21 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@studiometa/playground-root",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"description": "A packaged web development playground",
55
"type": "module",
66
"private": true,

packages/demo/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@studiometa/playground-demo",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"type": "module",
55
"private": true,
66
"scripts": {

packages/playground/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@studiometa/playground",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"type": "module",
55
"publishConfig": {
66
"access": "public"
@@ -65,7 +65,9 @@
6565
"fast-glob": "^3.3.2",
6666
"fflate": "^0.8.2",
6767
"monaco-editor": "^0.52.2",
68+
"monaco-editor-auto-typings": "0.4.6",
6869
"monaco-editor-webpack-plugin": "^7.1.0",
70+
"path-browserify": "1.0.1",
6971
"tailwindcss": "4.1.13",
7072
"webpack-virtual-modules": "^0.6.2"
7173
},

packages/playground/src/front/js/components/Editor.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Base } from '@studiometa/js-toolkit';
22
import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';
33
import { debounce } from '@studiometa/js-toolkit/utils';
44
import type { editor } from 'monaco-editor/esm/vs/editor/editor.api.js';
5-
import * as monaco from 'monaco-editor';
5+
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
66
import { emmetHTML, emmetCSS } from 'emmet-monaco-es';
77
import { themeIsDark, watchTheme } from '../store/index.js';
88

@@ -26,6 +26,13 @@ export default class Editor extends Base<EditorProps> {
2626
*/
2727
editor: editor.IStandaloneCodeEditor;
2828

29+
/**
30+
* Monaco.
31+
*/
32+
get monaco() {
33+
return monaco;
34+
}
35+
2936
/**
3037
* Language of the editor.
3138
*/
@@ -37,7 +44,7 @@ export default class Editor extends Base<EditorProps> {
3744
const { addJsAutocompletion } = await import('../utils/js/index.js');
3845
const value = await this.getInitialValue();
3946

40-
this.editor = monaco.editor.create(this.$el, {
47+
this.editor = this.monaco.editor.create(this.$el, {
4148
value,
4249
language: this.language,
4350
minimap: { enabled: false },
@@ -49,9 +56,9 @@ export default class Editor extends Base<EditorProps> {
4956
theme: (await themeIsDark()) ? 'vs-dark' : 'vs',
5057
});
5158

52-
const disposeHTML = emmetHTML(monaco, ['html']);
53-
const disposeCSS = emmetCSS(monaco, ['css']);
54-
addJsAutocompletion(monaco.languages);
59+
const disposeHTML = emmetHTML(this.monaco, ['html']);
60+
const disposeCSS = emmetCSS(this.monaco, ['css']);
61+
addJsAutocompletion(this.monaco.languages);
5562

5663
this.$on(
5764
'destroyed',

packages/playground/src/front/js/components/Iframe.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ ${html}
204204
const esbuild = await this.esbuild();
205205
const results = await esbuild.transform(newScript, {
206206
target: 'es2020',
207+
loader: 'ts',
207208
});
208209
this.script.remove();
209210
this.script = this.doc.createElement('script');

packages/playground/src/front/js/components/ScriptEditor.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1+
import { AutoTypings, LocalStorageCache, JsDelivrSourceResolver } from 'monaco-editor-auto-typings';
12
import { getScript, setScript } from '../store/index.js';
23
import Editor from './Editor.js';
34

45
export default class ScriptEditor extends Editor {
6+
/**
7+
* Autotyping instance.
8+
*/
9+
autoTypings: AutoTypings;
10+
511
get language(): string {
6-
return 'javascript';
12+
return 'typescript';
713
}
814

915
async getInitialValue() {
@@ -13,4 +19,18 @@ export default class ScriptEditor extends Editor {
1319
onContentChange({ args: [value] }) {
1420
setScript(value);
1521
}
22+
23+
async mounted() {
24+
await super.mounted();
25+
26+
this.autoTypings = await AutoTypings.create(this.editor, {
27+
sourceCache: new LocalStorageCache(),
28+
sourceResolver: new JsDelivrSourceResolver(),
29+
monaco: this.monaco,
30+
});
31+
}
32+
33+
destroyed() {
34+
this.autoTypings.dispose();
35+
}
1636
}

packages/playground/src/lib/presets/playground.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { resolve } from 'node:path';
2+
import { fileURLToPath } from 'node:url';
23
import type { PartialDeep } from 'type-fest';
34
import type { Preset } from '@studiometa/webpack-config';
45
import { prototyping } from '@studiometa/webpack-config-preset-prototyping';
@@ -116,6 +117,15 @@ export function playgroundPreset(options?: PartialDeep<PlaygroundPresetOptions>)
116117
if (!context.isDev) {
117118
await productionBuildPreset().handler(config, context);
118119
}
120+
121+
await context.extendWebpack(config, (webpackConfig) => {
122+
webpackConfig.resolve = {
123+
...webpackConfig.resolve,
124+
fallback: {
125+
path: fileURLToPath(import.meta.resolve('path-browserify')),
126+
},
127+
};
128+
});
119129
},
120130
};
121131
}

0 commit comments

Comments
 (0)