mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 11:35:40 +01:00
Merge branch 'main' into mdx
This commit is contained in:
commit
ef3a98e0a2
18 changed files with 4711 additions and 579 deletions
23
CHANGELOG.md
23
CHANGELOG.md
|
|
@ -1,5 +1,28 @@
|
|||
# Monaco Editor Changelog
|
||||
|
||||
## [0.37.1]
|
||||
|
||||
- Fixes Inline Completions feature
|
||||
|
||||
## [0.37.0]
|
||||
|
||||
- New `registerLinkOpener` API
|
||||
- New `onLanguageEncountered` event for when a language is encountered during tokenization.
|
||||
- Updated TypeScript to 5.0
|
||||
- New required field `canFormatMultipleRanges` on `DocumentRangeFormattingEditProvider`
|
||||
- Bugfixes
|
||||
|
||||
Contributions to `monaco-editor`:
|
||||
|
||||
- [@danboo (Dan Boorstein)](https://github.com/danboo): add perl module (.pm) extension [PR #3258](https://github.com/microsoft/monaco-editor/pull/3258)
|
||||
- [@miloush (Jan Kučera)](https://github.com/miloush): Include .xsd and .xslt as an XML extension [PR #3866](https://github.com/microsoft/monaco-editor/pull/3866)
|
||||
- [@nnnnoel (Noel Kim (김민혁))](https://github.com/nnnnoel): Add CommonJS, ESM extension for TS [PR #3264](https://github.com/microsoft/monaco-editor/pull/3264)
|
||||
- [@PmcFizz (Fizz)](https://github.com/PmcFizz): opt example [PR #3726](https://github.com/microsoft/monaco-editor/pull/3726)
|
||||
- [@tamayika](https://github.com/tamayika)
|
||||
- Fix playground samples type errors and add CI test [PR #3722](https://github.com/microsoft/monaco-editor/pull/3722)
|
||||
- Add custom keybinding example [PR #3848](https://github.com/microsoft/monaco-editor/pull/3848)
|
||||
- [@yuri1969 (yuri)](https://github.com/yuri1969): Various YAML improvements [PR #3864](https://github.com/microsoft/monaco-editor/pull/3864)
|
||||
|
||||
## [0.36.1]
|
||||
|
||||
- Marks unneeded dependencies as dev dependencies.
|
||||
|
|
|
|||
520
package-lock.json
generated
520
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "monaco-editor",
|
||||
"version": "0.36.1",
|
||||
"version": "0.37.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "monaco-editor",
|
||||
"version": "0.36.1",
|
||||
"version": "0.37.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
|
|
@ -25,10 +25,10 @@
|
|||
"jsdom": "^19.0.0",
|
||||
"jsonc-parser": "^3.0.0",
|
||||
"mocha": "^9.2.0",
|
||||
"monaco-editor-core": "^0.36.0-dev.20230224",
|
||||
"monaco-editor-core": "^0.37.0-dev.20230403",
|
||||
"parcel": "^2.7.0",
|
||||
"pin-github-action": "^1.8.0",
|
||||
"playwright": "^1.18.1",
|
||||
"playwright": "^1.32.2",
|
||||
"prettier": "^2.5.1",
|
||||
"pretty-quick": "^3.1.3",
|
||||
"requirejs": "^2.3.6",
|
||||
|
|
@ -1842,16 +1842,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/yauzl": {
|
||||
"version": "2.9.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
|
||||
"integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript/vfs": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz",
|
||||
|
|
@ -2360,15 +2350,6 @@
|
|||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-crc32": {
|
||||
"version": "0.2.13",
|
||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
|
|
@ -2578,15 +2559,6 @@
|
|||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
|
||||
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
|
|
@ -3828,26 +3800,6 @@
|
|||
"url": "https://github.com/sindresorhus/execa?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/extract-zip": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
|
||||
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.1.1",
|
||||
"get-stream": "^5.1.0",
|
||||
"yauzl": "^2.10.0"
|
||||
},
|
||||
"bin": {
|
||||
"extract-zip": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.17.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@types/yauzl": "^2.9.1"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
|
|
@ -3866,15 +3818,6 @@
|
|||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fd-slicer": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
||||
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"pend": "~1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/file-loader": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
|
||||
|
|
@ -4414,12 +4357,6 @@
|
|||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/ip": {
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
|
||||
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
|
|
@ -4563,12 +4500,6 @@
|
|||
"node": ">= 10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jpeg-js": {
|
||||
"version": "0.4.4",
|
||||
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
|
||||
"integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
|
@ -5010,18 +4941,6 @@
|
|||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mime": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
||||
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"mime": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.51.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
|
||||
|
|
@ -5170,9 +5089,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/monaco-editor-core": {
|
||||
"version": "0.36.0-dev.20230224",
|
||||
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.36.0-dev.20230224.tgz",
|
||||
"integrity": "sha512-ubH2YoU86gNvO/lG4Un62ZGCwmzJXrMZFUw6VfwuFYgWAKflCZXHssrQKVsr0NwwyEJIn3Z4pURlo2ja3xAfIg==",
|
||||
"version": "0.37.0-dev.20230403",
|
||||
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.37.0-dev.20230403.tgz",
|
||||
"integrity": "sha512-p77v5G3WNBSSCLY8ORkNkP5XmAOQj7QwxkyzyILj+sWFbw3/1B9SIead0QS368FHV7JKCZ8/LR5T5ccBUZJlJg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mri": {
|
||||
|
|
@ -5608,12 +5527,6 @@
|
|||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/pend": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
|
|
@ -5667,79 +5580,31 @@
|
|||
}
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.18.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.18.1.tgz",
|
||||
"integrity": "sha512-8EaX9EtbtAoMq5tnzIsoA3b/V86V/6Mq2skuOU4qEw+5OVxs1lwesDwmjy/RVU1Qfx5UuwSQzhp45wyH22oa+A==",
|
||||
"version": "1.32.2",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.32.2.tgz",
|
||||
"integrity": "sha512-jHVnXJke0PXpuPszKtk9y1zZSlzO5+2a+aockT/AND0oeXx46FiJEFrafthurglLygVZA+1gEbtUM1C7qtTV+Q==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"playwright-core": "=1.18.1"
|
||||
"playwright-core": "1.32.2"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright/node_modules/playwright-core": {
|
||||
"version": "1.18.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz",
|
||||
"integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==",
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.32.2",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.32.2.tgz",
|
||||
"integrity": "sha512-zD7aonO+07kOTthsrCR3YCVnDcqSHIJpdFUtZEMOb6//1Rc7/6mZDRdw+nlzcQiQltOOsiqI3rrSyn/SlyjnJQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"commander": "^8.2.0",
|
||||
"debug": "^4.1.1",
|
||||
"extract-zip": "^2.0.1",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"jpeg-js": "^0.4.2",
|
||||
"mime": "^2.4.6",
|
||||
"pngjs": "^5.0.0",
|
||||
"progress": "^2.0.3",
|
||||
"proper-lockfile": "^4.1.1",
|
||||
"proxy-from-env": "^1.1.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"socks-proxy-agent": "^6.1.0",
|
||||
"stack-utils": "^2.0.3",
|
||||
"ws": "^7.4.6",
|
||||
"yauzl": "^2.10.0",
|
||||
"yazl": "^2.5.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright/node_modules/ws": {
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/pngjs": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
|
||||
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/portfinder": {
|
||||
|
|
@ -6049,32 +5914,6 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/proper-lockfile": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
|
||||
"integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
"retry": "^0.12.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/psl": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||
|
|
@ -6223,30 +6062,6 @@
|
|||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
}
|
||||
},
|
||||
"node_modules/rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"glob": "^7.1.3"
|
||||
},
|
||||
"bin": {
|
||||
"rimraf": "bin.js"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "2.79.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
|
||||
|
|
@ -6406,44 +6221,6 @@
|
|||
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
|
||||
"integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ip": "^1.1.5",
|
||||
"smart-buffer": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks-proxy-agent": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz",
|
||||
"integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"agent-base": "^6.0.2",
|
||||
"debug": "^4.3.1",
|
||||
"socks": "^2.6.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
|
@ -6479,27 +6256,6 @@
|
|||
"deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/stack-utils": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
|
||||
"integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"escape-string-regexp": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/stack-utils/node_modules/escape-string-regexp": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
|
||||
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
|
|
@ -7428,25 +7184,6 @@
|
|||
"yaserver": "bin/yaserver"
|
||||
}
|
||||
},
|
||||
"node_modules/yauzl": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
||||
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"buffer-crc32": "~0.2.3",
|
||||
"fd-slicer": "~1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/yazl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
|
||||
"integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"buffer-crc32": "~0.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
|
|
@ -8719,16 +8456,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/yauzl": {
|
||||
"version": "2.9.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
|
||||
"integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@typescript/vfs": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz",
|
||||
|
|
@ -9160,12 +8887,6 @@
|
|||
"update-browserslist-db": "^1.0.9"
|
||||
}
|
||||
},
|
||||
"buffer-crc32": {
|
||||
"version": "0.2.13",
|
||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
||||
"dev": true
|
||||
},
|
||||
"buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
|
|
@ -9314,12 +9035,6 @@
|
|||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
|
||||
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
|
||||
"dev": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
|
|
@ -10048,18 +9763,6 @@
|
|||
"strip-final-newline": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"extract-zip": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
|
||||
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/yauzl": "^2.9.1",
|
||||
"debug": "^4.1.1",
|
||||
"get-stream": "^5.1.0",
|
||||
"yauzl": "^2.10.0"
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
|
|
@ -10078,15 +9781,6 @@
|
|||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||
"dev": true
|
||||
},
|
||||
"fd-slicer": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
||||
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pend": "~1.2.0"
|
||||
}
|
||||
},
|
||||
"file-loader": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
|
||||
|
|
@ -10432,12 +10126,6 @@
|
|||
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
|
||||
"dev": true
|
||||
},
|
||||
"ip": {
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
|
||||
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
|
||||
"dev": true
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
|
|
@ -10542,12 +10230,6 @@
|
|||
"supports-color": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"jpeg-js": {
|
||||
"version": "0.4.4",
|
||||
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
|
||||
"integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
|
||||
"dev": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
|
@ -10825,12 +10507,6 @@
|
|||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true
|
||||
},
|
||||
"mime": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
||||
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
|
||||
"dev": true
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.51.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
|
||||
|
|
@ -10943,9 +10619,9 @@
|
|||
}
|
||||
},
|
||||
"monaco-editor-core": {
|
||||
"version": "0.36.0-dev.20230224",
|
||||
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.36.0-dev.20230224.tgz",
|
||||
"integrity": "sha512-ubH2YoU86gNvO/lG4Un62ZGCwmzJXrMZFUw6VfwuFYgWAKflCZXHssrQKVsr0NwwyEJIn3Z4pURlo2ja3xAfIg==",
|
||||
"version": "0.37.0-dev.20230403",
|
||||
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.37.0-dev.20230403.tgz",
|
||||
"integrity": "sha512-p77v5G3WNBSSCLY8ORkNkP5XmAOQj7QwxkyzyILj+sWFbw3/1B9SIead0QS368FHV7JKCZ8/LR5T5ccBUZJlJg==",
|
||||
"dev": true
|
||||
},
|
||||
"mri": {
|
||||
|
|
@ -11270,12 +10946,6 @@
|
|||
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"pend": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
|
||||
"dev": true
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
|
|
@ -11316,51 +10986,18 @@
|
|||
}
|
||||
},
|
||||
"playwright": {
|
||||
"version": "1.18.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.18.1.tgz",
|
||||
"integrity": "sha512-8EaX9EtbtAoMq5tnzIsoA3b/V86V/6Mq2skuOU4qEw+5OVxs1lwesDwmjy/RVU1Qfx5UuwSQzhp45wyH22oa+A==",
|
||||
"version": "1.32.2",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.32.2.tgz",
|
||||
"integrity": "sha512-jHVnXJke0PXpuPszKtk9y1zZSlzO5+2a+aockT/AND0oeXx46FiJEFrafthurglLygVZA+1gEbtUM1C7qtTV+Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"playwright-core": "=1.18.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"playwright-core": {
|
||||
"version": "1.18.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz",
|
||||
"integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "^8.2.0",
|
||||
"debug": "^4.1.1",
|
||||
"extract-zip": "^2.0.1",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"jpeg-js": "^0.4.2",
|
||||
"mime": "^2.4.6",
|
||||
"pngjs": "^5.0.0",
|
||||
"progress": "^2.0.3",
|
||||
"proper-lockfile": "^4.1.1",
|
||||
"proxy-from-env": "^1.1.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"socks-proxy-agent": "^6.1.0",
|
||||
"stack-utils": "^2.0.3",
|
||||
"ws": "^7.4.6",
|
||||
"yauzl": "^2.10.0",
|
||||
"yazl": "^2.5.1"
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
}
|
||||
"playwright-core": "1.32.2"
|
||||
}
|
||||
},
|
||||
"pngjs": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
|
||||
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
|
||||
"playwright-core": {
|
||||
"version": "1.32.2",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.32.2.tgz",
|
||||
"integrity": "sha512-zD7aonO+07kOTthsrCR3YCVnDcqSHIJpdFUtZEMOb6//1Rc7/6mZDRdw+nlzcQiQltOOsiqI3rrSyn/SlyjnJQ==",
|
||||
"dev": true
|
||||
},
|
||||
"portfinder": {
|
||||
|
|
@ -11579,29 +11216,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||
"dev": true
|
||||
},
|
||||
"proper-lockfile": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
|
||||
"integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
"retry": "^0.12.0",
|
||||
"signal-exit": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"dev": true
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||
|
|
@ -11713,21 +11327,6 @@
|
|||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
},
|
||||
"retry": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
|
||||
"dev": true
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"rollup": {
|
||||
"version": "2.79.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
|
||||
|
|
@ -11836,33 +11435,6 @@
|
|||
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
|
||||
"dev": true
|
||||
},
|
||||
"smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"dev": true
|
||||
},
|
||||
"socks": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
|
||||
"integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ip": "^1.1.5",
|
||||
"smart-buffer": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"socks-proxy-agent": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz",
|
||||
"integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"agent-base": "^6.0.2",
|
||||
"debug": "^4.3.1",
|
||||
"socks": "^2.6.1"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
|
@ -11891,23 +11463,6 @@
|
|||
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
|
||||
"dev": true
|
||||
},
|
||||
"stack-utils": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
|
||||
"integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"escape-string-regexp": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"escape-string-regexp": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
|
||||
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
|
|
@ -12545,25 +12100,6 @@
|
|||
"integrity": "sha512-98Vj4sgqB1fLcpf2wK7h3dFCaabISHU9CXZHaAx3QLkvTTCD31MzMcNbw5V5jZFBK7ffkFqfWig6B20KQt4wtA==",
|
||||
"dev": true
|
||||
},
|
||||
"yauzl": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
||||
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-crc32": "~0.2.3",
|
||||
"fd-slicer": "~1.1.0"
|
||||
}
|
||||
},
|
||||
"yazl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
|
||||
"integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-crc32": "~0.2.3"
|
||||
}
|
||||
},
|
||||
"yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "monaco-editor",
|
||||
"version": "0.36.1",
|
||||
"vscodeRef": "07d120e10a4d3ac790e65b8a6dc85195546df664",
|
||||
"version": "0.37.1",
|
||||
"vscodeRef": "8f74fbfd1f2d8f6268a42df131726b218aafe511",
|
||||
"private": true,
|
||||
"description": "A browser based code editor",
|
||||
"homepage": "https://github.com/microsoft/monaco-editor",
|
||||
|
|
@ -52,10 +52,10 @@
|
|||
"jsdom": "^19.0.0",
|
||||
"jsonc-parser": "^3.0.0",
|
||||
"mocha": "^9.2.0",
|
||||
"monaco-editor-core": "^0.36.0-dev.20230224",
|
||||
"monaco-editor-core": "^0.37.0-dev.20230403",
|
||||
"parcel": "^2.7.0",
|
||||
"pin-github-action": "^1.8.0",
|
||||
"playwright": "^1.18.1",
|
||||
"playwright": "^1.32.2",
|
||||
"prettier": "^2.5.1",
|
||||
"pretty-quick": "^3.1.3",
|
||||
"requirejs": "^2.3.6",
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ export function registerLanguage(def: ILang): void {
|
|||
return mod.language;
|
||||
}
|
||||
});
|
||||
languages.onLanguage(languageId, async () => {
|
||||
languages.onLanguageEncountered(languageId, async () => {
|
||||
const mod = await lazyLanguageLoader.load();
|
||||
languages.setLanguageConfiguration(languageId, mod.conf);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -80,5 +80,6 @@ import './tcl/tcl.contribution';
|
|||
import './twig/twig.contribution';
|
||||
import './typescript/typescript.contribution';
|
||||
import './vb/vb.contribution';
|
||||
import './wgsl/wgsl.contribution';
|
||||
import './xml/xml.contribution';
|
||||
import './yaml/yaml.contribution';
|
||||
|
|
|
|||
24
src/basic-languages/wgsl/wgsl.contribution.ts
Normal file
24
src/basic-languages/wgsl/wgsl.contribution.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { registerLanguage } from '../_.contribution';
|
||||
|
||||
declare var AMD: any;
|
||||
declare var require: any;
|
||||
|
||||
registerLanguage({
|
||||
id: 'wgsl',
|
||||
extensions: ['.wgsl'],
|
||||
aliases: ['WebGPU Shading Language', 'WGSL', 'wgsl'],
|
||||
loader: () => {
|
||||
if (AMD) {
|
||||
return new Promise((resolve, reject) => {
|
||||
require(['vs/basic-languages/wgsl/wgsl'], resolve, reject);
|
||||
});
|
||||
} else {
|
||||
return import('./wgsl');
|
||||
}
|
||||
}
|
||||
});
|
||||
3915
src/basic-languages/wgsl/wgsl.test.ts
Normal file
3915
src/basic-languages/wgsl/wgsl.test.ts
Normal file
File diff suppressed because it is too large
Load diff
487
src/basic-languages/wgsl/wgsl.ts
Normal file
487
src/basic-languages/wgsl/wgsl.ts
Normal file
|
|
@ -0,0 +1,487 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation, Google LLC. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type { languages } from '../../fillers/monaco-editor-core';
|
||||
|
||||
export const conf: languages.LanguageConfiguration = {
|
||||
comments: {
|
||||
lineComment: '//',
|
||||
blockComment: ['/*', '*/']
|
||||
},
|
||||
brackets: [
|
||||
['{', '}'],
|
||||
['[', ']'],
|
||||
['(', ')']
|
||||
],
|
||||
autoClosingPairs: [
|
||||
{ open: '[', close: ']' },
|
||||
{ open: '{', close: '}' },
|
||||
{ open: '(', close: ')' }
|
||||
],
|
||||
surroundingPairs: [
|
||||
{ open: '{', close: '}' },
|
||||
{ open: '[', close: ']' },
|
||||
{ open: '(', close: ')' }
|
||||
]
|
||||
};
|
||||
|
||||
// Returns a list of empty strings, from a possibly multi-line string,
|
||||
// stripping blanks and line endings. Emulates Perls 'qw' function.
|
||||
function qw(str: string): string[] {
|
||||
let result: string[] = [];
|
||||
const words = str.split(/\t+|\r+|\n+| +/);
|
||||
for (let i = 0; i < words.length; ++i) {
|
||||
if (words[i].length > 0) {
|
||||
result.push(words[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
const atoms = qw('true false');
|
||||
|
||||
const keywords = qw(`
|
||||
alias
|
||||
break
|
||||
case
|
||||
const
|
||||
const_assert
|
||||
continue
|
||||
continuing
|
||||
default
|
||||
diagnostic
|
||||
discard
|
||||
else
|
||||
enable
|
||||
fn
|
||||
for
|
||||
if
|
||||
let
|
||||
loop
|
||||
override
|
||||
requires
|
||||
return
|
||||
struct
|
||||
switch
|
||||
var
|
||||
while
|
||||
`);
|
||||
|
||||
const reserved = qw(`
|
||||
NULL
|
||||
Self
|
||||
abstract
|
||||
active
|
||||
alignas
|
||||
alignof
|
||||
as
|
||||
asm
|
||||
asm_fragment
|
||||
async
|
||||
attribute
|
||||
auto
|
||||
await
|
||||
become
|
||||
binding_array
|
||||
cast
|
||||
catch
|
||||
class
|
||||
co_await
|
||||
co_return
|
||||
co_yield
|
||||
coherent
|
||||
column_major
|
||||
common
|
||||
compile
|
||||
compile_fragment
|
||||
concept
|
||||
const_cast
|
||||
consteval
|
||||
constexpr
|
||||
constinit
|
||||
crate
|
||||
debugger
|
||||
decltype
|
||||
delete
|
||||
demote
|
||||
demote_to_helper
|
||||
do
|
||||
dynamic_cast
|
||||
enum
|
||||
explicit
|
||||
export
|
||||
extends
|
||||
extern
|
||||
external
|
||||
fallthrough
|
||||
filter
|
||||
final
|
||||
finally
|
||||
friend
|
||||
from
|
||||
fxgroup
|
||||
get
|
||||
goto
|
||||
groupshared
|
||||
highp
|
||||
impl
|
||||
implements
|
||||
import
|
||||
inline
|
||||
instanceof
|
||||
interface
|
||||
layout
|
||||
lowp
|
||||
macro
|
||||
macro_rules
|
||||
match
|
||||
mediump
|
||||
meta
|
||||
mod
|
||||
module
|
||||
move
|
||||
mut
|
||||
mutable
|
||||
namespace
|
||||
new
|
||||
nil
|
||||
noexcept
|
||||
noinline
|
||||
nointerpolation
|
||||
noperspective
|
||||
null
|
||||
nullptr
|
||||
of
|
||||
operator
|
||||
package
|
||||
packoffset
|
||||
partition
|
||||
pass
|
||||
patch
|
||||
pixelfragment
|
||||
precise
|
||||
precision
|
||||
premerge
|
||||
priv
|
||||
protected
|
||||
pub
|
||||
public
|
||||
readonly
|
||||
ref
|
||||
regardless
|
||||
register
|
||||
reinterpret_cast
|
||||
require
|
||||
resource
|
||||
restrict
|
||||
self
|
||||
set
|
||||
shared
|
||||
sizeof
|
||||
smooth
|
||||
snorm
|
||||
static
|
||||
static_assert
|
||||
static_cast
|
||||
std
|
||||
subroutine
|
||||
super
|
||||
target
|
||||
template
|
||||
this
|
||||
thread_local
|
||||
throw
|
||||
trait
|
||||
try
|
||||
type
|
||||
typedef
|
||||
typeid
|
||||
typename
|
||||
typeof
|
||||
union
|
||||
unless
|
||||
unorm
|
||||
unsafe
|
||||
unsized
|
||||
use
|
||||
using
|
||||
varying
|
||||
virtual
|
||||
volatile
|
||||
wgsl
|
||||
where
|
||||
with
|
||||
writeonly
|
||||
yield
|
||||
`);
|
||||
|
||||
const predeclared_enums = qw(`
|
||||
read write read_write
|
||||
function private workgroup uniform storage
|
||||
perspective linear flat
|
||||
center centroid sample
|
||||
vertex_index instance_index position front_facing frag_depth
|
||||
local_invocation_id local_invocation_index
|
||||
global_invocation_id workgroup_id num_workgroups
|
||||
sample_index sample_mask
|
||||
rgba8unorm
|
||||
rgba8snorm
|
||||
rgba8uint
|
||||
rgba8sint
|
||||
rgba16uint
|
||||
rgba16sint
|
||||
rgba16float
|
||||
r32uint
|
||||
r32sint
|
||||
r32float
|
||||
rg32uint
|
||||
rg32sint
|
||||
rg32float
|
||||
rgba32uint
|
||||
rgba32sint
|
||||
rgba32float
|
||||
bgra8unorm
|
||||
`);
|
||||
|
||||
const predeclared_types = qw(`
|
||||
bool
|
||||
f16
|
||||
f32
|
||||
i32
|
||||
sampler sampler_comparison
|
||||
texture_depth_2d
|
||||
texture_depth_2d_array
|
||||
texture_depth_cube
|
||||
texture_depth_cube_array
|
||||
texture_depth_multisampled_2d
|
||||
texture_external
|
||||
texture_external
|
||||
u32
|
||||
`);
|
||||
|
||||
const predeclared_type_generators = qw(`
|
||||
array
|
||||
atomic
|
||||
mat2x2
|
||||
mat2x3
|
||||
mat2x4
|
||||
mat3x2
|
||||
mat3x3
|
||||
mat3x4
|
||||
mat4x2
|
||||
mat4x3
|
||||
mat4x4
|
||||
ptr
|
||||
texture_1d
|
||||
texture_2d
|
||||
texture_2d_array
|
||||
texture_3d
|
||||
texture_cube
|
||||
texture_cube_array
|
||||
texture_multisampled_2d
|
||||
texture_storage_1d
|
||||
texture_storage_2d
|
||||
texture_storage_2d_array
|
||||
texture_storage_3d
|
||||
vec2
|
||||
vec3
|
||||
vec4
|
||||
`);
|
||||
|
||||
const predeclared_type_aliases = qw(`
|
||||
vec2i vec3i vec4i
|
||||
vec2u vec3u vec4u
|
||||
vec2f vec3f vec4f
|
||||
vec2h vec3h vec4h
|
||||
mat2x2f mat2x3f mat2x4f
|
||||
mat3x2f mat3x3f mat3x4f
|
||||
mat4x2f mat4x3f mat4x4f
|
||||
mat2x2h mat2x3h mat2x4h
|
||||
mat3x2h mat3x3h mat3x4h
|
||||
mat4x2h mat4x3h mat4x4h
|
||||
`);
|
||||
|
||||
const predeclared_intrinsics = qw(`
|
||||
bitcast all any select arrayLength abs acos acosh asin asinh atan atanh atan2
|
||||
ceil clamp cos cosh countLeadingZeros countOneBits countTrailingZeros cross
|
||||
degrees determinant distance dot exp exp2 extractBits faceForward firstLeadingBit
|
||||
firstTrailingBit floor fma fract frexp inverseBits inverseSqrt ldexp length
|
||||
log log2 max min mix modf normalize pow quantizeToF16 radians reflect refract
|
||||
reverseBits round saturate sign sin sinh smoothstep sqrt step tan tanh transpose
|
||||
trunc dpdx dpdxCoarse dpdxFine dpdy dpdyCoarse dpdyFine fwidth fwidthCoarse fwidthFine
|
||||
textureDimensions textureGather textureGatherCompare textureLoad textureNumLayers
|
||||
textureNumLevels textureNumSamples textureSample textureSampleBias textureSampleCompare
|
||||
textureSampleCompareLevel textureSampleGrad textureSampleLevel textureSampleBaseClampToEdge
|
||||
textureStore atomicLoad atomicStore atomicAdd atomicSub atomicMax atomicMin
|
||||
atomicAnd atomicOr atomicXor atomicExchange atomicCompareExchangeWeak pack4x8snorm
|
||||
pack4x8unorm pack2x16snorm pack2x16unorm pack2x16float unpack4x8snorm unpack4x8unorm
|
||||
unpack2x16snorm unpack2x16unorm unpack2x16float storageBarrier workgroupBarrier
|
||||
workgroupUniformLoad
|
||||
`);
|
||||
|
||||
// https://gpuweb.github.io/gpuweb/wgsl/#syntactic-token
|
||||
// But skip bracket-like things, comma, colon, semicolon, underscore, at.
|
||||
const operators = qw(`
|
||||
&
|
||||
&&
|
||||
->
|
||||
/
|
||||
=
|
||||
==
|
||||
!=
|
||||
>
|
||||
>=
|
||||
<
|
||||
<=
|
||||
%
|
||||
-
|
||||
--
|
||||
+
|
||||
++
|
||||
|
|
||||
||
|
||||
*
|
||||
<<
|
||||
>>
|
||||
+=
|
||||
-=
|
||||
*=
|
||||
/=
|
||||
%=
|
||||
&=
|
||||
|=
|
||||
^=
|
||||
>>=
|
||||
<<=
|
||||
`);
|
||||
|
||||
const directive_re = /enable|requires|diagnostic/;
|
||||
|
||||
const ident_re = /[_\p{XID_Start}]\p{XID_Continue}*/u;
|
||||
|
||||
const predefined_token = 'variable.predefined';
|
||||
|
||||
export const language = <languages.IMonarchLanguage>{
|
||||
tokenPostfix: '.wgsl',
|
||||
defaultToken: 'invalid',
|
||||
unicode: true,
|
||||
|
||||
atoms,
|
||||
keywords,
|
||||
reserved,
|
||||
predeclared_enums,
|
||||
predeclared_types,
|
||||
predeclared_type_generators,
|
||||
predeclared_type_aliases,
|
||||
predeclared_intrinsics,
|
||||
operators,
|
||||
|
||||
symbols: /[!%&*+\-\.\/:;<=>^|_~]+/,
|
||||
|
||||
tokenizer: {
|
||||
root: [
|
||||
[directive_re, 'keyword', '@directive'],
|
||||
[
|
||||
// Identifier-like things, but also include '_'
|
||||
ident_re,
|
||||
{
|
||||
cases: {
|
||||
'@atoms': predefined_token,
|
||||
'@keywords': 'keyword',
|
||||
'@reserved': 'invalid',
|
||||
'@predeclared_enums': predefined_token,
|
||||
'@predeclared_types': predefined_token,
|
||||
'@predeclared_type_generators': predefined_token,
|
||||
'@predeclared_type_aliases': predefined_token,
|
||||
'@predeclared_intrinsics': predefined_token,
|
||||
'@default': 'identifier'
|
||||
}
|
||||
}
|
||||
],
|
||||
{ include: '@commentOrSpace' },
|
||||
{ include: '@numbers' },
|
||||
|
||||
[/;:\./, 'delimiter'],
|
||||
[/,/, 'delimiter'], // Hack: Should be in previous rule
|
||||
[/[{}()\[\]]/, '@brackets'],
|
||||
['@', 'annotation', '@attribute'],
|
||||
[
|
||||
/@symbols/,
|
||||
{
|
||||
cases: {
|
||||
'@operators': 'operator',
|
||||
'@default': 'delimiter'
|
||||
}
|
||||
}
|
||||
],
|
||||
[/./, 'invalid']
|
||||
],
|
||||
|
||||
commentOrSpace: [
|
||||
[/\s+/, 'white'],
|
||||
[/\/\*/, 'comment', '@blockComment'],
|
||||
[/\/\/.*$/, 'comment']
|
||||
],
|
||||
|
||||
blockComment: [
|
||||
// Soak up uninteresting text: anything except * or /
|
||||
[/[^\/*]+/, 'comment'],
|
||||
// Recognize the start of a nested block comment.
|
||||
[/\/\*/, 'comment', '@push'],
|
||||
// Recognize the end of a nested block comment.
|
||||
[/\*\//, 'comment', '@pop'],
|
||||
// Recognize insignificant * and /
|
||||
[/[\/*]/, 'comment']
|
||||
],
|
||||
|
||||
attribute: [
|
||||
// For things like '@fragment' both '@' and 'fragment'
|
||||
// are marked as annotations. This should work even if
|
||||
// there are spaces or comments between the two tokens.
|
||||
{ include: '@commentOrSpace' },
|
||||
[/\w+/, 'annotation', '@pop']
|
||||
],
|
||||
|
||||
directive: [
|
||||
// For things like 'enable f16;', 'enable' maps to 'meta'
|
||||
// and 'f16' maps to 'meta.tag'.
|
||||
{ include: '@commentOrSpace' },
|
||||
[/[()]/, '@brackets'],
|
||||
[/,/, 'delimiter'],
|
||||
[ident_re, 'meta.content'],
|
||||
[/;/, 'delimiter', '@pop']
|
||||
],
|
||||
|
||||
numbers: [
|
||||
// Decimal float literals
|
||||
// https://www.w3.org/TR/WGSL/#syntax-decimal_float_literal
|
||||
// 0, with type-specifying suffix.
|
||||
[/0[fh]/, 'number.float'],
|
||||
// Other decimal integer, with type-specifying suffix.
|
||||
[/[1-9][0-9]*[fh]/, 'number.float'],
|
||||
// Has decimal point, at least one digit after decimal.
|
||||
[/[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[fh]?/, 'number.float'],
|
||||
// Has decimal point, at least one digit before decimal.
|
||||
[/[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?[fh]?/, 'number.float'],
|
||||
// Has at least one digit, and has an exponent.
|
||||
[/[0-9]+[eE][+-]?[0-9]+[fh]?/, 'number.float'],
|
||||
|
||||
// Hex float literals
|
||||
// https://www.w3.org/TR/WGSL/#syntax-hex_float_literal
|
||||
[/0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+(?:[pP][+-]?[0-9]+[fh]?)?/, 'number.hex'],
|
||||
[/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*(?:[pP][+-]?[0-9]+[fh]?)?/, 'number.hex'],
|
||||
[/0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+[fh]?/, 'number.hex'],
|
||||
|
||||
// Hexadecimal integer literals
|
||||
// https://www.w3.org/TR/WGSL/#syntax-hex_int_literal
|
||||
[/0[xX][0-9a-fA-F]+[iu]?/, 'number.hex'],
|
||||
|
||||
// Decimal integer literals
|
||||
// https://www.w3.org/TR/WGSL/#syntax-decimal_int_literal
|
||||
// We need two rules here because 01 is not valid.
|
||||
[/[1-9][0-9]*[iu]?/, 'number'],
|
||||
[/0[iu]?/, 'number'] // Must match last
|
||||
]
|
||||
}
|
||||
};
|
||||
|
|
@ -12,6 +12,7 @@ registerLanguage({
|
|||
id: 'xml',
|
||||
extensions: [
|
||||
'.xml',
|
||||
'.xsd',
|
||||
'.dtd',
|
||||
'.ascx',
|
||||
'.csproj',
|
||||
|
|
@ -25,6 +26,7 @@ registerLanguage({
|
|||
'.svg',
|
||||
'.svgz',
|
||||
'.opf',
|
||||
'.xslt',
|
||||
'.xsl'
|
||||
],
|
||||
firstLine: '(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)',
|
||||
|
|
|
|||
|
|
@ -803,6 +803,8 @@ export class DocumentFormattingEditProvider<T extends ILanguageWorkerWithFormat>
|
|||
export class DocumentRangeFormattingEditProvider<T extends ILanguageWorkerWithFormat>
|
||||
implements languages.DocumentRangeFormattingEditProvider
|
||||
{
|
||||
readonly canFormatMultipleRanges = false;
|
||||
|
||||
constructor(private _worker: WorkerAccessor<T>) {}
|
||||
|
||||
public provideDocumentRangeFormattingEdits(
|
||||
|
|
|
|||
|
|
@ -989,6 +989,8 @@ export class FormatAdapter
|
|||
extends FormatHelper
|
||||
implements languages.DocumentRangeFormattingEditProvider
|
||||
{
|
||||
readonly canFormatMultipleRanges = false;
|
||||
|
||||
public async provideDocumentRangeFormattingEdits(
|
||||
model: editor.ITextModel,
|
||||
range: Range,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ import { exit } from "process";
|
|||
"yarn",
|
||||
[
|
||||
"tsc",
|
||||
"--target",
|
||||
"es6",
|
||||
"--noEmit",
|
||||
"--allowJs",
|
||||
"--checkJs",
|
||||
|
|
|
|||
|
|
@ -21,12 +21,24 @@ export interface IMonacoSetup {
|
|||
monacoTypesUrl: string | undefined;
|
||||
}
|
||||
|
||||
let loadMonacoPromise: Promise<typeof monaco> | undefined;
|
||||
let loading = false;
|
||||
let resolve: (value: typeof monaco) => void;
|
||||
let reject: (error: unknown) => void;
|
||||
let loadMonacoPromise = new Promise<typeof monaco>((res, rej) => {
|
||||
resolve = res;
|
||||
reject = rej;
|
||||
});
|
||||
|
||||
export async function waitForLoadedMonaco(): Promise<typeof monaco> {
|
||||
return loadMonacoPromise;
|
||||
}
|
||||
|
||||
export async function loadMonaco(
|
||||
setup: IMonacoSetup = prodMonacoSetup
|
||||
): Promise<typeof monaco> {
|
||||
if (!loadMonacoPromise) {
|
||||
loadMonacoPromise = _loadMonaco(setup);
|
||||
if (!loading) {
|
||||
loading = true;
|
||||
_loadMonaco(setup).then(resolve, reject);
|
||||
}
|
||||
return loadMonacoPromise;
|
||||
}
|
||||
|
|
|
|||
48
website/src/website/data/home-samples/sample.wgsl.txt
Normal file
48
website/src/website/data/home-samples/sample.wgsl.txt
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
// A fragment shader which lights textured geometry with point lights.
|
||||
// Taken from the introduction of the WebGPU Shading Lnaguage Specification
|
||||
// https://w3.org/TR/WGSL
|
||||
|
||||
// Lights from a storage buffer binding.
|
||||
struct PointLight {
|
||||
position : vec3f,
|
||||
color : vec3f,
|
||||
}
|
||||
|
||||
struct LightStorage {
|
||||
pointCount : u32,
|
||||
point : array<PointLight>,
|
||||
}
|
||||
@group(0) @binding(0) var<storage> lights : LightStorage;
|
||||
|
||||
// Texture and sampler.
|
||||
@group(1) @binding(0) var baseColorSampler : sampler;
|
||||
@group(1) @binding(1) var baseColorTexture : texture_2d<f32>;
|
||||
|
||||
// Function arguments are values from from vertex shader.
|
||||
@fragment
|
||||
fn fragmentMain(@location(0) worldPos : vec3f,
|
||||
@location(1) normal : vec3f,
|
||||
@location(2) uv : vec2f) -> @location(0) vec4f {
|
||||
// Sample the base color of the surface from a texture.
|
||||
let baseColor = textureSample(baseColorTexture, baseColorSampler, uv);
|
||||
|
||||
let N = normalize(normal);
|
||||
var surfaceColor = vec3f(0);
|
||||
|
||||
// Loop over the scene point lights.
|
||||
for (var i = 0u; i < lights.pointCount; i++) {
|
||||
let worldToLight = lights.point[i].position - worldPos;
|
||||
let dist = length(worldToLight);
|
||||
let dir = normalize(worldToLight);
|
||||
|
||||
// Determine the contribution of this light to the surface color.
|
||||
let radiance = lights.point[i].color * (1 / pow(dist, 2));
|
||||
let nDotL = max(dot(N, dir), 0);
|
||||
|
||||
// Accumulate light contribution to the surface color.
|
||||
surfaceColor += baseColor.rgb * radiance * nDotL;
|
||||
}
|
||||
|
||||
// Return the accumulated surface color.
|
||||
return vec4(surfaceColor, baseColor.a);
|
||||
}
|
||||
|
|
@ -11,10 +11,12 @@ customElements.define(
|
|||
const shadowRoot = this.attachShadow({ mode: "open" });
|
||||
|
||||
// Copy over editor styles
|
||||
const style = document.querySelector(
|
||||
"link[rel='stylesheet'][data-name='vs/editor/editor.main']"
|
||||
const styles = document.querySelectorAll(
|
||||
"link[rel='stylesheet'][data-name^='vs/']"
|
||||
);
|
||||
shadowRoot.appendChild(style.cloneNode(true));
|
||||
for (const style of styles) {
|
||||
shadowRoot.appendChild(style.cloneNode(true));
|
||||
}
|
||||
|
||||
const template = /** @type HTMLTemplateElement */ (
|
||||
document.getElementById("editor-template")
|
||||
|
|
|
|||
|
|
@ -12,7 +12,11 @@ import {
|
|||
reaction,
|
||||
runInAction,
|
||||
} from "mobx";
|
||||
import { IMonacoSetup, loadMonaco } from "../../../monaco-loader";
|
||||
import {
|
||||
IMonacoSetup,
|
||||
loadMonaco,
|
||||
waitForLoadedMonaco,
|
||||
} from "../../../monaco-loader";
|
||||
import { IPlaygroundProject, IPreviewState } from "../../../shared";
|
||||
import { monacoEditorVersion } from "../../monacoEditorVersion";
|
||||
import { Debouncer } from "../../utils/Debouncer";
|
||||
|
|
@ -56,12 +60,23 @@ export class PlaygroundModel {
|
|||
|
||||
public readonly serializer = new StateUrlSerializer(this);
|
||||
|
||||
reload(): void {
|
||||
public reload(): void {
|
||||
this.reloadKey++;
|
||||
}
|
||||
|
||||
private readonly _previewHandlers = new Set<IPreviewHandler>();
|
||||
|
||||
private _wasEverNonFullScreen = false;
|
||||
public get wasEverNonFullScreen() {
|
||||
if (this._wasEverNonFullScreen) {
|
||||
return true;
|
||||
}
|
||||
if (!this.settings.previewFullScreen) {
|
||||
this._wasEverNonFullScreen = true;
|
||||
}
|
||||
return this._wasEverNonFullScreen;
|
||||
}
|
||||
|
||||
@computed.struct
|
||||
get monacoSetup(): IMonacoSetup {
|
||||
const sourceOverride = this.serializer.sourceOverride;
|
||||
|
|
@ -125,14 +140,31 @@ export class PlaygroundModel {
|
|||
}
|
||||
}
|
||||
|
||||
private readonly debouncer = new Debouncer(250);
|
||||
private readonly debouncer = new Debouncer(700);
|
||||
|
||||
@observable
|
||||
public isDirty = false;
|
||||
|
||||
constructor() {
|
||||
let lastState = this.state;
|
||||
|
||||
this.dispose.track({
|
||||
dispose: reaction(
|
||||
() => ({ state: this.state }),
|
||||
({ state }) => {
|
||||
if (!this.settings.autoReload) {
|
||||
if (
|
||||
JSON.stringify(state.monacoSetup) ===
|
||||
JSON.stringify(lastState.monacoSetup) &&
|
||||
state.key === lastState.key
|
||||
) {
|
||||
this.isDirty = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.debouncer.run(() => {
|
||||
this.isDirty = false;
|
||||
lastState = state;
|
||||
for (const handler of this._previewHandlers) {
|
||||
handler.handlePreview(state);
|
||||
}
|
||||
|
|
@ -142,10 +174,10 @@ export class PlaygroundModel {
|
|||
),
|
||||
});
|
||||
|
||||
const observablePromise = new ObservablePromise(loadMonaco());
|
||||
const observablePromise = new ObservablePromise(waitForLoadedMonaco());
|
||||
let disposable: Disposable | undefined = undefined;
|
||||
|
||||
loadMonaco().then((m) => {
|
||||
waitForLoadedMonaco().then((m) => {
|
||||
const options =
|
||||
monaco.languages.typescript.javascriptDefaults.getCompilerOptions();
|
||||
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions(
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { PlaygroundModel } from "./PlaygroundModel";
|
|||
import { Preview } from "./Preview";
|
||||
import { SettingsDialog } from "./SettingsDialog";
|
||||
import { Button, Col, Row, Stack } from "../../components/bootstrap";
|
||||
import { ButtonGroup } from "react-bootstrap";
|
||||
import { ButtonGroup, FormCheck } from "react-bootstrap";
|
||||
|
||||
@hotComponent(module)
|
||||
@observer
|
||||
|
|
@ -37,88 +37,122 @@ export class PlaygroundPageContent extends React.Component<
|
|||
className="h-100 g-2"
|
||||
style={{ flexWrap: "wrap-reverse" }}
|
||||
>
|
||||
<Col
|
||||
md
|
||||
className={
|
||||
model.settings.previewFullScreen ? "d-none" : ""
|
||||
}
|
||||
>
|
||||
<Vertical>
|
||||
<div style={{ flex: 1 }}>
|
||||
<LabeledEditor
|
||||
label="JavaScript"
|
||||
titleBarItems={
|
||||
<div
|
||||
className="hstack"
|
||||
style={{ marginLeft: "auto" }}
|
||||
>
|
||||
<span
|
||||
style={{ marginRight: 8 }}
|
||||
{model.wasEverNonFullScreen && (
|
||||
<Col
|
||||
md
|
||||
className={
|
||||
model.settings.previewFullScreen
|
||||
? "d-none"
|
||||
: ""
|
||||
}
|
||||
>
|
||||
<Vertical>
|
||||
<div style={{ flex: 1 }}>
|
||||
<LabeledEditor
|
||||
label="JavaScript"
|
||||
titleBarItems={
|
||||
<div
|
||||
className="hstack"
|
||||
style={{
|
||||
marginLeft: "auto",
|
||||
}}
|
||||
>
|
||||
Example:
|
||||
</span>
|
||||
<Select<PlaygroundExample>
|
||||
values={getPlaygroundExamples().map(
|
||||
(e) => ({
|
||||
groupTitle:
|
||||
e.chapterTitle,
|
||||
items: e.examples,
|
||||
})
|
||||
)}
|
||||
value={ref(
|
||||
model,
|
||||
"selectedExample"
|
||||
)}
|
||||
getLabel={(i) => i.title}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<Editor
|
||||
language={"javascript"}
|
||||
value={ref(model, "js")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
<span
|
||||
style={{
|
||||
marginRight: 8,
|
||||
}}
|
||||
>
|
||||
Example:
|
||||
</span>
|
||||
<Select<PlaygroundExample>
|
||||
values={getPlaygroundExamples().map(
|
||||
(e) => ({
|
||||
groupTitle:
|
||||
e.chapterTitle,
|
||||
items: e.examples,
|
||||
})
|
||||
)}
|
||||
value={ref(
|
||||
model,
|
||||
"selectedExample"
|
||||
)}
|
||||
getLabel={(i) =>
|
||||
i.title
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<Editor
|
||||
language={"javascript"}
|
||||
value={ref(model, "js")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<LabeledEditor label="HTML">
|
||||
<Editor
|
||||
height={{
|
||||
kind: "dynamic",
|
||||
maxHeight: 200,
|
||||
}}
|
||||
language={"html"}
|
||||
value={ref(model, "html")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
<div>
|
||||
<LabeledEditor label="HTML">
|
||||
<Editor
|
||||
height={{
|
||||
kind: "dynamic",
|
||||
maxHeight: 200,
|
||||
}}
|
||||
language={"html"}
|
||||
value={ref(model, "html")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<LabeledEditor label="CSS">
|
||||
<Editor
|
||||
height={{
|
||||
kind: "dynamic",
|
||||
maxHeight: 200,
|
||||
}}
|
||||
language={"css"}
|
||||
value={ref(model, "css")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
</Vertical>
|
||||
</Col>
|
||||
<div>
|
||||
<LabeledEditor label="CSS">
|
||||
<Editor
|
||||
height={{
|
||||
kind: "dynamic",
|
||||
maxHeight: 200,
|
||||
}}
|
||||
language={"css"}
|
||||
value={ref(model, "css")}
|
||||
/>
|
||||
</LabeledEditor>
|
||||
</div>
|
||||
</Vertical>
|
||||
</Col>
|
||||
)}
|
||||
<Col md>
|
||||
<LabeledEditor
|
||||
label="Preview"
|
||||
titleBarItems={
|
||||
<div
|
||||
style={{ marginLeft: "auto" }}
|
||||
className="d-flex gap-2"
|
||||
className="d-flex gap-2 align-items-center"
|
||||
>
|
||||
{model.settings.previewFullScreen || (
|
||||
<FormCheck
|
||||
label="Auto-Reload"
|
||||
className="text-nowrap"
|
||||
checked={
|
||||
model.settings.autoReload
|
||||
}
|
||||
onChange={(e) => {
|
||||
model.settings.autoReload =
|
||||
e.target.checked;
|
||||
if (
|
||||
e.target.checked &&
|
||||
model.isDirty
|
||||
) {
|
||||
model.reload();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<Button
|
||||
type="button"
|
||||
className="btn btn-light settings bi-arrow-clockwise"
|
||||
className={
|
||||
"btn settings bi-arrow-clockwise " +
|
||||
(model.isDirty
|
||||
? "btn-primary"
|
||||
: "btn-light")
|
||||
}
|
||||
style={{
|
||||
fontSize: 20,
|
||||
padding: "0px 4px",
|
||||
|
|
|
|||
|
|
@ -33,6 +33,14 @@ export class SettingsModel {
|
|||
this.setSettings({ ...this._settings, previewFullScreen: value });
|
||||
}
|
||||
|
||||
get autoReload() {
|
||||
return this._settings.autoReload ?? true;
|
||||
}
|
||||
|
||||
set autoReload(value: boolean) {
|
||||
this.setSettings({ ...this._settings, autoReload: value });
|
||||
}
|
||||
|
||||
constructor() {
|
||||
const settingsStr = localStorage.getItem(this.settingsKey);
|
||||
if (settingsStr) {
|
||||
|
|
@ -70,6 +78,7 @@ export interface Settings {
|
|||
customConfig: JsonString<IMonacoSetup>;
|
||||
|
||||
previewFullScreen: boolean;
|
||||
autoReload: boolean | undefined;
|
||||
}
|
||||
|
||||
export type JsonString<T> = string;
|
||||
|
|
@ -167,6 +176,7 @@ export function getDefaultSettings(): Settings {
|
|||
loaderPathsConfig: "",
|
||||
}),
|
||||
previewFullScreen: false,
|
||||
autoReload: true,
|
||||
};
|
||||
return defaultSettings;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue