mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 20:26:16 -08:00
build(site): [SITE-07] reproduce Monaco CSS HTML and JSON workers
This commit is contained in:
1 parent
11296975f1
commit
0d3ddbf355
28 files changed
+3158
-10
No files matched your search
@@ -32,3 +32,4 @@ refactor/baselines/site-vendor/console-attribution/** -text whitespace=-trailing
|
||||
refactor/baselines/site-vendor/console-stackoverflow/** -text whitespace=-trailing-space,cr-at-eol
|
||||
refactor/baselines/site-vendor/monaco-typescript/** -text whitespace=-trailing-space,cr-at-eol
|
||||
docs/licenses/monaco-editor/typescript/** -text whitespace=-trailing-space,cr-at-eol
|
||||
refactor/baselines/site-vendor/monaco-languages/** -text whitespace=-trailing-space,cr-at-eol
|
||||
+2
-1
@@ -165,7 +165,8 @@
|
||||
"build:console": "node scripts/build-console.mjs",
|
||||
"check:console": "node scripts/build-console.mjs --check",
|
||||
"test:site-console": "node --test test/site-console.test.js",
|
||||
"verify:monaco-typescript-source": "node scripts/site-vendor/monaco/reproduce-typescript.ts"
|
||||
"verify:monaco-typescript-source": "node scripts/site-vendor/monaco/reproduce-typescript.ts",
|
||||
"verify:monaco-language-sources": "node scripts/site-vendor/monaco/reproduce-languages.ts"
|
||||
},
|
||||
"browserslist": "last 1 Chrome version",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -0,0 +1,956 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "SITE-07",
|
||||
"commit": "5a7ba61be909ae9e4889768a3453ebb0dec392e2",
|
||||
"scope": "Complete source-fragment and minified-output matching for CSS/HTML/JSON workers; not a full historical typecheck or embedded-license closure.",
|
||||
"archives": [
|
||||
{
|
||||
"name": "monaco-editor",
|
||||
"version": "0.30.1",
|
||||
"tarball": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.30.1.tgz",
|
||||
"integrity": "sha512-B/y4+b2O5G2gjuxIFtCE2EkM17R2NM7/3F8x0qcPsqy4V83bitJTIO4TIeZpYlzu/xy6INiY/+84BEm6+7Cmzg==",
|
||||
"sha256": "d7872ab742036036eca48cd54e43d751bede56742f0689bcf4049bcf701468c7"
|
||||
},
|
||||
{
|
||||
"name": "typescript",
|
||||
"version": "4.4.4",
|
||||
"tarball": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
|
||||
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
|
||||
"sha256": "7524841bbf63777fef1fe6e1a826026b1dd4849f54f5affa481502faab2cdb16"
|
||||
},
|
||||
{
|
||||
"name": "terser",
|
||||
"version": "5.9.0",
|
||||
"tarball": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz",
|
||||
"integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==",
|
||||
"sha256": "2ca0d9c4731b6ebd3b86ed1a7b735f685f98636ee5a067ae9e27e83246069619"
|
||||
},
|
||||
{
|
||||
"name": "source-map",
|
||||
"version": "0.7.3",
|
||||
"tarball": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"sha256": "ad69b787ba774733c3e4f0eb20403df7b1fa466252d453533dbcc6a5ad15833e"
|
||||
},
|
||||
{
|
||||
"name": "jsonc-parser",
|
||||
"version": "3.0.0",
|
||||
"tarball": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
|
||||
"integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
|
||||
"sha256": "807c53e781c6c6181165f6214db5f6892742041338d9891ce3c335cf3bc25da8"
|
||||
},
|
||||
{
|
||||
"name": "vscode-css-languageservice",
|
||||
"version": "5.1.8",
|
||||
"tarball": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.1.8.tgz",
|
||||
"integrity": "sha512-Si1sMykS8U/p8LYgLGPCfZD1YFT0AtvUJQp9XJGw64DZWhtwYo28G2l64USLS9ge4ZPMZpwdpOK7PfbVKfgiiA==",
|
||||
"sha256": "d527257e471c1d9e60d0171c44c90bca38fac3ae195c2b11fcd32318c931f6f9"
|
||||
},
|
||||
{
|
||||
"name": "vscode-html-languageservice",
|
||||
"version": "4.1.1",
|
||||
"tarball": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.1.1.tgz",
|
||||
"integrity": "sha512-rrDyCiOgMwOPgchpPGAeLzjYVVEW/Ror2/a1BWUEI3S9+NQhA9vj4SQkzmH6g2Bq9S9SV0OQeadD+xphOf1N3w==",
|
||||
"sha256": "e2e3a8552a2090ea6f86e3acedaba629544bc2ea81c18d7cb30dcb2dab6bb17e"
|
||||
},
|
||||
{
|
||||
"name": "vscode-json-languageservice",
|
||||
"version": "4.1.9",
|
||||
"tarball": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.9.tgz",
|
||||
"integrity": "sha512-kxNHitUy2fCxmP6vAp0SRLrUSuecUYzzxlC+85cC3jJlFHWmvtCJOzikC+kcUnIdls9fQSB8n0yHs8Sl6taxJw==",
|
||||
"sha256": "7ad177f8bd4db88fb12f335f50a33cff3a6cc0ee54cbf8057a6fc3ef42f391ca"
|
||||
},
|
||||
{
|
||||
"name": "vscode-languageserver-textdocument",
|
||||
"version": "1.0.2",
|
||||
"tarball": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.2.tgz",
|
||||
"integrity": "sha512-T7uPC18+f8mYE4lbVZwb3OSmvwTZm3cuFhrdx9Bn2l11lmp3SvSuSVjy2JtvrghzjAo4G6Trqny2m9XGnFnWVA==",
|
||||
"sha256": "2dac6ed99ac87c7205f446ca1e38912d0d3f8da702346509bd056239358f3bda"
|
||||
},
|
||||
{
|
||||
"name": "vscode-languageserver-types",
|
||||
"version": "3.16.0",
|
||||
"tarball": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
|
||||
"integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
|
||||
"sha256": "eb934ea5eda6fd6b5d21ae8706922be1179501c30350260e07998e76c6946a2c"
|
||||
},
|
||||
{
|
||||
"name": "vscode-uri",
|
||||
"version": "3.0.2",
|
||||
"tarball": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz",
|
||||
"integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==",
|
||||
"sha256": "e1e26ccda45c167ec7c01d74f4e0fef5a97b96c791f0a006d9a1eaf1b9d55223"
|
||||
}
|
||||
],
|
||||
"remotes": [
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-typescript/package-lock.json.txt",
|
||||
"sha256": "84c66bfe8ae95b2226ca289279133999356e64137db7ba001817737fa1ac8cf8",
|
||||
"gitBlobSha": "9f647e9fc82150a5d06a9c02dc781d2dbe902ed6",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/package-lock.json?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-css-scripts-bundle.js.txt",
|
||||
"sha256": "2a9dbfbd62b6106835ac69d930e4e1024000196154d0fd98e7a42bfab9977751",
|
||||
"gitBlobSha": "49709bc5efb3f5e81c2797fa771b0576f86c71fb",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-css/scripts/bundle.js?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-fillers-vscode-nls.ts.txt",
|
||||
"sha256": "5c1791a7852fece6124a82df100f45caf5e00ce1a9025f0884d1ebb017222534",
|
||||
"gitBlobSha": "38f7b334931d9a88e19f18153ce4a24f92ac0ffd",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-css/src/fillers/vscode-nls.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-tsconfig.json.txt",
|
||||
"sha256": "d5739d74d37ae0ff0d8b55f19b1116433bae9b0f8a81c8b410bd587e11bc7694",
|
||||
"gitBlobSha": "707f714dd2869a2e1fe3c5a679cf1eb116f0f542",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-css/src/tsconfig.json?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-cssWorker.ts.txt",
|
||||
"sha256": "bba953a5a241cbe197f77a48188aff704cb3c63698db467aa4bcfb60a20621ed",
|
||||
"gitBlobSha": "45628043913f3bed8b6e3720f1fe50de666b0dbe",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-css/src/cssWorker.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-html-scripts-bundle.js.txt",
|
||||
"sha256": "9a101e8926d384a880bdfc13ae72559f72d1b4e8b1d7dd755a6a999ca6383718",
|
||||
"gitBlobSha": "d5932edf6307028d76be68e76fcaf08ec2768a58",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-html/scripts/bundle.js?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-fillers-vscode-nls.ts.txt",
|
||||
"sha256": "5c1791a7852fece6124a82df100f45caf5e00ce1a9025f0884d1ebb017222534",
|
||||
"gitBlobSha": "38f7b334931d9a88e19f18153ce4a24f92ac0ffd",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-html/src/fillers/vscode-nls.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-tsconfig.json.txt",
|
||||
"sha256": "d5739d74d37ae0ff0d8b55f19b1116433bae9b0f8a81c8b410bd587e11bc7694",
|
||||
"gitBlobSha": "707f714dd2869a2e1fe3c5a679cf1eb116f0f542",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-html/src/tsconfig.json?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-htmlWorker.ts.txt",
|
||||
"sha256": "83627006efb72fd7a407a5f7c60d04eb8b9eca00b13bd4a4f1aa5e29d63c02a7",
|
||||
"gitBlobSha": "cf5cb6e5fdbde35659a80e017a36539437e48650",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-html/src/htmlWorker.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-json-scripts-bundle.js.txt",
|
||||
"sha256": "1326211da917b321808ae29987c666226028ad276af3e1d376cd7d0ed3902fd6",
|
||||
"gitBlobSha": "cb54926f4a3fb00d16824d2be6c6e51b3a6524ec",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-json/scripts/bundle.js?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-fillers-vscode-nls.ts.txt",
|
||||
"sha256": "5c1791a7852fece6124a82df100f45caf5e00ce1a9025f0884d1ebb017222534",
|
||||
"gitBlobSha": "38f7b334931d9a88e19f18153ce4a24f92ac0ffd",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-json/src/fillers/vscode-nls.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-tsconfig.json.txt",
|
||||
"sha256": "d5739d74d37ae0ff0d8b55f19b1116433bae9b0f8a81c8b410bd587e11bc7694",
|
||||
"gitBlobSha": "707f714dd2869a2e1fe3c5a679cf1eb116f0f542",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-json/src/tsconfig.json?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
},
|
||||
{
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-jsonWorker.ts.txt",
|
||||
"sha256": "6e31ea103fee114dd20382f373da50bcbd38fc79ec41c711434e4245180a4817",
|
||||
"gitBlobSha": "781b58e26822e64534d312e3be74b850a6c3ecae",
|
||||
"apiUrl": "https://api.github.com/repos/microsoft/monaco-editor/contents/monaco-json/src/jsonWorker.ts?ref=5a7ba61be909ae9e4889768a3453ebb0dec392e2"
|
||||
}
|
||||
],
|
||||
"compilerMembers": [
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/typescript.js",
|
||||
"sha256": "69fde5346b9468255c32d8d0bff32842445822528b25da1a323ec1c076979384"
|
||||
},
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/lib.es5.d.ts",
|
||||
"sha256": "aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db"
|
||||
},
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/lib.dom.d.ts",
|
||||
"sha256": "e54c8715a4954cfdc66cd69489f2b725c09ebf37492dbd91cff0a1688b1159e8"
|
||||
},
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/lib.es2015.collection.d.ts",
|
||||
"sha256": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c"
|
||||
},
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/lib.es2015.promise.d.ts",
|
||||
"sha256": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c"
|
||||
},
|
||||
{
|
||||
"archive": "typescript-4.4.4",
|
||||
"member": "package/lib/lib.es2015.iterable.d.ts",
|
||||
"sha256": "2c8c5ee58f30e7c944e04ab1fb5506fdbb4dd507c9efa6972cf4b91cec90c503"
|
||||
},
|
||||
{
|
||||
"archive": "terser-5.9.0",
|
||||
"member": "package/dist/bundle.min.js",
|
||||
"sha256": "b8b44743a529c5bd1cf8d6676f040c3c9bed29c7c114e5a26dde5e0fb2125838"
|
||||
}
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/cssScanner",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/cssScanner.js",
|
||||
"sha256": "9a3e5c2184bbba40ddc07db9ca98a2f19829f757b5dea3eaecc8dbbb1c5f6f96"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/utils/strings",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/utils/strings.js",
|
||||
"sha256": "748ec977a08777cc6505d5284f3990620e240d4546cb4fb36fd55f9090e61154"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/cssNodes",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/cssNodes.js",
|
||||
"sha256": "64575246c66daa56db99500cce3e2f3a7a67c20876c713ed45c3ba44bd831930"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/cssErrors",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/cssErrors.js",
|
||||
"sha256": "60ab648e896944405fa3f599b2d6146e21894eac2d82fbd80d6f00d40bf1ef55"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/entry",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/entry.js",
|
||||
"sha256": "8310c2e12cbdaa3cb7ae15805dcf4059b0db7e7fc251f2eb73dbdbfcfa77adef"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/colors",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/colors.js",
|
||||
"sha256": "3ed3fb3c267e0883aa55cc580dbe3c7503a549fe537edf0bc14d1e04d6324eca"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/builtinData",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/builtinData.js",
|
||||
"sha256": "74879dea4179de802db9319846482b6ae57dad1cfc7a964442dea19fef80b603"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/facts",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/facts.js",
|
||||
"sha256": "ddda6c80e26f28f0ef89bac8da92211d9d7d02bde900d86a3755dc58a0ee044e"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/utils/objects",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/utils/objects.js",
|
||||
"sha256": "19cc9d4d2130327dbd0c4551bd0e220897ef5492f9cd8970e826217d97e3f837"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/cssParser",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/cssParser.js",
|
||||
"sha256": "adc62e779d870315f584a329e7c4785277c3310ef78b04a61e8634c81fb028d9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/utils/arrays",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/utils/arrays.js",
|
||||
"sha256": "66ca208f853159481a2b08e895ecbf03649c956d28c9332c09a0b85cf7704a52"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/cssSymbolScope",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/cssSymbolScope.js",
|
||||
"sha256": "12308880e5b364e704ef33485ce3d3f25209a79f1f44bf8077fe2b28205182fb"
|
||||
},
|
||||
{
|
||||
"id": "vscode-languageserver-types/main",
|
||||
"archive": "vscode-languageserver-types-3.16.0",
|
||||
"member": "package/lib/umd/main.js",
|
||||
"sha256": "bc54d0255c6527858d4b2a6c9fd366dd5bdc08d627aa6a81ebb52b27fe1bb17d"
|
||||
},
|
||||
{
|
||||
"id": "vscode-languageserver-textdocument/main",
|
||||
"archive": "vscode-languageserver-textdocument-1.0.2",
|
||||
"member": "package/lib/umd/main.js",
|
||||
"sha256": "618d67aa720519285678550ff320e2ebb432486bc231e4b308eea176c714bcdc"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/cssLanguageTypes",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/cssLanguageTypes.js",
|
||||
"sha256": "20048c4d17d1c63f32c2105f22258c079b19a48a18e2d2f6432a8277910c5f9b"
|
||||
},
|
||||
{
|
||||
"id": "vscode-uri/index",
|
||||
"archive": "vscode-uri-3.0.2",
|
||||
"member": "package/lib/umd/index.js",
|
||||
"sha256": "db68af3be3a6ef95333900f2c0eaa304ed14d25cf1963699503922ddf266c058"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/utils/resources",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/utils/resources.js",
|
||||
"sha256": "9a66fabd2621ec3419657864057d2b1cd32ef219fb8d969510c4d39f472c7e1a"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/pathCompletion",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/pathCompletion.js",
|
||||
"sha256": "77b2dbcb2c0f25bf2146ed63c5afdee297f2d53c4003a6022fd8cac67902e9ff"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssCompletion",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssCompletion.js",
|
||||
"sha256": "7fe9f7fad6e6e71c9ee6b754eda716894403c5e7335f6411168b49003b84e04b"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/selectorPrinting",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/selectorPrinting.js",
|
||||
"sha256": "03d88007d099f5adad4d5b6f3b620d45c924f3cdf5760bfbe22ce6742093d8c7"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssHover",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssHover.js",
|
||||
"sha256": "f75b206433ad126c753226a031ff232ffcc0b642567dea71d47e5a9de1dada66"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssNavigation",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssNavigation.js",
|
||||
"sha256": "fe188264fa79527ec2acf8cd5d8e120841cee5650ed00157df87d0367977991d"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/lintRules",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/lintRules.js",
|
||||
"sha256": "9e59715f9792793a15d34f3827b332504782b790798a7abdc61b51f17a2dcff9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssCodeActions",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssCodeActions.js",
|
||||
"sha256": "b6c8720895da4450238997b738e3b643e8f5479a4146e719fd60ecc715ae71ee"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/lintUtil",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/lintUtil.js",
|
||||
"sha256": "316aec7ef76258da65e13f9f86eb4778027bb35133ed84370fd8afacf8c7cefe"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/lint",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/lint.js",
|
||||
"sha256": "0150ff9e418bd6d288f0ed9b588da9bc4e1f96dd79c18b8b93a7a719627b834b"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssValidation",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssValidation.js",
|
||||
"sha256": "388b4731d0f06d428edc481c29dad408967dd9d89ac4548b70698721ec7f1bc9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/scssScanner",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/scssScanner.js",
|
||||
"sha256": "d2a14f27d408de907ce8e3cca02048358c743ed75573ed9c4e771894086e77e9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/scssErrors",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/scssErrors.js",
|
||||
"sha256": "5aa357ae803184c63ba446254811ce548f69043147bfd2ada3c0405400c253b9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/scssParser",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/scssParser.js",
|
||||
"sha256": "e9efcc8541c5010088d396d4f1e29d8bfe61c974a1f0f416513a44a77014b15c"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/scssCompletion",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/scssCompletion.js",
|
||||
"sha256": "7219ba9e076f7c30733854fa466feb5db1d1c6bc998db2a7b305924824549db1"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/lessScanner",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/lessScanner.js",
|
||||
"sha256": "74853819ef4d00a32f50e126349f23c984218fffcd54c61babf45a0f401d66a0"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/parser/lessParser",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/parser/lessParser.js",
|
||||
"sha256": "95196b16ff95f8cc4cf911fdbf8e1dc011d0f62c2e12b47486a74549ebe0f429"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/lessCompletion",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/lessCompletion.js",
|
||||
"sha256": "52512f0a1dc0676267fb46f1c650b59b9c7bf86f6f6d5d8a06c91723404dd2be"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssFolding",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssFolding.js",
|
||||
"sha256": "bb2794e309541086adb0f083472030143f2843bd9ae9af9a4c0f81d2c43c8305"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/data/webCustomData",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/data/webCustomData.js",
|
||||
"sha256": "9fae0a6b3f7b86242e7ca13f0cbc333c2e16f93fc5ca532d134655a9835221b6"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/dataProvider",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/dataProvider.js",
|
||||
"sha256": "3df94e0f896e1616e536f49325cdb0ef51a628d31117586453046ad5ede320aa"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/languageFacts/dataManager",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/languageFacts/dataManager.js",
|
||||
"sha256": "033adccfea25862b3ab4e658e2da4affebb611600bdd7b23fc6c8c855c2ed677"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/cssSelectionRange",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/cssSelectionRange.js",
|
||||
"sha256": "c1fcac66818e4fbfdc718925b626502970d3de80672d9673c1ff5dbacc153911"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/services/scssNavigation",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/services/scssNavigation.js",
|
||||
"sha256": "747974c4216cc9d36fceb5833bbaebb5d2828242ae06dbe3f1b257a6b4c52434"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice/cssLanguageService",
|
||||
"archive": "vscode-css-languageservice-5.1.8",
|
||||
"member": "package/lib/umd/cssLanguageService.js",
|
||||
"sha256": "5c9e8608e05c59af83be5c4a7ea5ca8d915b6f90a6219cd86bd0107f53adbe29"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/htmlLanguageTypes",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/htmlLanguageTypes.js",
|
||||
"sha256": "982e3a2ab00e4430eebacc273928ebff48625da72f39809ee7c633ebf27caa4e"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/parser/htmlScanner",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/parser/htmlScanner.js",
|
||||
"sha256": "bdf450d86dd0179d009ce7a9fe74908b908ee27ee352ccd1439f66ace2f99f9a"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/utils/arrays",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/utils/arrays.js",
|
||||
"sha256": "3299dfaa289f7acb4948c934e3c52067539d258573113cbf1a9d93c9bfd8b0a5"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/languageFacts/fact",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/languageFacts/fact.js",
|
||||
"sha256": "f32bb00d0985d8e932733ed665d6d9aefed2411f93b975bad5ca92216fa45112"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/parser/htmlParser",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/parser/htmlParser.js",
|
||||
"sha256": "5f3e15e450e27e2a5bbf84dfc1f78bd75605ee767bc038a3cfe76e6b261c22a9"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/parser/htmlEntities",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/parser/htmlEntities.js",
|
||||
"sha256": "31922ec4c2c2e4ea94291fe57fec7c6a451f5bd724ce6d8147cf41a99257bcae"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/utils/strings",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/utils/strings.js",
|
||||
"sha256": "9488b095ef9365d62ca2aba172caa0099e12ad77ae2e3ce392750103e6d93073"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/utils/object",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/utils/object.js",
|
||||
"sha256": "94781228184ce67e6d8d0bbe8d0c82856be525e4541c5f4e5bacdd087f25fe1c"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/utils/markup",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/utils/markup.js",
|
||||
"sha256": "61452127d0d143f3ce39547cea25b6e9a37db9d5692473a78d68018443f995e1"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/languageFacts/dataProvider",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/languageFacts/dataProvider.js",
|
||||
"sha256": "3156f81a9da25a94e2502c9bb718a022f95ec7ff0dd36d874459183fbcb5bce2"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/pathCompletion",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/pathCompletion.js",
|
||||
"sha256": "98960ad43356fda078d923c57c20cfab041b9d1c10d02e35810ad8be1e589150"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlCompletion",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlCompletion.js",
|
||||
"sha256": "009c43c6ceac4802df7e943b6a6871adee62d81a829b1af2e78cc0887d519be3"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlHover",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlHover.js",
|
||||
"sha256": "6d3a706feec6b36675333b4768d45ce606497bb23adb38face9c8f1567022477"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/beautify/beautify",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/beautify/beautify.js",
|
||||
"sha256": "07c96eca8fa5d2897a1ada7d5a166b7aa647d581b3bf50cb2e3e4cba8d9574b7"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/beautify/beautify-css",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/beautify/beautify-css.js",
|
||||
"sha256": "2fecfef68c27cd406a74b0b45ffae7394d0ee5b3fc8f342297b4a4029fa08723"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/beautify/beautify-html",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/beautify/beautify-html.js",
|
||||
"sha256": "4a66107fa529ebe572351eb3f9c5ce89179cb3c9de43430a12a447a423cea092"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlFormatter",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlFormatter.js",
|
||||
"sha256": "5353913e5123247fbf42d7cd4b43d68f0efa6a67961a592266d04425dafb2254"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlLinks",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlLinks.js",
|
||||
"sha256": "dddb002d97986746bef35b63fb3d7c0f8421023671a4680d04dc7cdf649f5288"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlHighlighting",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlHighlighting.js",
|
||||
"sha256": "3fb3d112e834f2c9a9998fcbff20d05a8f5572240fd6d9b462ca8c4e1b967224"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlSymbolsProvider",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlSymbolsProvider.js",
|
||||
"sha256": "fbf9b4cbb5e61a8983ece43c71536d71266da85a3af77721795abcac48443330"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlRename",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlRename.js",
|
||||
"sha256": "f4300d94a8e7c711c1ec57d10fb603432ca49fa194ffd5d0a937f5ed10af33f1"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlMatchingTagPosition",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlMatchingTagPosition.js",
|
||||
"sha256": "538d4a8eb183bbf53bb38a02726f00258cf66ef6db7c328f1fc163bbce78b720"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlLinkedEditing",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlLinkedEditing.js",
|
||||
"sha256": "0fefcf02a603244607d49ee7b85e0ec81a7289aab96d5382335ecc29913c6497"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlFolding",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlFolding.js",
|
||||
"sha256": "9dcce482530eaf5504cc96b56b7da3161f3cd7d0e5f06a3db2c37b3b3ba79331"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/services/htmlSelectionRange",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/services/htmlSelectionRange.js",
|
||||
"sha256": "5d8c77bec64f2ccc6c83032adfead3e69a77ebe97b9a561213f617ad34255372"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/languageFacts/data/webCustomData",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/languageFacts/data/webCustomData.js",
|
||||
"sha256": "9bba4331433943077574ebcc0aa0c36321d6097e48afe1a5288858e0c19f0a96"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/languageFacts/dataManager",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/languageFacts/dataManager.js",
|
||||
"sha256": "3ce95d3d6ecea80bdac5016ef34985f466d19b539145de1935c8fc11972d181a"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice/htmlLanguageService",
|
||||
"archive": "vscode-html-languageservice-4.1.1",
|
||||
"member": "package/lib/umd/htmlLanguageService.js",
|
||||
"sha256": "dc6df6148384f49065b0d089052c80d75c09eccbaaec3b315bd4352af32d5884"
|
||||
},
|
||||
{
|
||||
"id": "jsonc-parser/impl/scanner",
|
||||
"archive": "jsonc-parser-3.0.0",
|
||||
"member": "package/lib/umd/impl/scanner.js",
|
||||
"sha256": "1de9d507a6fc3cbe314fe77d4129db5d0d717b453d6340dc822869f6be6f01ef"
|
||||
},
|
||||
{
|
||||
"id": "jsonc-parser/impl/format",
|
||||
"archive": "jsonc-parser-3.0.0",
|
||||
"member": "package/lib/umd/impl/format.js",
|
||||
"sha256": "0a6e9addcaba963b19bdc28a9e563affe7ecfa9d710bbbf88a798e134b8c2d9e"
|
||||
},
|
||||
{
|
||||
"id": "jsonc-parser/impl/parser",
|
||||
"archive": "jsonc-parser-3.0.0",
|
||||
"member": "package/lib/umd/impl/parser.js",
|
||||
"sha256": "0bcb61b4cddc09380ae45a8bb74d97162a46733dd87bada5590579f91abc2a62"
|
||||
},
|
||||
{
|
||||
"id": "jsonc-parser/impl/edit",
|
||||
"archive": "jsonc-parser-3.0.0",
|
||||
"member": "package/lib/umd/impl/edit.js",
|
||||
"sha256": "be5cbec07265803c812a888d8aeaf18f69c77c827a120486ef38515d6225008d"
|
||||
},
|
||||
{
|
||||
"id": "jsonc-parser/main",
|
||||
"archive": "jsonc-parser-3.0.0",
|
||||
"member": "package/lib/umd/main.js",
|
||||
"sha256": "09e425ed64c68688277ed7ef8e0b627700134e4e2290aa36b175530b658245aa"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/utils/objects",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/utils/objects.js",
|
||||
"sha256": "a0e8ca194e3b1d4382979d3d9afa6d1c39706a427a8e7175dd5ba52934ee002d"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/utils/strings",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/utils/strings.js",
|
||||
"sha256": "30a235d6a7fbbb695d1dc1934efab7b5d9d54e5cd3c4b2c0ed391e0f3b29f655"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/jsonLanguageTypes",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/jsonLanguageTypes.js",
|
||||
"sha256": "8f3ec73ca0bbfddd228647025ffb70977ad3e6117ed9631c52da17c250abfd16"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/parser/jsonParser",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/parser/jsonParser.js",
|
||||
"sha256": "a5de026273bd8733a0e71ce3e728811e83963cd72cbd9a9144bd50b490574982"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/utils/json",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/utils/json.js",
|
||||
"sha256": "6b4dc8f5b5a750c3777b86385032860cdec81e7d3f60e2ac8d9701d81269ba11"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonCompletion",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonCompletion.js",
|
||||
"sha256": "576eb397054b08294b67a4cf1aa106834995b58dcf32919c4634a6c23c340907"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonHover",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonHover.js",
|
||||
"sha256": "428f5942d222674f80c6844cefb2612d023730c584b227a0a8fa30f541d88903"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/utils/glob",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/utils/glob.js",
|
||||
"sha256": "d93f444d070184b3023f66a4dbca8892ce16084308022f5e549516f3fe104009"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonSchemaService",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonSchemaService.js",
|
||||
"sha256": "44c1710fc51f81f442c7e5d136907b78ac6bae10ea57484081247c8f4e2a555f"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonValidation",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonValidation.js",
|
||||
"sha256": "141aeca0078844b5c571315ff633ac01f901d03dd1fd926a48de4254ebf390f0"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/utils/colors",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/utils/colors.js",
|
||||
"sha256": "cfa77c1bcc440cfb7a020ff34c9e6de3adcefacd5fcde1feb590dcff35a0b7a0"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonDocumentSymbols",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonDocumentSymbols.js",
|
||||
"sha256": "8d39c136aa85b33a3dee106ce919cf8ea554b287d31beb1db8da052d51242e8c"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/configuration",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/configuration.js",
|
||||
"sha256": "50baf826322ce80df882f4e49906ce73a6a6d7b958910335788b6b043b0edade"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonFolding",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonFolding.js",
|
||||
"sha256": "9e20d176b7d8a73f9ca6b963f825eadc21248304aa2031735bbf635e51cbe8c0"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonSelectionRanges",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonSelectionRanges.js",
|
||||
"sha256": "fbbadc20c9a705816195f26256dc1971334c36e0759417c99b299824bd8d3399"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/services/jsonLinks",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/services/jsonLinks.js",
|
||||
"sha256": "435e501e3d8f3b50d34ba4bdd14421818e12d1aa1eb631086d47d818091711e4"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice/jsonLanguageService",
|
||||
"archive": "vscode-json-languageservice-4.1.9",
|
||||
"member": "package/lib/umd/jsonLanguageService.js",
|
||||
"sha256": "216f762160fe72d4fc48c550be9b0f0a5b1a3f7fc63fc69e008aa4e7c468e4a3"
|
||||
}
|
||||
],
|
||||
"aliases": [
|
||||
{
|
||||
"id": "jsonc-parser",
|
||||
"main": "main"
|
||||
},
|
||||
{
|
||||
"id": "vscode-css-languageservice",
|
||||
"main": "cssLanguageService"
|
||||
},
|
||||
{
|
||||
"id": "vscode-html-languageservice",
|
||||
"main": "htmlLanguageService"
|
||||
},
|
||||
{
|
||||
"id": "vscode-json-languageservice",
|
||||
"main": "jsonLanguageService"
|
||||
},
|
||||
{
|
||||
"id": "vscode-languageserver-textdocument",
|
||||
"main": "main"
|
||||
},
|
||||
{
|
||||
"id": "vscode-languageserver-types",
|
||||
"main": "main"
|
||||
},
|
||||
{
|
||||
"id": "vscode-uri",
|
||||
"main": "index"
|
||||
},
|
||||
{
|
||||
"id": "vscode-nls",
|
||||
"main": "vscode-nls"
|
||||
}
|
||||
],
|
||||
"workers": [
|
||||
{
|
||||
"language": "css",
|
||||
"development": {
|
||||
"archive": "monaco-editor-0.30.1",
|
||||
"member": "package/dev/vs/language/css/cssWorker.js",
|
||||
"sha256": "469b4efaa98ec340a463d7cf9f34f6efc574ed889e55d0af7f4e1a65c0deb7b5"
|
||||
},
|
||||
"target": {
|
||||
"path": "docs/assets/js/vs/language/css/cssWorker.js",
|
||||
"sha256": "073e09f9301dcf147e40ef675e3f18d8cc29de9f49673ec8d17711569144552d"
|
||||
},
|
||||
"ids": [
|
||||
"vscode-css-languageservice/parser/cssScanner",
|
||||
"vscode-css-languageservice/utils/strings",
|
||||
"vscode-css-languageservice/parser/cssNodes",
|
||||
"vscode-nls/vscode-nls",
|
||||
"vscode-nls",
|
||||
"vscode-css-languageservice/parser/cssErrors",
|
||||
"vscode-css-languageservice/languageFacts/entry",
|
||||
"vscode-css-languageservice/languageFacts/colors",
|
||||
"vscode-css-languageservice/languageFacts/builtinData",
|
||||
"vscode-css-languageservice/languageFacts/facts",
|
||||
"vscode-css-languageservice/utils/objects",
|
||||
"vscode-css-languageservice/parser/cssParser",
|
||||
"vscode-css-languageservice/utils/arrays",
|
||||
"vscode-css-languageservice/parser/cssSymbolScope",
|
||||
"vscode-languageserver-types/main",
|
||||
"vscode-languageserver-types",
|
||||
"vscode-languageserver-textdocument/main",
|
||||
"vscode-languageserver-textdocument",
|
||||
"vscode-css-languageservice/cssLanguageTypes",
|
||||
"vscode-uri/index",
|
||||
"vscode-uri",
|
||||
"vscode-css-languageservice/utils/resources",
|
||||
"vscode-css-languageservice/services/pathCompletion",
|
||||
"vscode-css-languageservice/services/cssCompletion",
|
||||
"vscode-css-languageservice/services/selectorPrinting",
|
||||
"vscode-css-languageservice/services/cssHover",
|
||||
"vscode-css-languageservice/services/cssNavigation",
|
||||
"vscode-css-languageservice/services/lintRules",
|
||||
"vscode-css-languageservice/services/cssCodeActions",
|
||||
"vscode-css-languageservice/services/lintUtil",
|
||||
"vscode-css-languageservice/services/lint",
|
||||
"vscode-css-languageservice/services/cssValidation",
|
||||
"vscode-css-languageservice/parser/scssScanner",
|
||||
"vscode-css-languageservice/parser/scssErrors",
|
||||
"vscode-css-languageservice/parser/scssParser",
|
||||
"vscode-css-languageservice/services/scssCompletion",
|
||||
"vscode-css-languageservice/parser/lessScanner",
|
||||
"vscode-css-languageservice/parser/lessParser",
|
||||
"vscode-css-languageservice/services/lessCompletion",
|
||||
"vscode-css-languageservice/services/cssFolding",
|
||||
"vscode-css-languageservice/data/webCustomData",
|
||||
"vscode-css-languageservice/languageFacts/dataProvider",
|
||||
"vscode-css-languageservice/languageFacts/dataManager",
|
||||
"vscode-css-languageservice/services/cssSelectionRange",
|
||||
"vscode-css-languageservice/services/scssNavigation",
|
||||
"vscode-css-languageservice/cssLanguageService",
|
||||
"vscode-css-languageservice",
|
||||
"vs/language/css/cssWorker"
|
||||
],
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-cssWorker.ts.txt",
|
||||
"shim": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-fillers-vscode-nls.ts.txt",
|
||||
"config": "refactor/baselines/site-vendor/monaco-languages/monaco-css-src-tsconfig.json.txt"
|
||||
},
|
||||
{
|
||||
"language": "html",
|
||||
"development": {
|
||||
"archive": "monaco-editor-0.30.1",
|
||||
"member": "package/dev/vs/language/html/htmlWorker.js",
|
||||
"sha256": "8f6344e4a97ba8c42f3b5bc5d9b6d405ab7ea0435077d91f332476d3ddccc3a5"
|
||||
},
|
||||
"target": {
|
||||
"path": "docs/assets/js/vs/language/html/htmlWorker.js",
|
||||
"sha256": "0b14f0af7ae7ab85732574fb384496dae3e85d28f953188cc842eec468a8a457"
|
||||
},
|
||||
"ids": [
|
||||
"vscode-nls/vscode-nls",
|
||||
"vscode-nls",
|
||||
"vscode-languageserver-types/main",
|
||||
"vscode-languageserver-types",
|
||||
"vscode-languageserver-textdocument/main",
|
||||
"vscode-languageserver-textdocument",
|
||||
"vscode-html-languageservice/htmlLanguageTypes",
|
||||
"vscode-html-languageservice/parser/htmlScanner",
|
||||
"vscode-html-languageservice/utils/arrays",
|
||||
"vscode-html-languageservice/languageFacts/fact",
|
||||
"vscode-html-languageservice/parser/htmlParser",
|
||||
"vscode-html-languageservice/parser/htmlEntities",
|
||||
"vscode-html-languageservice/utils/strings",
|
||||
"vscode-html-languageservice/utils/object",
|
||||
"vscode-html-languageservice/utils/markup",
|
||||
"vscode-html-languageservice/languageFacts/dataProvider",
|
||||
"vscode-html-languageservice/services/pathCompletion",
|
||||
"vscode-html-languageservice/services/htmlCompletion",
|
||||
"vscode-html-languageservice/services/htmlHover",
|
||||
"vscode-html-languageservice/beautify/beautify",
|
||||
"vscode-html-languageservice/beautify/beautify-css",
|
||||
"vscode-html-languageservice/beautify/beautify-html",
|
||||
"vscode-html-languageservice/services/htmlFormatter",
|
||||
"vscode-uri/index",
|
||||
"vscode-uri",
|
||||
"vscode-html-languageservice/services/htmlLinks",
|
||||
"vscode-html-languageservice/services/htmlHighlighting",
|
||||
"vscode-html-languageservice/services/htmlSymbolsProvider",
|
||||
"vscode-html-languageservice/services/htmlRename",
|
||||
"vscode-html-languageservice/services/htmlMatchingTagPosition",
|
||||
"vscode-html-languageservice/services/htmlLinkedEditing",
|
||||
"vscode-html-languageservice/services/htmlFolding",
|
||||
"vscode-html-languageservice/services/htmlSelectionRange",
|
||||
"vscode-html-languageservice/languageFacts/data/webCustomData",
|
||||
"vscode-html-languageservice/languageFacts/dataManager",
|
||||
"vscode-html-languageservice/htmlLanguageService",
|
||||
"vscode-html-languageservice",
|
||||
"vs/language/html/htmlWorker"
|
||||
],
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-htmlWorker.ts.txt",
|
||||
"shim": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-fillers-vscode-nls.ts.txt",
|
||||
"config": "refactor/baselines/site-vendor/monaco-languages/monaco-html-src-tsconfig.json.txt"
|
||||
},
|
||||
{
|
||||
"language": "json",
|
||||
"development": {
|
||||
"archive": "monaco-editor-0.30.1",
|
||||
"member": "package/dev/vs/language/json/jsonWorker.js",
|
||||
"sha256": "81f25e487025e001ce806e1d1b0dea5fc261d3ee4bf4e4485f04203abf727f50"
|
||||
},
|
||||
"target": {
|
||||
"path": "docs/assets/js/vs/language/json/jsonWorker.js",
|
||||
"sha256": "0eb929c56d44afddb3030c011913010311ce34e5eadb1129a3ce9cbafd4c771d"
|
||||
},
|
||||
"ids": [
|
||||
"jsonc-parser/impl/scanner",
|
||||
"jsonc-parser/impl/format",
|
||||
"jsonc-parser/impl/parser",
|
||||
"jsonc-parser/impl/edit",
|
||||
"jsonc-parser/main",
|
||||
"jsonc-parser",
|
||||
"vscode-json-languageservice/utils/objects",
|
||||
"vscode-json-languageservice/utils/strings",
|
||||
"vscode-languageserver-types/main",
|
||||
"vscode-languageserver-types",
|
||||
"vscode-languageserver-textdocument/main",
|
||||
"vscode-languageserver-textdocument",
|
||||
"vscode-json-languageservice/jsonLanguageTypes",
|
||||
"vscode-nls/vscode-nls",
|
||||
"vscode-nls",
|
||||
"vscode-json-languageservice/parser/jsonParser",
|
||||
"vscode-json-languageservice/utils/json",
|
||||
"vscode-json-languageservice/services/jsonCompletion",
|
||||
"vscode-json-languageservice/services/jsonHover",
|
||||
"vscode-uri/index",
|
||||
"vscode-uri",
|
||||
"vscode-json-languageservice/utils/glob",
|
||||
"vscode-json-languageservice/services/jsonSchemaService",
|
||||
"vscode-json-languageservice/services/jsonValidation",
|
||||
"vscode-json-languageservice/utils/colors",
|
||||
"vscode-json-languageservice/services/jsonDocumentSymbols",
|
||||
"vscode-json-languageservice/services/configuration",
|
||||
"vscode-json-languageservice/services/jsonFolding",
|
||||
"vscode-json-languageservice/services/jsonSelectionRanges",
|
||||
"vscode-json-languageservice/services/jsonLinks",
|
||||
"vscode-json-languageservice/jsonLanguageService",
|
||||
"vscode-json-languageservice",
|
||||
"vs/language/json/jsonWorker"
|
||||
],
|
||||
"source": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-jsonWorker.ts.txt",
|
||||
"shim": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-fillers-vscode-nls.ts.txt",
|
||||
"config": "refactor/baselines/site-vendor/monaco-languages/monaco-json-src-tsconfig.json.txt"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,751 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "SITE-07",
|
||||
"status": "checkpoint-incomplete",
|
||||
"recordedAt": "2026-09-15T01:09:12.810Z",
|
||||
"baseCommit": "11296975f100e027f7dcbf7e5be6663bc9978cd3",
|
||||
"node": "v24.21.0",
|
||||
"yarn": "1.22.22",
|
||||
"fingerprints": {
|
||||
"sourceRecord": "43d720dbc73f94a2a2bb6d403813f3835f2714dea0fc74b8d846ed83ad506718",
|
||||
"runtimeChanges": "No changes to any Monaco runtime asset"
|
||||
},
|
||||
"reproduction": {
|
||||
"result": {
|
||||
"archives": 11,
|
||||
"gitSources": 13,
|
||||
"npmModules": 91,
|
||||
"aliases": 8,
|
||||
"workers": [
|
||||
{
|
||||
"language": "css",
|
||||
"modules": 48,
|
||||
"exactSources": true,
|
||||
"exactWorker": true,
|
||||
"sha256": "073e09f9301dcf147e40ef675e3f18d8cc29de9f49673ec8d17711569144552d"
|
||||
},
|
||||
{
|
||||
"language": "html",
|
||||
"modules": 38,
|
||||
"exactSources": true,
|
||||
"exactWorker": true,
|
||||
"sha256": "0b14f0af7ae7ab85732574fb384496dae3e85d28f953188cc842eec468a8a457"
|
||||
},
|
||||
{
|
||||
"language": "json",
|
||||
"modules": 33,
|
||||
"exactSources": true,
|
||||
"exactWorker": true,
|
||||
"sha256": "0eb929c56d44afddb3030c011913010311ce34e5eadb1129a3ce9cbafd4c771d"
|
||||
}
|
||||
],
|
||||
"licenseReviewComplete": false,
|
||||
"otherMonacoComponentsReviewed": false
|
||||
},
|
||||
"fetchLog": "refactor/.cache/monaco-languages-fetch.log",
|
||||
"offlineLog": "refactor/.cache/monaco-languages-yarn.log"
|
||||
},
|
||||
"unit": {
|
||||
"passed": 4,
|
||||
"log": "refactor/.cache/monaco-languages-unit.log"
|
||||
},
|
||||
"browser": {
|
||||
"report": "refactor/.cache/browser/report.json",
|
||||
"sha256": "9c16417579ea84d295d1ae5d0bc5f6d845fa44790abba33119d5ae44f8e500cc",
|
||||
"tests": [
|
||||
{
|
||||
"project": "chromium",
|
||||
"title": "docs Monaco CSS, HTML and JSON workers validate, complete and format real models",
|
||||
"status": "passed",
|
||||
"retry": 0,
|
||||
"browser": "153.0.8010.12",
|
||||
"errors": [],
|
||||
"consoleErrors": [],
|
||||
"failedRequests": [],
|
||||
"results": {
|
||||
"cssValid": [],
|
||||
"cssInvalid": [
|
||||
{
|
||||
"code": "css-propertyvalueexpected",
|
||||
"source": "css",
|
||||
"message": "property value expected",
|
||||
"severity": 1,
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 11
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"jsonValid": [],
|
||||
"jsonInvalid": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"message": "Value expected",
|
||||
"severity": 1,
|
||||
"code": 516,
|
||||
"source": "json"
|
||||
}
|
||||
],
|
||||
"completionLabels": [
|
||||
"html",
|
||||
"head",
|
||||
"title",
|
||||
"base",
|
||||
"link",
|
||||
"meta",
|
||||
"style",
|
||||
"body",
|
||||
"article",
|
||||
"section",
|
||||
"nav",
|
||||
"aside",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
"header",
|
||||
"footer",
|
||||
"address",
|
||||
"p",
|
||||
"hr",
|
||||
"pre",
|
||||
"blockquote",
|
||||
"ol",
|
||||
"ul",
|
||||
"li",
|
||||
"dl",
|
||||
"dt",
|
||||
"dd",
|
||||
"figure",
|
||||
"figcaption",
|
||||
"main",
|
||||
"div",
|
||||
"a",
|
||||
"em",
|
||||
"strong",
|
||||
"small",
|
||||
"s",
|
||||
"cite",
|
||||
"q",
|
||||
"dfn",
|
||||
"abbr",
|
||||
"ruby",
|
||||
"rb",
|
||||
"rt",
|
||||
"rp",
|
||||
"time",
|
||||
"code",
|
||||
"var",
|
||||
"samp",
|
||||
"kbd",
|
||||
"sub",
|
||||
"sup",
|
||||
"i",
|
||||
"b",
|
||||
"u",
|
||||
"mark",
|
||||
"bdi",
|
||||
"bdo",
|
||||
"span",
|
||||
"br",
|
||||
"wbr",
|
||||
"ins",
|
||||
"del",
|
||||
"picture",
|
||||
"img",
|
||||
"iframe",
|
||||
"embed",
|
||||
"object",
|
||||
"param",
|
||||
"video",
|
||||
"audio",
|
||||
"source",
|
||||
"track",
|
||||
"map",
|
||||
"area",
|
||||
"table",
|
||||
"caption",
|
||||
"colgroup",
|
||||
"col",
|
||||
"tbody",
|
||||
"thead",
|
||||
"tfoot",
|
||||
"tr",
|
||||
"td",
|
||||
"th",
|
||||
"form",
|
||||
"label",
|
||||
"input",
|
||||
"button",
|
||||
"select",
|
||||
"datalist",
|
||||
"optgroup",
|
||||
"option",
|
||||
"textarea",
|
||||
"output",
|
||||
"progress",
|
||||
"meter",
|
||||
"fieldset",
|
||||
"legend",
|
||||
"details",
|
||||
"summary",
|
||||
"dialog",
|
||||
"script",
|
||||
"noscript",
|
||||
"template",
|
||||
"canvas"
|
||||
],
|
||||
"htmlSymbols": [
|
||||
"div",
|
||||
"p",
|
||||
"p"
|
||||
],
|
||||
"htmlEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 35
|
||||
}
|
||||
},
|
||||
"newText": "<div>\n <p>hello</p>\n <p>world</p>\n</div>"
|
||||
}
|
||||
],
|
||||
"jsonEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
}
|
||||
},
|
||||
"newText": "\n "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
}
|
||||
},
|
||||
"newText": " "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"newText": "\n"
|
||||
}
|
||||
],
|
||||
"startedWorkers": [
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#html"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"title": "docs Monaco CSS, HTML and JSON workers validate, complete and format real models",
|
||||
"status": "passed",
|
||||
"retry": 0,
|
||||
"browser": "155.0",
|
||||
"errors": [],
|
||||
"consoleErrors": [],
|
||||
"failedRequests": [],
|
||||
"results": {
|
||||
"cssValid": [],
|
||||
"cssInvalid": [
|
||||
{
|
||||
"code": "css-propertyvalueexpected",
|
||||
"source": "css",
|
||||
"message": "property value expected",
|
||||
"severity": 1,
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 11
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"jsonValid": [],
|
||||
"jsonInvalid": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"message": "Value expected",
|
||||
"severity": 1,
|
||||
"code": 516,
|
||||
"source": "json"
|
||||
}
|
||||
],
|
||||
"completionLabels": [
|
||||
"html",
|
||||
"head",
|
||||
"title",
|
||||
"base",
|
||||
"link",
|
||||
"meta",
|
||||
"style",
|
||||
"body",
|
||||
"article",
|
||||
"section",
|
||||
"nav",
|
||||
"aside",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
"header",
|
||||
"footer",
|
||||
"address",
|
||||
"p",
|
||||
"hr",
|
||||
"pre",
|
||||
"blockquote",
|
||||
"ol",
|
||||
"ul",
|
||||
"li",
|
||||
"dl",
|
||||
"dt",
|
||||
"dd",
|
||||
"figure",
|
||||
"figcaption",
|
||||
"main",
|
||||
"div",
|
||||
"a",
|
||||
"em",
|
||||
"strong",
|
||||
"small",
|
||||
"s",
|
||||
"cite",
|
||||
"q",
|
||||
"dfn",
|
||||
"abbr",
|
||||
"ruby",
|
||||
"rb",
|
||||
"rt",
|
||||
"rp",
|
||||
"time",
|
||||
"code",
|
||||
"var",
|
||||
"samp",
|
||||
"kbd",
|
||||
"sub",
|
||||
"sup",
|
||||
"i",
|
||||
"b",
|
||||
"u",
|
||||
"mark",
|
||||
"bdi",
|
||||
"bdo",
|
||||
"span",
|
||||
"br",
|
||||
"wbr",
|
||||
"ins",
|
||||
"del",
|
||||
"picture",
|
||||
"img",
|
||||
"iframe",
|
||||
"embed",
|
||||
"object",
|
||||
"param",
|
||||
"video",
|
||||
"audio",
|
||||
"source",
|
||||
"track",
|
||||
"map",
|
||||
"area",
|
||||
"table",
|
||||
"caption",
|
||||
"colgroup",
|
||||
"col",
|
||||
"tbody",
|
||||
"thead",
|
||||
"tfoot",
|
||||
"tr",
|
||||
"td",
|
||||
"th",
|
||||
"form",
|
||||
"label",
|
||||
"input",
|
||||
"button",
|
||||
"select",
|
||||
"datalist",
|
||||
"optgroup",
|
||||
"option",
|
||||
"textarea",
|
||||
"output",
|
||||
"progress",
|
||||
"meter",
|
||||
"fieldset",
|
||||
"legend",
|
||||
"details",
|
||||
"summary",
|
||||
"dialog",
|
||||
"script",
|
||||
"noscript",
|
||||
"template",
|
||||
"canvas"
|
||||
],
|
||||
"htmlSymbols": [
|
||||
"div",
|
||||
"p",
|
||||
"p"
|
||||
],
|
||||
"htmlEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 35
|
||||
}
|
||||
},
|
||||
"newText": "<div>\n <p>hello</p>\n <p>world</p>\n</div>"
|
||||
}
|
||||
],
|
||||
"jsonEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
}
|
||||
},
|
||||
"newText": "\n "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
}
|
||||
},
|
||||
"newText": " "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"newText": "\n"
|
||||
}
|
||||
],
|
||||
"startedWorkers": [
|
||||
"/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"/assets/js/vs/base/worker/workerMain.js#html"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"title": "docs Monaco CSS, HTML and JSON workers validate, complete and format real models",
|
||||
"status": "passed",
|
||||
"retry": 0,
|
||||
"browser": "26.6",
|
||||
"errors": [],
|
||||
"consoleErrors": [],
|
||||
"failedRequests": [],
|
||||
"results": {
|
||||
"cssValid": [],
|
||||
"cssInvalid": [
|
||||
{
|
||||
"code": "css-propertyvalueexpected",
|
||||
"source": "css",
|
||||
"message": "property value expected",
|
||||
"severity": 1,
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 11
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"jsonValid": [],
|
||||
"jsonInvalid": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"message": "Value expected",
|
||||
"severity": 1,
|
||||
"code": 516,
|
||||
"source": "json"
|
||||
}
|
||||
],
|
||||
"completionLabels": [
|
||||
"html",
|
||||
"head",
|
||||
"title",
|
||||
"base",
|
||||
"link",
|
||||
"meta",
|
||||
"style",
|
||||
"body",
|
||||
"article",
|
||||
"section",
|
||||
"nav",
|
||||
"aside",
|
||||
"h1",
|
||||
"h2",
|
||||
"h3",
|
||||
"h4",
|
||||
"h5",
|
||||
"h6",
|
||||
"header",
|
||||
"footer",
|
||||
"address",
|
||||
"p",
|
||||
"hr",
|
||||
"pre",
|
||||
"blockquote",
|
||||
"ol",
|
||||
"ul",
|
||||
"li",
|
||||
"dl",
|
||||
"dt",
|
||||
"dd",
|
||||
"figure",
|
||||
"figcaption",
|
||||
"main",
|
||||
"div",
|
||||
"a",
|
||||
"em",
|
||||
"strong",
|
||||
"small",
|
||||
"s",
|
||||
"cite",
|
||||
"q",
|
||||
"dfn",
|
||||
"abbr",
|
||||
"ruby",
|
||||
"rb",
|
||||
"rt",
|
||||
"rp",
|
||||
"time",
|
||||
"code",
|
||||
"var",
|
||||
"samp",
|
||||
"kbd",
|
||||
"sub",
|
||||
"sup",
|
||||
"i",
|
||||
"b",
|
||||
"u",
|
||||
"mark",
|
||||
"bdi",
|
||||
"bdo",
|
||||
"span",
|
||||
"br",
|
||||
"wbr",
|
||||
"ins",
|
||||
"del",
|
||||
"picture",
|
||||
"img",
|
||||
"iframe",
|
||||
"embed",
|
||||
"object",
|
||||
"param",
|
||||
"video",
|
||||
"audio",
|
||||
"source",
|
||||
"track",
|
||||
"map",
|
||||
"area",
|
||||
"table",
|
||||
"caption",
|
||||
"colgroup",
|
||||
"col",
|
||||
"tbody",
|
||||
"thead",
|
||||
"tfoot",
|
||||
"tr",
|
||||
"td",
|
||||
"th",
|
||||
"form",
|
||||
"label",
|
||||
"input",
|
||||
"button",
|
||||
"select",
|
||||
"datalist",
|
||||
"optgroup",
|
||||
"option",
|
||||
"textarea",
|
||||
"output",
|
||||
"progress",
|
||||
"meter",
|
||||
"fieldset",
|
||||
"legend",
|
||||
"details",
|
||||
"summary",
|
||||
"dialog",
|
||||
"script",
|
||||
"noscript",
|
||||
"template",
|
||||
"canvas"
|
||||
],
|
||||
"htmlSymbols": [
|
||||
"div",
|
||||
"p",
|
||||
"p"
|
||||
],
|
||||
"htmlEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 35
|
||||
}
|
||||
},
|
||||
"newText": "<div>\n <p>hello</p>\n <p>world</p>\n</div>"
|
||||
}
|
||||
],
|
||||
"jsonEdits": [
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 1
|
||||
}
|
||||
},
|
||||
"newText": "\n "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 9
|
||||
}
|
||||
},
|
||||
"newText": " "
|
||||
},
|
||||
{
|
||||
"range": {
|
||||
"start": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
},
|
||||
"end": {
|
||||
"line": 0,
|
||||
"character": 10
|
||||
}
|
||||
},
|
||||
"newText": "\n"
|
||||
}
|
||||
],
|
||||
"startedWorkers": [
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#css",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#json",
|
||||
"http://127.0.0.1:8084/assets/js/vs/base/worker/workerMain.js#html"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"limitations": [
|
||||
"Source and exact output proof; not a complete upstream semantic typecheck.",
|
||||
"Language-service original notices and embedded source attribution remain under review.",
|
||||
"Mode bundles, editor core, basic languages and other site assets are not closed by this record.",
|
||||
"No playback, physical device, external SDK, remote CI or publication verification in this checkpoint."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
const requirejs = require('requirejs');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const Terser = require('terser');
|
||||
const helpers = require('monaco-plugin-helpers');
|
||||
|
||||
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
||||
|
||||
const sha1 = helpers.getGitVersion(REPO_ROOT);
|
||||
const semver = require('../../package.json').version;
|
||||
const headerVersion = semver + '(' + sha1 + ')';
|
||||
|
||||
const BUNDLED_FILE_HEADER = [
|
||||
'/*!-----------------------------------------------------------------------------',
|
||||
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
||||
' * monaco-css version: ' + headerVersion,
|
||||
' * Released under the MIT license',
|
||||
' * https://github.com/Microsoft/monaco-css/blob/master/LICENSE.md',
|
||||
' *-----------------------------------------------------------------------------*/',
|
||||
''
|
||||
].join('\n');
|
||||
|
||||
bundleOne('monaco.contribution');
|
||||
bundleOne('cssMode', ['vs/language/css/monaco.contribution']);
|
||||
bundleOne('cssWorker');
|
||||
|
||||
function bundleOne(moduleId, exclude) {
|
||||
requirejs.optimize(
|
||||
{
|
||||
baseUrl: 'out/amd/',
|
||||
name: 'vs/language/css/' + moduleId,
|
||||
out: 'release/dev/' + moduleId + '.js',
|
||||
exclude: exclude,
|
||||
paths: {
|
||||
'vs/language/css': REPO_ROOT + '/monaco-css/out/amd',
|
||||
'vs/language/css/fillers/monaco-editor-core':
|
||||
REPO_ROOT + '/monaco-css/out/amd/fillers/monaco-editor-core-amd'
|
||||
},
|
||||
optimize: 'none',
|
||||
packages: [
|
||||
{
|
||||
name: 'vscode-css-languageservice',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-css-languageservice/lib/umd'),
|
||||
main: 'cssLanguageService'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-types',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-types/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-textdocument',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-textdocument/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-uri',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-uri/lib/umd'),
|
||||
main: 'index'
|
||||
},
|
||||
{
|
||||
name: 'vscode-nls',
|
||||
location: path.join(REPO_ROOT, 'monaco-css/out/amd/fillers'),
|
||||
main: 'vscode-nls'
|
||||
}
|
||||
]
|
||||
},
|
||||
async function (buildResponse) {
|
||||
const devFilePath = path.join(REPO_ROOT, 'monaco-css/release/dev/' + moduleId + '.js');
|
||||
const minFilePath = path.join(REPO_ROOT, 'monaco-css/release/min/' + moduleId + '.js');
|
||||
const fileContents = fs.readFileSync(devFilePath).toString();
|
||||
console.log();
|
||||
console.log(`Minifying ${devFilePath}...`);
|
||||
const result = await Terser.minify(fileContents, {
|
||||
output: {
|
||||
comments: 'some'
|
||||
}
|
||||
});
|
||||
console.log(`Done minifying ${devFilePath}.`);
|
||||
try {
|
||||
fs.mkdirSync(path.join(REPO_ROOT, 'monaco-css/release/min'));
|
||||
} catch (err) {}
|
||||
fs.writeFileSync(minFilePath, BUNDLED_FILE_HEADER + result.code);
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type { worker } from './fillers/monaco-editor-core';
|
||||
import * as cssService from 'vscode-css-languageservice';
|
||||
import { Options } from './monaco.contribution';
|
||||
|
||||
export class CSSWorker {
|
||||
// --- model sync -----------------------
|
||||
|
||||
private _ctx: worker.IWorkerContext;
|
||||
private _languageService: cssService.LanguageService;
|
||||
private _languageSettings: cssService.LanguageSettings;
|
||||
private _languageId: string;
|
||||
|
||||
constructor(ctx: worker.IWorkerContext, createData: ICreateData) {
|
||||
this._ctx = ctx;
|
||||
this._languageSettings = createData.options;
|
||||
this._languageId = createData.languageId;
|
||||
|
||||
const data = createData.options.data;
|
||||
|
||||
const useDefaultDataProvider = data?.useDefaultDataProvider;
|
||||
const customDataProviders: cssService.ICSSDataProvider[] = [];
|
||||
if (data?.dataProviders) {
|
||||
for (const id in data.dataProviders) {
|
||||
customDataProviders.push(cssService.newCSSDataProvider(data.dataProviders[id]));
|
||||
}
|
||||
}
|
||||
const lsOptions: cssService.LanguageServiceOptions = {
|
||||
customDataProviders,
|
||||
useDefaultDataProvider
|
||||
};
|
||||
|
||||
switch (this._languageId) {
|
||||
case 'css':
|
||||
this._languageService = cssService.getCSSLanguageService(lsOptions);
|
||||
break;
|
||||
case 'less':
|
||||
this._languageService = cssService.getLESSLanguageService(lsOptions);
|
||||
break;
|
||||
case 'scss':
|
||||
this._languageService = cssService.getSCSSLanguageService(lsOptions);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Invalid language id: ' + this._languageId);
|
||||
}
|
||||
this._languageService.configure(this._languageSettings);
|
||||
}
|
||||
|
||||
// --- language service host ---------------
|
||||
|
||||
async doValidation(uri: string): Promise<cssService.Diagnostic[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
if (document) {
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let diagnostics = this._languageService.doValidation(document, stylesheet);
|
||||
return Promise.resolve(diagnostics);
|
||||
}
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
async doComplete(uri: string, position: cssService.Position): Promise<cssService.CompletionList> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let completions = this._languageService.doComplete(document, position, stylesheet);
|
||||
return Promise.resolve(completions);
|
||||
}
|
||||
async doHover(uri: string, position: cssService.Position): Promise<cssService.Hover> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let hover = this._languageService.doHover(document, position, stylesheet);
|
||||
return Promise.resolve(hover);
|
||||
}
|
||||
async findDefinition(uri: string, position: cssService.Position): Promise<cssService.Location> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let definition = this._languageService.findDefinition(document, position, stylesheet);
|
||||
return Promise.resolve(definition);
|
||||
}
|
||||
async findReferences(uri: string, position: cssService.Position): Promise<cssService.Location[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let references = this._languageService.findReferences(document, position, stylesheet);
|
||||
return Promise.resolve(references);
|
||||
}
|
||||
async findDocumentHighlights(
|
||||
uri: string,
|
||||
position: cssService.Position
|
||||
): Promise<cssService.DocumentHighlight[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let highlights = this._languageService.findDocumentHighlights(document, position, stylesheet);
|
||||
return Promise.resolve(highlights);
|
||||
}
|
||||
async findDocumentSymbols(uri: string): Promise<cssService.SymbolInformation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let symbols = this._languageService.findDocumentSymbols(document, stylesheet);
|
||||
return Promise.resolve(symbols);
|
||||
}
|
||||
async doCodeActions(
|
||||
uri: string,
|
||||
range: cssService.Range,
|
||||
context: cssService.CodeActionContext
|
||||
): Promise<cssService.Command[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let actions = this._languageService.doCodeActions(document, range, context, stylesheet);
|
||||
return Promise.resolve(actions);
|
||||
}
|
||||
async findDocumentColors(uri: string): Promise<cssService.ColorInformation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let colorSymbols = this._languageService.findDocumentColors(document, stylesheet);
|
||||
return Promise.resolve(colorSymbols);
|
||||
}
|
||||
async getColorPresentations(
|
||||
uri: string,
|
||||
color: cssService.Color,
|
||||
range: cssService.Range
|
||||
): Promise<cssService.ColorPresentation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let colorPresentations = this._languageService.getColorPresentations(
|
||||
document,
|
||||
stylesheet,
|
||||
color,
|
||||
range
|
||||
);
|
||||
return Promise.resolve(colorPresentations);
|
||||
}
|
||||
async getFoldingRanges(
|
||||
uri: string,
|
||||
context?: { rangeLimit?: number }
|
||||
): Promise<cssService.FoldingRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let ranges = this._languageService.getFoldingRanges(document, context);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
async getSelectionRanges(
|
||||
uri: string,
|
||||
positions: cssService.Position[]
|
||||
): Promise<cssService.SelectionRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let ranges = this._languageService.getSelectionRanges(document, positions, stylesheet);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
async doRename(
|
||||
uri: string,
|
||||
position: cssService.Position,
|
||||
newName: string
|
||||
): Promise<cssService.WorkspaceEdit> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let stylesheet = this._languageService.parseStylesheet(document);
|
||||
let renames = this._languageService.doRename(document, position, newName, stylesheet);
|
||||
return Promise.resolve(renames);
|
||||
}
|
||||
private _getTextDocument(uri: string): cssService.TextDocument {
|
||||
let models = this._ctx.getMirrorModels();
|
||||
for (let model of models) {
|
||||
if (model.uri.toString() === uri) {
|
||||
return cssService.TextDocument.create(
|
||||
uri,
|
||||
this._languageId,
|
||||
model.version,
|
||||
model.getValue()
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export interface ICreateData {
|
||||
languageId: string;
|
||||
options: Options;
|
||||
}
|
||||
|
||||
export function create(ctx: worker.IWorkerContext, createData: ICreateData): CSSWorker {
|
||||
return new CSSWorker(ctx, createData);
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export interface Options {
|
||||
locale?: string;
|
||||
cacheLanguageResolution?: boolean;
|
||||
}
|
||||
export interface LocalizeInfo {
|
||||
key: string;
|
||||
comment: string[];
|
||||
}
|
||||
export interface LocalizeFunc {
|
||||
(info: LocalizeInfo, message: string, ...args: any[]): string;
|
||||
(key: string, message: string, ...args: any[]): string;
|
||||
}
|
||||
export interface LoadFunc {
|
||||
(file?: string): LocalizeFunc;
|
||||
}
|
||||
|
||||
function format(message: string, args: any[]): string {
|
||||
let result: string;
|
||||
|
||||
if (args.length === 0) {
|
||||
result = message;
|
||||
} else {
|
||||
result = message.replace(/\{(\d+)\}/g, (match, rest) => {
|
||||
let index = rest[0];
|
||||
return typeof args[index] !== 'undefined' ? args[index] : match;
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function localize(key: string | LocalizeInfo, message: string, ...args: any[]): string {
|
||||
return format(message, args);
|
||||
}
|
||||
|
||||
export function loadMessageBundle(file?: string): LocalizeFunc {
|
||||
return localize;
|
||||
}
|
||||
|
||||
export function config(opt?: Options | string): LoadFunc {
|
||||
return loadMessageBundle;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "amd",
|
||||
"moduleResolution": "node",
|
||||
"outDir": "../out/amd",
|
||||
"declaration": true,
|
||||
"target": "es5",
|
||||
"lib": ["dom", "es5", "es2015.collection", "es2015.promise", "es2015.iterable"]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
const requirejs = require('requirejs');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const terser = require('terser');
|
||||
const helpers = require('monaco-plugin-helpers');
|
||||
|
||||
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
||||
|
||||
const sha1 = helpers.getGitVersion(REPO_ROOT);
|
||||
const semver = require('../../package.json').version;
|
||||
const headerVersion = semver + '(' + sha1 + ')';
|
||||
|
||||
const BUNDLED_FILE_HEADER = [
|
||||
'/*!-----------------------------------------------------------------------------',
|
||||
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
||||
' * monaco-html version: ' + headerVersion,
|
||||
' * Released under the MIT license',
|
||||
' * https://github.com/Microsoft/monaco-html/blob/master/LICENSE.md',
|
||||
' *-----------------------------------------------------------------------------*/',
|
||||
''
|
||||
].join('\n');
|
||||
|
||||
bundleOne('monaco.contribution');
|
||||
bundleOne('htmlMode', ['vs/language/html/monaco.contribution']);
|
||||
bundleOne('htmlWorker');
|
||||
|
||||
function bundleOne(moduleId, exclude) {
|
||||
requirejs.optimize(
|
||||
{
|
||||
baseUrl: 'out/amd/',
|
||||
name: 'vs/language/html/' + moduleId,
|
||||
out: 'release/dev/' + moduleId + '.js',
|
||||
exclude: exclude,
|
||||
paths: {
|
||||
'vs/language/html': REPO_ROOT + '/monaco-html/out/amd',
|
||||
'vs/language/html/fillers/monaco-editor-core':
|
||||
REPO_ROOT + '/monaco-html/out/amd/fillers/monaco-editor-core-amd'
|
||||
},
|
||||
optimize: 'none',
|
||||
packages: [
|
||||
{
|
||||
name: 'vscode-html-languageservice',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-html-languageservice/lib/umd'),
|
||||
main: 'htmlLanguageService'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-types',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-types/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-textdocument',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-textdocument/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-uri',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-uri/lib/umd'),
|
||||
main: 'index'
|
||||
},
|
||||
{
|
||||
name: 'vscode-nls',
|
||||
location: path.join(REPO_ROOT, 'monaco-html/out/amd/fillers'),
|
||||
main: 'vscode-nls'
|
||||
}
|
||||
]
|
||||
},
|
||||
async function (buildResponse) {
|
||||
const devFilePath = path.join(REPO_ROOT, 'monaco-html/release/dev/' + moduleId + '.js');
|
||||
const minFilePath = path.join(REPO_ROOT, 'monaco-html/release/min/' + moduleId + '.js');
|
||||
const fileContents = fs.readFileSync(devFilePath).toString();
|
||||
console.log();
|
||||
console.log(`Minifying ${devFilePath}...`);
|
||||
const result = await terser.minify(fileContents, {
|
||||
output: {
|
||||
comments: 'some'
|
||||
}
|
||||
});
|
||||
console.log(`Done minifying ${devFilePath}.`);
|
||||
try {
|
||||
fs.mkdirSync(path.join(REPO_ROOT, 'monaco-html/release/min'));
|
||||
} catch (err) {}
|
||||
fs.writeFileSync(minFilePath, BUNDLED_FILE_HEADER + result.code);
|
||||
}
|
||||
);
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export interface Options {
|
||||
locale?: string;
|
||||
cacheLanguageResolution?: boolean;
|
||||
}
|
||||
export interface LocalizeInfo {
|
||||
key: string;
|
||||
comment: string[];
|
||||
}
|
||||
export interface LocalizeFunc {
|
||||
(info: LocalizeInfo, message: string, ...args: any[]): string;
|
||||
(key: string, message: string, ...args: any[]): string;
|
||||
}
|
||||
export interface LoadFunc {
|
||||
(file?: string): LocalizeFunc;
|
||||
}
|
||||
|
||||
function format(message: string, args: any[]): string {
|
||||
let result: string;
|
||||
|
||||
if (args.length === 0) {
|
||||
result = message;
|
||||
} else {
|
||||
result = message.replace(/\{(\d+)\}/g, (match, rest) => {
|
||||
let index = rest[0];
|
||||
return typeof args[index] !== 'undefined' ? args[index] : match;
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function localize(key: string | LocalizeInfo, message: string, ...args: any[]): string {
|
||||
return format(message, args);
|
||||
}
|
||||
|
||||
export function loadMessageBundle(file?: string): LocalizeFunc {
|
||||
return localize;
|
||||
}
|
||||
|
||||
export function config(opt?: Options | string): LoadFunc {
|
||||
return loadMessageBundle;
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { worker } from './fillers/monaco-editor-core';
|
||||
import * as htmlService from 'vscode-html-languageservice';
|
||||
import type { Options } from './monaco.contribution';
|
||||
import { IHTMLDataProvider } from 'vscode-html-languageservice';
|
||||
|
||||
export class HTMLWorker {
|
||||
private _ctx: worker.IWorkerContext;
|
||||
private _languageService: htmlService.LanguageService;
|
||||
private _languageSettings: Options;
|
||||
private _languageId: string;
|
||||
|
||||
constructor(ctx: worker.IWorkerContext, createData: ICreateData) {
|
||||
this._ctx = ctx;
|
||||
this._languageSettings = createData.languageSettings;
|
||||
this._languageId = createData.languageId;
|
||||
|
||||
const data = this._languageSettings.data;
|
||||
|
||||
const useDefaultDataProvider = data?.useDefaultDataProvider;
|
||||
const customDataProviders: IHTMLDataProvider[] = [];
|
||||
if (data?.dataProviders) {
|
||||
for (const id in data.dataProviders) {
|
||||
customDataProviders.push(htmlService.newHTMLDataProvider(id, data.dataProviders[id]));
|
||||
}
|
||||
}
|
||||
this._languageService = htmlService.getLanguageService({
|
||||
useDefaultDataProvider,
|
||||
customDataProviders
|
||||
});
|
||||
}
|
||||
|
||||
async doComplete(
|
||||
uri: string,
|
||||
position: htmlService.Position
|
||||
): Promise<htmlService.CompletionList> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let htmlDocument = this._languageService.parseHTMLDocument(document);
|
||||
return Promise.resolve(
|
||||
this._languageService.doComplete(
|
||||
document,
|
||||
position,
|
||||
htmlDocument,
|
||||
this._languageSettings && this._languageSettings.suggest
|
||||
)
|
||||
);
|
||||
}
|
||||
async format(
|
||||
uri: string,
|
||||
range: htmlService.Range,
|
||||
options: htmlService.FormattingOptions
|
||||
): Promise<htmlService.TextEdit[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let formattingOptions = { ...this._languageSettings.format, ...options };
|
||||
let textEdits = this._languageService.format(document, range, formattingOptions);
|
||||
return Promise.resolve(textEdits);
|
||||
}
|
||||
async doHover(uri: string, position: htmlService.Position): Promise<htmlService.Hover> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let htmlDocument = this._languageService.parseHTMLDocument(document);
|
||||
let hover = this._languageService.doHover(document, position, htmlDocument);
|
||||
return Promise.resolve(hover);
|
||||
}
|
||||
async findDocumentHighlights(
|
||||
uri: string,
|
||||
position: htmlService.Position
|
||||
): Promise<htmlService.DocumentHighlight[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let htmlDocument = this._languageService.parseHTMLDocument(document);
|
||||
let highlights = this._languageService.findDocumentHighlights(document, position, htmlDocument);
|
||||
return Promise.resolve(highlights);
|
||||
}
|
||||
async findDocumentLinks(uri: string): Promise<htmlService.DocumentLink[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let links = this._languageService.findDocumentLinks(document, null);
|
||||
return Promise.resolve(links);
|
||||
}
|
||||
async findDocumentSymbols(uri: string): Promise<htmlService.SymbolInformation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let htmlDocument = this._languageService.parseHTMLDocument(document);
|
||||
let symbols = this._languageService.findDocumentSymbols(document, htmlDocument);
|
||||
return Promise.resolve(symbols);
|
||||
}
|
||||
async getFoldingRanges(
|
||||
uri: string,
|
||||
context?: { rangeLimit?: number }
|
||||
): Promise<htmlService.FoldingRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let ranges = this._languageService.getFoldingRanges(document, context);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
async getSelectionRanges(
|
||||
uri: string,
|
||||
positions: htmlService.Position[]
|
||||
): Promise<htmlService.SelectionRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let ranges = this._languageService.getSelectionRanges(document, positions);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
async doRename(
|
||||
uri: string,
|
||||
position: htmlService.Position,
|
||||
newName: string
|
||||
): Promise<htmlService.WorkspaceEdit> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let htmlDocument = this._languageService.parseHTMLDocument(document);
|
||||
let renames = this._languageService.doRename(document, position, newName, htmlDocument);
|
||||
return Promise.resolve(renames);
|
||||
}
|
||||
private _getTextDocument(uri: string): htmlService.TextDocument {
|
||||
let models = this._ctx.getMirrorModels();
|
||||
for (let model of models) {
|
||||
if (model.uri.toString() === uri) {
|
||||
return htmlService.TextDocument.create(
|
||||
uri,
|
||||
this._languageId,
|
||||
model.version,
|
||||
model.getValue()
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export interface ICreateData {
|
||||
languageId: string;
|
||||
languageSettings: Options;
|
||||
}
|
||||
|
||||
export function create(ctx: worker.IWorkerContext, createData: ICreateData): HTMLWorker {
|
||||
return new HTMLWorker(ctx, createData);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "amd",
|
||||
"moduleResolution": "node",
|
||||
"outDir": "../out/amd",
|
||||
"declaration": true,
|
||||
"target": "es5",
|
||||
"lib": ["dom", "es5", "es2015.collection", "es2015.promise", "es2015.iterable"]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
const requirejs = require('requirejs');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const Terser = require('terser');
|
||||
const helpers = require('monaco-plugin-helpers');
|
||||
|
||||
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
||||
|
||||
const sha1 = helpers.getGitVersion(REPO_ROOT);
|
||||
const semver = require('../../package.json').version;
|
||||
const headerVersion = semver + '(' + sha1 + ')';
|
||||
|
||||
const BUNDLED_FILE_HEADER = [
|
||||
'/*!-----------------------------------------------------------------------------',
|
||||
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
||||
' * monaco-json version: ' + headerVersion,
|
||||
' * Released under the MIT license',
|
||||
' * https://github.com/Microsoft/monaco-json/blob/master/LICENSE.md',
|
||||
' *-----------------------------------------------------------------------------*/',
|
||||
''
|
||||
].join('\n');
|
||||
|
||||
bundleOne('monaco.contribution');
|
||||
bundleOne('jsonMode', ['vs/language/json/monaco.contribution']);
|
||||
bundleOne('jsonWorker');
|
||||
|
||||
function bundleOne(moduleId, exclude) {
|
||||
requirejs.optimize(
|
||||
{
|
||||
baseUrl: 'out/amd/',
|
||||
name: 'vs/language/json/' + moduleId,
|
||||
out: 'release/dev/' + moduleId + '.js',
|
||||
exclude: exclude,
|
||||
paths: {
|
||||
'vs/language/json': REPO_ROOT + '/monaco-json/out/amd',
|
||||
'vs/language/json/fillers/monaco-editor-core':
|
||||
REPO_ROOT + '/monaco-json/out/amd/fillers/monaco-editor-core-amd'
|
||||
},
|
||||
optimize: 'none',
|
||||
packages: [
|
||||
{
|
||||
name: 'vscode-json-languageservice',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-json-languageservice/lib/umd'),
|
||||
main: 'jsonLanguageService'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-types',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-types/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-languageserver-textdocument',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-textdocument/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'jsonc-parser',
|
||||
location: path.join(REPO_ROOT, 'node_modules/jsonc-parser/lib/umd'),
|
||||
main: 'main'
|
||||
},
|
||||
{
|
||||
name: 'vscode-uri',
|
||||
location: path.join(REPO_ROOT, 'node_modules/vscode-uri/lib/umd'),
|
||||
main: 'index'
|
||||
},
|
||||
{
|
||||
name: 'vscode-nls',
|
||||
location: path.join(REPO_ROOT, 'monaco-json/out/amd/fillers'),
|
||||
main: 'vscode-nls'
|
||||
}
|
||||
]
|
||||
},
|
||||
async function (buildResponse) {
|
||||
const devFilePath = path.join(REPO_ROOT, 'monaco-json/release/dev/' + moduleId + '.js');
|
||||
const minFilePath = path.join(REPO_ROOT, 'monaco-json/release/min/' + moduleId + '.js');
|
||||
const fileContents = fs.readFileSync(devFilePath).toString();
|
||||
console.log(`Minifying ${devFilePath}...`);
|
||||
const result = await Terser.minify(fileContents, {
|
||||
output: {
|
||||
comments: 'some'
|
||||
}
|
||||
});
|
||||
console.log(`Done minifying ${devFilePath}.`);
|
||||
try {
|
||||
fs.mkdirSync(path.join(REPO_ROOT, 'monaco-json/release/min'));
|
||||
} catch (err) {}
|
||||
fs.writeFileSync(minFilePath, BUNDLED_FILE_HEADER + result.code);
|
||||
}
|
||||
);
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export interface Options {
|
||||
locale?: string;
|
||||
cacheLanguageResolution?: boolean;
|
||||
}
|
||||
export interface LocalizeInfo {
|
||||
key: string;
|
||||
comment: string[];
|
||||
}
|
||||
export interface LocalizeFunc {
|
||||
(info: LocalizeInfo, message: string, ...args: any[]): string;
|
||||
(key: string, message: string, ...args: any[]): string;
|
||||
}
|
||||
export interface LoadFunc {
|
||||
(file?: string): LocalizeFunc;
|
||||
}
|
||||
|
||||
function format(message: string, args: any[]): string {
|
||||
let result: string;
|
||||
|
||||
if (args.length === 0) {
|
||||
result = message;
|
||||
} else {
|
||||
result = message.replace(/\{(\d+)\}/g, (match, rest) => {
|
||||
let index = rest[0];
|
||||
return typeof args[index] !== 'undefined' ? args[index] : match;
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function localize(key: string | LocalizeInfo, message: string, ...args: any[]): string {
|
||||
return format(message, args);
|
||||
}
|
||||
|
||||
export function loadMessageBundle(file?: string): LocalizeFunc {
|
||||
return localize;
|
||||
}
|
||||
|
||||
export function config(opt?: Options | string): LoadFunc {
|
||||
return loadMessageBundle;
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as jsonService from 'vscode-json-languageservice';
|
||||
import type { worker } from './fillers/monaco-editor-core';
|
||||
import { URI } from 'vscode-uri';
|
||||
import { DiagnosticsOptions } from './monaco.contribution';
|
||||
|
||||
let defaultSchemaRequestService;
|
||||
if (typeof fetch !== 'undefined') {
|
||||
defaultSchemaRequestService = function (url) {
|
||||
return fetch(url).then((response) => response.text());
|
||||
};
|
||||
}
|
||||
|
||||
export class JSONWorker {
|
||||
private _ctx: worker.IWorkerContext;
|
||||
private _languageService: jsonService.LanguageService;
|
||||
private _languageSettings: DiagnosticsOptions;
|
||||
private _languageId: string;
|
||||
|
||||
constructor(ctx: worker.IWorkerContext, createData: ICreateData) {
|
||||
this._ctx = ctx;
|
||||
this._languageSettings = createData.languageSettings;
|
||||
this._languageId = createData.languageId;
|
||||
this._languageService = jsonService.getLanguageService({
|
||||
workspaceContext: {
|
||||
resolveRelativePath: (relativePath: string, resource: string) => {
|
||||
const base = resource.substr(0, resource.lastIndexOf('/') + 1);
|
||||
return resolvePath(base, relativePath);
|
||||
}
|
||||
},
|
||||
schemaRequestService: createData.enableSchemaRequest && defaultSchemaRequestService
|
||||
});
|
||||
this._languageService.configure(this._languageSettings);
|
||||
}
|
||||
|
||||
async doValidation(uri: string): Promise<jsonService.Diagnostic[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
if (document) {
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
return this._languageService.doValidation(document, jsonDocument, this._languageSettings);
|
||||
}
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
async doComplete(
|
||||
uri: string,
|
||||
position: jsonService.Position
|
||||
): Promise<jsonService.CompletionList> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
return this._languageService.doComplete(document, position, jsonDocument);
|
||||
}
|
||||
async doResolve(item: jsonService.CompletionItem): Promise<jsonService.CompletionItem> {
|
||||
return this._languageService.doResolve(item);
|
||||
}
|
||||
async doHover(uri: string, position: jsonService.Position): Promise<jsonService.Hover> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
return this._languageService.doHover(document, position, jsonDocument);
|
||||
}
|
||||
async format(
|
||||
uri: string,
|
||||
range: jsonService.Range,
|
||||
options: jsonService.FormattingOptions
|
||||
): Promise<jsonService.TextEdit[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let textEdits = this._languageService.format(document, range, options);
|
||||
return Promise.resolve(textEdits);
|
||||
}
|
||||
async resetSchema(uri: string): Promise<boolean> {
|
||||
return Promise.resolve(this._languageService.resetSchema(uri));
|
||||
}
|
||||
async findDocumentSymbols(uri: string): Promise<jsonService.SymbolInformation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
let symbols = this._languageService.findDocumentSymbols(document, jsonDocument);
|
||||
return Promise.resolve(symbols);
|
||||
}
|
||||
async findDocumentColors(uri: string): Promise<jsonService.ColorInformation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
let colorSymbols = this._languageService.findDocumentColors(document, jsonDocument);
|
||||
return Promise.resolve(colorSymbols);
|
||||
}
|
||||
async getColorPresentations(
|
||||
uri: string,
|
||||
color: jsonService.Color,
|
||||
range: jsonService.Range
|
||||
): Promise<jsonService.ColorPresentation[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
let colorPresentations = this._languageService.getColorPresentations(
|
||||
document,
|
||||
jsonDocument,
|
||||
color,
|
||||
range
|
||||
);
|
||||
return Promise.resolve(colorPresentations);
|
||||
}
|
||||
async getFoldingRanges(
|
||||
uri: string,
|
||||
context?: { rangeLimit?: number }
|
||||
): Promise<jsonService.FoldingRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let ranges = this._languageService.getFoldingRanges(document, context);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
async getSelectionRanges(
|
||||
uri: string,
|
||||
positions: jsonService.Position[]
|
||||
): Promise<jsonService.SelectionRange[]> {
|
||||
let document = this._getTextDocument(uri);
|
||||
let jsonDocument = this._languageService.parseJSONDocument(document);
|
||||
let ranges = this._languageService.getSelectionRanges(document, positions, jsonDocument);
|
||||
return Promise.resolve(ranges);
|
||||
}
|
||||
private _getTextDocument(uri: string): jsonService.TextDocument {
|
||||
let models = this._ctx.getMirrorModels();
|
||||
for (let model of models) {
|
||||
if (model.uri.toString() === uri) {
|
||||
return jsonService.TextDocument.create(
|
||||
uri,
|
||||
this._languageId,
|
||||
model.version,
|
||||
model.getValue()
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// URI path utilities, will (hopefully) move to vscode-uri
|
||||
|
||||
const Slash = '/'.charCodeAt(0);
|
||||
const Dot = '.'.charCodeAt(0);
|
||||
|
||||
function isAbsolutePath(path: string) {
|
||||
return path.charCodeAt(0) === Slash;
|
||||
}
|
||||
|
||||
function resolvePath(uriString: string, path: string): string {
|
||||
if (isAbsolutePath(path)) {
|
||||
const uri = URI.parse(uriString);
|
||||
const parts = path.split('/');
|
||||
return uri.with({ path: normalizePath(parts) }).toString();
|
||||
}
|
||||
return joinPath(uriString, path);
|
||||
}
|
||||
|
||||
function normalizePath(parts: string[]): string {
|
||||
const newParts: string[] = [];
|
||||
for (const part of parts) {
|
||||
if (part.length === 0 || (part.length === 1 && part.charCodeAt(0) === Dot)) {
|
||||
// ignore
|
||||
} else if (part.length === 2 && part.charCodeAt(0) === Dot && part.charCodeAt(1) === Dot) {
|
||||
newParts.pop();
|
||||
} else {
|
||||
newParts.push(part);
|
||||
}
|
||||
}
|
||||
if (parts.length > 1 && parts[parts.length - 1].length === 0) {
|
||||
newParts.push('');
|
||||
}
|
||||
let res = newParts.join('/');
|
||||
if (parts[0].length === 0) {
|
||||
res = '/' + res;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
function joinPath(uriString: string, ...paths: string[]): string {
|
||||
const uri = URI.parse(uriString);
|
||||
const parts = uri.path.split('/');
|
||||
for (let path of paths) {
|
||||
parts.push(...path.split('/'));
|
||||
}
|
||||
return uri.with({ path: normalizePath(parts) }).toString();
|
||||
}
|
||||
|
||||
export interface ICreateData {
|
||||
languageId: string;
|
||||
languageSettings: DiagnosticsOptions;
|
||||
enableSchemaRequest: boolean;
|
||||
}
|
||||
|
||||
export function create(ctx: worker.IWorkerContext, createData: ICreateData): JSONWorker {
|
||||
return new JSONWorker(ctx, createData);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "amd",
|
||||
"moduleResolution": "node",
|
||||
"outDir": "../out/amd",
|
||||
"declaration": true,
|
||||
"target": "es5",
|
||||
"lib": ["dom", "es5", "es2015.collection", "es2015.promise", "es2015.iterable"]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# SITE-07 Monaco CSS/HTML/JSON worker 来源复现
|
||||
|
||||
修改前 HEAD:11296975f100e027f7dcbf7e5be6663bc9978cd3。
|
||||
|
||||
本批把临时比对变成可联网准备、离线重复执行的源码验证,覆盖三个完整 worker。
|
||||
保留现有 Monaco 0.30.1 运行资产、路径和 API;没有升级编辑器或修改其压缩文件。
|
||||
|
||||
## 实现与证据边界
|
||||
|
||||
- 固定 11 份 npm 归档,检查 SHA-256 和 SHA-512;编译输入取自已有固定上游锁。
|
||||
source-map 0.7.3 是 Terser 的嵌套依赖,不能误取根层的 0.6.1。
|
||||
- 固定 13 份 Git 源码:既有根锁,加三个包各自的 bundle 配方、编译配置、
|
||||
本地化 shim 和 worker 适配器;同时检查 Git blob SHA 与内容 SHA-256。
|
||||
- 七个 npm 包的 91 个完整 UMD 源文件、八个根别名、一个共享 shim 和三个
|
||||
worker 适配器,组成 CSS/HTML/JSON 的 48/38/33 个模块实例。完整片段逐字匹配,
|
||||
模块之间仅允许空白,不能遗漏 define 外的辅助代码、额外模块或依赖路径变化。
|
||||
- 三个完整开发版 worker 经原 Terser 5.9.0 配方和头部处理,与当前压缩产物
|
||||
逐字节相等。`vscode-nls` 来自 Monaco 自有 filler,三个文件相同,不是锁里的
|
||||
同名 npm 实现。适配器用 TypeScript 4.4.4 与其原始标准库发射;只证明产物,
|
||||
未恢复整个上游工程的语义类型检查和安装流程。
|
||||
|
||||
新增 archives.ts 管理隔离归档与编译器输入;languages.ts 管理 AMD 命名及全文件
|
||||
源码覆盖;reproduce-languages.ts 组织固定输入、适配器发射、全部来源及压缩验证。
|
||||
脚本 `yarn verify:monaco-language-sources [--fetch]` 不执行服务运行时或安装脚本。
|
||||
Node 24.21.0 / Yarn 1.22.22、根依赖及 yarn.lock 保持不变。
|
||||
|
||||
核验实际发现并处理了几个差异,未放宽检查绕过:
|
||||
|
||||
1. 无结尾换行的 types/main 与 uri/index 源映射注释被旧优化器保留并追加分号。
|
||||
按实际字节恢复,而不是忽略所有未覆盖文本。
|
||||
2. 单文件 transpileModule 的 Promise 类型解析与真实程序发射不同;改用固定
|
||||
编译器和标准库的程序发射。未解析的服务 import 不被声称为类型检查通过。
|
||||
3. 新浏览器测试最初使用了该历史版本不存在的 CSS/HTML/JSON getter;对照原
|
||||
mode manager 后改用公共 createWebWorker 和相同 createData,并检查实际 Worker。
|
||||
4. HTML 格式器保留行内 span 是正常行为;格式化样本改用应分行的块元素 p,
|
||||
仍要求实际多行编辑,未删除格式断言。
|
||||
|
||||
## 验证与下一步
|
||||
|
||||
单元 4/4,通过真实源码复现验证 119 个模块实例;严格 docs-tools 类型检查、
|
||||
相关 ESLint、工具链检查通过。联网复现及 Yarn 离线入口通过。新增浏览器用例
|
||||
三引擎 3/3、无重试/跳过,验证 CSS/JSON 正反诊断、HTML 补全/符号、HTML/JSON
|
||||
格式化、实际 Worker 创建及模型/worker 清理。浏览器版本、原始输出指纹和范围
|
||||
见 [验证记录](../baselines/monaco-languages-validation.json)。
|
||||
|
||||
本批不是播放、真机、外部 SDK、远端 CI 或完整站点验收。服务包的完整原始
|
||||
LICENSE/第三方说明及内嵌 beautifier、数据来源继续审查;本批没有宣称许可闭环。
|
||||
Monaco mode bundles、核心内嵌库与语言定义也继续核对。
|
||||
SITE-07 doing / VENDOR-06 open,总计仍 199/265 done。
|
||||
|
||||
回退仅撤销本批来源验证、冻结源码、测试及文档;站点运行资产未变。本地独立
|
||||
checkpoint 提交,没有推送、部署或发布。
|
||||
+1
-1
@@ -653,7 +653,7 @@
|
||||
- SITE-AI-DOCS-01: [记录](changes/2026-09-14-SITE-AI-DOCS-01-documentation-pipeline.md) [记录](baselines/documentation-pipeline-validation.json)
|
||||
- SITE-BUILD-01: [记录](changes/2026-09-14-SITE-BUILD-01-staged-builds.md) [记录](baselines/site-build-validation.json)
|
||||
- SITE-03: [记录](changes/2026-09-14-SITE-03-desktop-editor.md) [记录](baselines/site-editor-validation.json)
|
||||
- SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json) [记录](changes/2026-09-14-SITE-07-vendor-notices.md) [记录](baselines/site-notices-checkpoint.json) [记录](baselines/site-codicons-provenance.json) [记录](baselines/site-codicons-validation.json) [记录](changes/2026-09-15-SITE-07-codicons.md) [记录](baselines/vconsole-notices-provenance.json) [记录](baselines/vconsole-notices-validation.json) [记录](changes/2026-09-15-SITE-07-vconsole-notices.md) [记录](console-modernization.md) [记录](baselines/site-console-inventory.json) [记录](baselines/site-console-validation.json) [记录](changes/2026-09-15-SITE-07-console-baseline.md) [记录](baselines/console-feed-provenance.json) [记录](changes/2026-09-15-SITE-07-console-feed-source.md) [记录](baselines/console-commonjs-provenance.json) [记录](changes/2026-09-15-SITE-07-console-commonjs.md) [记录](baselines/console-esm-provenance.json) [记录](changes/2026-09-15-SITE-07-console-esm.md) [记录](baselines/console-embedded-notices.json) [记录](baselines/console-notices-validation.json) [记录](changes/2026-09-15-SITE-07-console-notices.md) [记录](baselines/console-embedded-sources.json) [记录](baselines/console-embedded-validation.json) [记录](changes/2026-09-15-SITE-07-console-embedded-sources.md) [记录](baselines/console-derived-attribution.json) [记录](baselines/console-derived-validation.json) [记录](changes/2026-09-15-SITE-07-console-derived-attribution.md) [记录](baselines/console-stackoverflow-provenance.json) [记录](baselines/console-stackoverflow-validation.json) [记录](changes/2026-09-15-SITE-07-console-stackoverflow.md) [记录](baselines/console-shallowequal-validation.json) [记录](changes/2026-09-15-SITE-07-console-shallowequal.md) [记录](console-notice-review.md) [记录](baselines/console-notice-review-validation.json) [记录](changes/2026-09-15-SITE-07-console-notice-review.md) [记录](baselines/monaco-typescript-provenance.json) [记录](baselines/monaco-typescript-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-typescript.md)
|
||||
- SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json) [记录](changes/2026-09-14-SITE-07-vendor-notices.md) [记录](baselines/site-notices-checkpoint.json) [记录](baselines/site-codicons-provenance.json) [记录](baselines/site-codicons-validation.json) [记录](changes/2026-09-15-SITE-07-codicons.md) [记录](baselines/vconsole-notices-provenance.json) [记录](baselines/vconsole-notices-validation.json) [记录](changes/2026-09-15-SITE-07-vconsole-notices.md) [记录](console-modernization.md) [记录](baselines/site-console-inventory.json) [记录](baselines/site-console-validation.json) [记录](changes/2026-09-15-SITE-07-console-baseline.md) [记录](baselines/console-feed-provenance.json) [记录](changes/2026-09-15-SITE-07-console-feed-source.md) [记录](baselines/console-commonjs-provenance.json) [记录](changes/2026-09-15-SITE-07-console-commonjs.md) [记录](baselines/console-esm-provenance.json) [记录](changes/2026-09-15-SITE-07-console-esm.md) [记录](baselines/console-embedded-notices.json) [记录](baselines/console-notices-validation.json) [记录](changes/2026-09-15-SITE-07-console-notices.md) [记录](baselines/console-embedded-sources.json) [记录](baselines/console-embedded-validation.json) [记录](changes/2026-09-15-SITE-07-console-embedded-sources.md) [记录](baselines/console-derived-attribution.json) [记录](baselines/console-derived-validation.json) [记录](changes/2026-09-15-SITE-07-console-derived-attribution.md) [记录](baselines/console-stackoverflow-provenance.json) [记录](baselines/console-stackoverflow-validation.json) [记录](changes/2026-09-15-SITE-07-console-stackoverflow.md) [记录](baselines/console-shallowequal-validation.json) [记录](changes/2026-09-15-SITE-07-console-shallowequal.md) [记录](console-notice-review.md) [记录](baselines/console-notice-review-validation.json) [记录](changes/2026-09-15-SITE-07-console-notice-review.md) [记录](baselines/monaco-typescript-provenance.json) [记录](baselines/monaco-typescript-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-typescript.md) [记录](baselines/monaco-languages-provenance.json) [记录](baselines/monaco-languages-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-languages.md)
|
||||
- EX-01: [记录](changes/2026-09-14-EX-01-react-consumer.md) [记录](baselines/react-consumer-validation.json) [记录](scripts/react-consumer.mjs)
|
||||
- EX-02: [记录](changes/2026-09-14-EX-02-vue-consumer.md) [记录](baselines/vue-consumer-validation.json) [记录](scripts/vue-consumer.mjs)
|
||||
- MOD-01: [记录](changes/2026-09-15-MOD-01-bun-evaluation.md) [记录](baselines/bun-install-validation.json) [记录](bun-evaluation.md)
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# 进度与证据
|
||||
|
||||
## SITE-07 Monaco CSS/HTML/JSON worker
|
||||
|
||||
完成三个 worker 的全部源码片段与压缩产物复现:11 归档、13 Git 来源、119 模块
|
||||
实例,nls 确认为 Monaco 自有 shim。单元 4/4、三引擎真实 worker 诊断/补全/格式化
|
||||
3/3 通过,见[记录](changes/2026-09-15-SITE-07-monaco-languages.md)。运行资产和锁
|
||||
未改;服务包原始 notices 与内嵌来源、mode/core/basic-language 继续审查。
|
||||
SITE-07 doing、VENDOR-06 open,整体 199/265,没有推送或发布。
|
||||
|
||||
## SITE-07 Monaco TypeScript 4.4.4
|
||||
|
||||
核对实际worker与固定提交锁,补充准确版本及三份原始许可/第三方说明,保留
|
||||
|
||||
+7
-2
@@ -629,11 +629,16 @@
|
||||
"refactor/baselines/monaco-typescript-validation.json",
|
||||
"refactor/changes/2026-09-15-SITE-07-monaco-typescript.md",
|
||||
"scripts/site-vendor/monaco/typescript.ts",
|
||||
"scripts/site-vendor/monaco/reproduce-typescript.ts"
|
||||
"scripts/site-vendor/monaco/reproduce-typescript.ts",
|
||||
"refactor/baselines/monaco-languages-provenance.json",
|
||||
"refactor/baselines/monaco-languages-validation.json",
|
||||
"refactor/changes/2026-09-15-SITE-07-monaco-languages.md",
|
||||
"scripts/site-vendor/monaco/languages.ts",
|
||||
"scripts/site-vendor/monaco/reproduce-languages.ts"
|
||||
],
|
||||
"compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.",
|
||||
"closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。",
|
||||
"workspaceState": "Monaco 0.30.1 TypeScript worker identifies 4.4.4, unlike the original stale 2.7.2 notice. Fixed Git lock/recipes and four archives prove the 9698327-character adapted service segment and exact minified worker. Three original TypeScript notices plus a version/modification explanation are delivered. Unit 10/10 and three-engine editor/notice checks 6/6 pass. Other language services, shim, core embedded libraries and language definitions remain under review; VENDOR-06 is open."
|
||||
"workspaceState": "Monaco 0.30.1 TypeScript worker identifies 4.4.4, unlike the original stale 2.7.2 notice. Fixed Git lock/recipes and four archives prove the 9698327-character adapted service segment and exact minified worker. Three original TypeScript notices plus a version/modification explanation are delivered. Unit 10/10 and three-engine editor/notice checks 6/6 pass. Other language services, shim, core embedded libraries and language definitions remain under review; VENDOR-06 is open. CSS/HTML/JSON complete workers now have exact source coverage for 119 module instances from 91 npm sources, 8 aliases, a shared Monaco-owned nls shim and three adapters; 11 archives/13 Git sources and all three minified outputs match. Four unit tests and three real-engine diagnostics/completion/formatting checks pass. Service notices, embedded attribution, mode bundles, core and basic languages remain open."
|
||||
},
|
||||
{
|
||||
"id": "VENDOR-07",
|
||||
|
||||
+4
-1
@@ -4514,7 +4514,10 @@
|
||||
"changes/2026-09-15-SITE-07-console-notice-review.md",
|
||||
"baselines/monaco-typescript-provenance.json",
|
||||
"baselines/monaco-typescript-validation.json",
|
||||
"changes/2026-09-15-SITE-07-monaco-typescript.md"
|
||||
"changes/2026-09-15-SITE-07-monaco-typescript.md",
|
||||
"baselines/monaco-languages-provenance.json",
|
||||
"baselines/monaco-languages-validation.json",
|
||||
"changes/2026-09-15-SITE-07-monaco-languages.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -40,8 +40,49 @@ CopyrightNotice and ThirdPartyNoticeText. The last file includes upstream third-
|
||||
terms, not just Apache 2.0. Preserve raw bytes, including encoding and line endings.
|
||||
The new attribution explains upstream modifications and the stale version label.
|
||||
|
||||
The other language services, localization shim, core embedded libraries and
|
||||
language definitions remain under VENDOR-06 review. A match for this worker does
|
||||
not close those components. Revalidate actual editor diagnostics/emission and
|
||||
notice HTTP delivery after changes; use the committed editor-types and site-vendor
|
||||
browser tests. Whole-site, physical-device and remote release gates remain separate.
|
||||
## CSS, HTML and JSON workers
|
||||
|
||||
`languages.ts` names anonymous AMD modules syntactically, accounts for exact map
|
||||
trailers and package aliases, and checks every source fragment and intervening byte.
|
||||
It rejects missing modules, renamed dependencies, uncovered helper code, overlaps
|
||||
and duplicate definitions. The npm sources are whole UMD files, including their
|
||||
helpers and comments; module bodies alone are insufficient evidence.
|
||||
|
||||
`archives.ts` verifies archives and fixed Git files and extracts only historical
|
||||
compiler inputs into the isolated cache. `reproduce-languages.ts` uses the fixed
|
||||
upstream lock and recipes to match 91 npm modules from seven packages, eight root
|
||||
aliases, the shared Monaco localization shim and three worker adapters. The complete
|
||||
CSS/HTML/JSON development files contain 48/38/33 module instances respectively.
|
||||
All bytes except whitespace are assigned to a verified source fragment. Terser
|
||||
5.9.0 with the original options and header reproduces all three shipped workers.
|
||||
|
||||
The shim is Monaco's own `src/fillers/vscode-nls.ts`, identical in the three packages;
|
||||
it is not the installed `vscode-nls` npm implementation. Compile the shim and worker
|
||||
adapters with TypeScript 4.4.4 and its ES5/DOM/collection/promise/iterable libraries.
|
||||
The compiler program intentionally omits import resolution; exact emission is
|
||||
verified, but this is not a full upstream build or semantic typecheck. Standalone
|
||||
`transpileModule` changes an async helper's Promise argument and does not reproduce
|
||||
these adapters. No service runtime or install script executes during source checks.
|
||||
|
||||
```sh
|
||||
yarn verify:monaco-language-sources --fetch
|
||||
yarn verify:monaco-language-sources
|
||||
node --test test/monaco-provenance.test.js
|
||||
yarn typecheck:docs-tools
|
||||
yarn test:browser test/browser/editor-languages.spec.js --workers=1
|
||||
```
|
||||
|
||||
The source record is `refactor/baselines/monaco-languages-provenance.json`; its 13
|
||||
fixed Git references include the shared upstream lock plus all three bundle recipes,
|
||||
compiler configs, shims and adapters. The browser suite creates real workers with
|
||||
Monaco's public `createWebWorker`, using the archived mode-manager options, and
|
||||
disposes both workers and models. Monaco 0.30.1 has no public CSS/HTML/JSON worker
|
||||
getter equivalent to `getTypeScriptWorker`. Tests exercise valid/invalid CSS and
|
||||
JSON, HTML tag completion, document symbols, and HTML/JSON formatting on three engines.
|
||||
|
||||
This source checkpoint does not close embedded license review. Follow up with the
|
||||
seven packages' original licenses/third-party notices, including HTML beautifiers
|
||||
and data sources. Core embedded libraries, mode bundles and language definitions
|
||||
also remain under VENDOR-06. Revalidate editor-types and site-vendor tests when
|
||||
changing declarations or delivered notices. Whole-site, physical-device and remote
|
||||
release gates remain separate.
|
||||
@@ -0,0 +1,80 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { Buffer } from 'node:buffer'
|
||||
import { execFileSync } from 'node:child_process'
|
||||
import { createHash } from 'node:crypto'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
export interface Archive { name: string, version: string, tarball: string, integrity: string, sha256: string }
|
||||
export interface Member { archive: string, member: string, sha256: string }
|
||||
export interface Remote { source: string, sha256: string, gitBlobSha: string, apiUrl: string }
|
||||
export const hash = (bytes: Uint8Array) => createHash('sha256').update(bytes).digest('hex')
|
||||
|
||||
async function download(url: string): Promise<Buffer> {
|
||||
const response = await fetch(url, { signal: AbortSignal.timeout(60000) })
|
||||
assert(response.ok, `${url}: HTTP ${response.status}`)
|
||||
return Buffer.from(await response.arrayBuffer())
|
||||
}
|
||||
|
||||
// Historical inputs stay in an isolated cache; never install their package scripts.
|
||||
export class ArchiveCache {
|
||||
readonly root: string
|
||||
readonly directory: string
|
||||
|
||||
constructor(root: string, directory: string) {
|
||||
this.root = root
|
||||
this.directory = directory
|
||||
fs.mkdirSync(directory, { recursive: true })
|
||||
assert.equal(fs.realpathSync(directory).toLowerCase(), path.resolve(directory).toLowerCase(), 'Redirected Monaco cache')
|
||||
}
|
||||
|
||||
async verify(archives: Archive[], remotes: Remote[], fetch: boolean): Promise<void> {
|
||||
for (const archive of archives) {
|
||||
const file = path.join(this.directory, `${archive.name}-${archive.version}.tgz`)
|
||||
const bytes = fetch ? await download(archive.tarball) : fs.readFileSync(file)
|
||||
assert.equal(hash(bytes), archive.sha256, `Monaco archive changed: ${archive.name}`)
|
||||
assert.equal(`sha512-${createHash('sha512').update(bytes).digest('base64')}`, archive.integrity, 'Monaco archive integrity changed')
|
||||
if (fetch)
|
||||
fs.writeFileSync(file, bytes)
|
||||
}
|
||||
for (const remote of remotes) {
|
||||
const verify = (bytes: Buffer) => {
|
||||
assert.equal(hash(bytes), remote.sha256, 'Monaco fixed Git content changed')
|
||||
assert.equal(createHash('sha1').update(`blob ${bytes.length}\0`).update(bytes).digest('hex'), remote.gitBlobSha, 'Monaco Git blob changed')
|
||||
}
|
||||
verify(fs.readFileSync(path.join(this.root, remote.source)))
|
||||
if (fetch) {
|
||||
const data: { encoding: string, content: string } = JSON.parse((await download(remote.apiUrl)).toString('utf8'))
|
||||
assert.equal(data.encoding, 'base64', 'Expected Git content encoding')
|
||||
verify(Buffer.from(data.content, 'base64'))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
read(archive: string, member: string): Buffer {
|
||||
return execFileSync('tar', ['-xOzf', path.join(this.directory, `${archive}.tgz`), member], { maxBuffer: 20 * 1024 * 1024 })
|
||||
}
|
||||
|
||||
member(member: Member): Buffer {
|
||||
const bytes = this.read(member.archive, member.member)
|
||||
assert.equal(hash(bytes), member.sha256, `Monaco source member changed: ${member.member}`)
|
||||
return bytes
|
||||
}
|
||||
|
||||
extractCompiler(archive: Archive): void {
|
||||
const name = `${archive.name}-${archive.version}`
|
||||
const members = execFileSync('tar', ['-tzf', path.join(this.directory, `${name}.tgz`)], { encoding: 'utf8' }).trim().split(/\r?\n/)
|
||||
const directory = path.join(this.directory, 'compiler/node_modules', archive.name)
|
||||
fs.mkdirSync(directory, { recursive: true })
|
||||
assert.equal(fs.realpathSync(directory).toLowerCase(), path.resolve(directory).toLowerCase(), 'Redirected compiler directory')
|
||||
for (const member of members.filter(member => !member.endsWith('/'))) {
|
||||
assert(member.startsWith('package/') && !member.includes('\\') && !member.split('/').includes('..'), 'Unsafe compiler archive member')
|
||||
const destination = path.resolve(directory, member.slice('package/'.length))
|
||||
assert(destination.startsWith(`${directory}${path.sep}`), 'Compiler member escapes cache')
|
||||
fs.mkdirSync(path.dirname(destination), { recursive: true })
|
||||
assert.equal(fs.realpathSync(path.dirname(destination)).toLowerCase(), path.dirname(destination).toLowerCase(), 'Redirected compiler member directory')
|
||||
assert(!fs.existsSync(destination) || !fs.lstatSync(destination).isSymbolicLink(), 'Redirected compiler file')
|
||||
fs.writeFileSync(destination, this.read(name, member))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import ts from 'typescript'
|
||||
|
||||
function definitions(source: string): ts.CallExpression[] {
|
||||
const ast = ts.createSourceFile('worker.js', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS)
|
||||
const result: ts.CallExpression[] = []
|
||||
const walk = (node: ts.Node) => {
|
||||
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === 'define')
|
||||
result.push(node)
|
||||
ts.forEachChild(node, walk)
|
||||
}
|
||||
walk(ast)
|
||||
return result
|
||||
}
|
||||
|
||||
export function moduleIds(source: string): string[] {
|
||||
const ids = definitions(source).map((call) => {
|
||||
assert(call.arguments[0] && ts.isStringLiteral(call.arguments[0]), 'Expected literal AMD name')
|
||||
return call.arguments[0].text
|
||||
})
|
||||
assert.equal(new Set(ids).size, ids.length, 'Duplicate AMD module')
|
||||
return ids
|
||||
}
|
||||
|
||||
// RequireJS names one anonymous AMD definition and removes newline-ended maps.
|
||||
// Locate the call syntactically so comments/strings containing define( are inert.
|
||||
export function nameModule(source: string, id: string): string {
|
||||
assert(/^[\w/-]+$/.test(id), 'Unexpected AMD identifier')
|
||||
const calls = definitions(source)
|
||||
assert.equal(calls.length, 1, 'Expected one anonymous AMD definition')
|
||||
const call = calls[0]!
|
||||
assert(call.arguments[0] && ts.isArrayLiteralExpression(call.arguments[0]), 'Expected anonymous AMD dependency array')
|
||||
const offset = call.expression.end
|
||||
assert.equal(source[offset], '(', 'Unexpected AMD opening boundary')
|
||||
const map = /^\/\/# sourceMappingURL=[^\r\n]+(?:\r?\n)?$/gm
|
||||
const maps = [...source.matchAll(map)]
|
||||
assert(maps.length <= 1, 'Duplicate source map trailer')
|
||||
source = `${source.slice(0, offset + 1)}'${id}',${source.slice(offset + 1)}`
|
||||
// types/main and uri/index have no final newline. The archived optimizer kept
|
||||
// their map comment and appended a semicolon; account for those bytes too.
|
||||
if (maps[0] && !maps[0][0].endsWith('\n'))
|
||||
return `${source};`
|
||||
return source.replace(map, '').trimEnd()
|
||||
}
|
||||
|
||||
export function aliasModule(id: string, main: string): string {
|
||||
assert(/^[\w-]+$/.test(id) && /^[\w/-]+$/.test(main), 'Unexpected AMD alias')
|
||||
return `define('${id}', ['${id}/${main}'], function (main) { return main; });`
|
||||
}
|
||||
|
||||
// Check whole source fragments, their module ownership and every intervening byte.
|
||||
// A module inventory alone would overlook helper code outside define() calls.
|
||||
export function verifyWorkerSources(worker: string, ids: string[], fragments: { id: string, source: string }[]): void {
|
||||
assert.deepEqual(moduleIds(worker), ids, 'Worker AMD inventory changed')
|
||||
assert.deepEqual(fragments.map(item => item.id).sort(), [...ids].sort(), 'Incomplete source coverage')
|
||||
const intervals = fragments.map(({ id, source }) => {
|
||||
assert.deepEqual(moduleIds(source), [id], 'Wrong source module ownership')
|
||||
const start = worker.indexOf(source)
|
||||
assert(start >= 0, `Source differs: ${id}`)
|
||||
assert.equal(worker.indexOf(source, start + 1), -1, `Repeated source: ${id}`)
|
||||
return { start, end: start + source.length }
|
||||
}).sort((a, b) => a.start - b.start)
|
||||
let end = 0
|
||||
for (const interval of intervals) {
|
||||
assert(interval.start >= end, 'Overlapping source fragments')
|
||||
assert.equal(worker.slice(end, interval.start).trim(), '', 'Unattributed worker content')
|
||||
end = interval.end
|
||||
}
|
||||
assert.equal(worker.slice(end).trim(), '', 'Unattributed worker suffix')
|
||||
}
|
||||
|
||||
export function languageHeader(language: string): string {
|
||||
assert(['css', 'html', 'json'].includes(language), 'Unexpected Monaco language')
|
||||
return `/*!-----------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* monaco-${language} version: 0.30.1(5a7ba61be909ae9e4889768a3453ebb0dec392e2)
|
||||
* Released under the MIT license
|
||||
* https://github.com/Microsoft/monaco-${language}/blob/master/LICENSE.md
|
||||
*-----------------------------------------------------------------------------*/
|
||||
`
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
import type { Archive, Member, Remote } from './archives.ts'
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import { createRequire } from 'node:module'
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { ArchiveCache, hash } from './archives.ts'
|
||||
import { aliasModule, languageHeader, nameModule, verifyWorkerSources } from './languages.ts'
|
||||
|
||||
interface Provenance {
|
||||
archives: Archive[]
|
||||
remotes: Remote[]
|
||||
compilerMembers: Member[]
|
||||
modules: (Member & { id: string })[]
|
||||
aliases: { id: string, main: string }[]
|
||||
workers: {
|
||||
language: string
|
||||
development: Member
|
||||
target: { path: string, sha256: string }
|
||||
ids: string[]
|
||||
source: string
|
||||
shim: string
|
||||
config: string
|
||||
}[]
|
||||
}
|
||||
const root = fileURLToPath(new URL('../../../', import.meta.url))
|
||||
assert(process.argv.slice(2).every(arg => arg === '--fetch'), 'Use reproduce-languages.ts [--fetch]')
|
||||
assert.equal(process.version, `v${fs.readFileSync(path.join(root, '.node-version'), 'utf8').trim()}`, 'Use canonical Node')
|
||||
const record: Provenance = JSON.parse(fs.readFileSync(path.join(root, 'refactor/baselines/monaco-languages-provenance.json'), 'utf8'))
|
||||
assert.deepEqual(record.workers.map(worker => worker.language), ['css', 'html', 'json'], 'Missing language worker')
|
||||
assert.equal(record.modules.length, 91, 'Missing historical npm module')
|
||||
assert.equal(new Set(record.modules.map(member => member.id)).size, 91, 'Duplicate npm module source')
|
||||
assert.equal(record.aliases.length, 8, 'Missing historical package alias')
|
||||
assert.equal(new Set(record.aliases.map(alias => alias.id)).size, 8, 'Duplicate package alias')
|
||||
const lock = JSON.parse(fs.readFileSync(path.join(root, 'refactor/baselines/site-vendor/monaco-typescript/package-lock.json.txt'), 'utf8'))
|
||||
for (const archive of record.archives.filter(item => item.name !== 'monaco-editor')) {
|
||||
const entry = archive.name === 'source-map' ? lock.dependencies.terser.dependencies['source-map'] : lock.dependencies[archive.name]
|
||||
assert(entry && entry.version === archive.version && entry.resolved === archive.tarball && entry.integrity === archive.integrity, 'Archive differs from the fixed upstream lock')
|
||||
}
|
||||
for (const member of record.modules) {
|
||||
const [name, ...parts] = member.id.split('/')
|
||||
const archive = record.archives.find(item => item.name === name)
|
||||
assert(archive && member.archive === `${name}-${archive.version}`, 'Wrong module archive binding')
|
||||
assert.equal(member.member, `package/lib/umd/${parts.join('/')}.js`, 'Wrong UMD source path')
|
||||
}
|
||||
const cache = new ArchiveCache(root, path.join(root, 'refactor/.cache/monaco-review'))
|
||||
await cache.verify(record.archives, record.remotes, process.argv.includes('--fetch'))
|
||||
for (const name of ['typescript', 'terser', 'source-map']) {
|
||||
const archive = record.archives.find(item => item.name === name)
|
||||
assert(archive, 'Missing historical compiler dependency')
|
||||
cache.extractCompiler(archive)
|
||||
}
|
||||
for (const member of record.compilerMembers)
|
||||
cache.member(member)
|
||||
const require = createRequire(path.join(cache.directory, 'compiler/entry.cjs'))
|
||||
const ts = require('typescript') as typeof import('typescript')
|
||||
|
||||
const terser = require('terser') as { minify: (source: string, options: { output: { comments: string } }) => Promise<{ code: string }> }
|
||||
|
||||
assert.equal(ts.version, '4.4.4', 'Wrong TypeScript compiler')
|
||||
assert.equal(require('terser/package.json').version, '5.9.0', 'Wrong Terser compiler')
|
||||
|
||||
assert.equal(require('source-map/package.json').version, '0.7.3', 'Wrong minifier dependency')
|
||||
|
||||
function compile(source: string): string {
|
||||
// Emit with the real pinned standard libraries. Isolated transpileModule loses
|
||||
// Promise type resolution and emits a different async helper argument here.
|
||||
// Unresolved service imports are intentionally not a full upstream typecheck.
|
||||
const options: import('typescript').CompilerOptions = {
|
||||
target: ts.ScriptTarget.ES5,
|
||||
module: ts.ModuleKind.AMD,
|
||||
newLine: ts.NewLineKind.LineFeed,
|
||||
noResolve: true,
|
||||
lib: ['lib.es5.d.ts', 'lib.dom.d.ts', 'lib.es2015.collection.d.ts', 'lib.es2015.promise.d.ts', 'lib.es2015.iterable.d.ts'],
|
||||
}
|
||||
const host = ts.createCompilerHost(options)
|
||||
const getSourceFile = host.getSourceFile.bind(host)
|
||||
host.getSourceFile = (file, languageVersion, onError, createNew) => file === 'worker.ts'
|
||||
? ts.createSourceFile(file, source, languageVersion, true)
|
||||
: getSourceFile(file, languageVersion, onError, createNew)
|
||||
let output = ''
|
||||
host.writeFile = (file, text) => {
|
||||
assert(file.endsWith('.js') && !output, 'Unexpected compiler output')
|
||||
output = text
|
||||
}
|
||||
const program = ts.createProgram(['worker.ts'], options, host)
|
||||
const result = program.emit()
|
||||
assert(!result.emitSkipped && output, 'Missing language source emission')
|
||||
return output
|
||||
}
|
||||
const modules = new Map(record.modules.map(member => [member.id, nameModule(cache.member(member).toString('utf8'), member.id)]))
|
||||
const aliases = new Map(record.aliases.map(alias => [alias.id, aliasModule(alias.id, alias.main)]))
|
||||
const results = []
|
||||
for (const worker of record.workers) {
|
||||
const config = JSON.parse(fs.readFileSync(path.join(root, worker.config), 'utf8')).compilerOptions
|
||||
assert.equal(config.module, 'amd')
|
||||
assert.equal(config.target, 'es5')
|
||||
assert.deepEqual(config.lib, ['dom', 'es5', 'es2015.collection', 'es2015.promise', 'es2015.iterable'])
|
||||
const ownId = `vs/language/${worker.language}/${worker.language}Worker`
|
||||
const local = new Map([
|
||||
[ownId, nameModule(compile(fs.readFileSync(path.join(root, worker.source), 'utf8')), ownId)],
|
||||
['vscode-nls/vscode-nls', nameModule(compile(fs.readFileSync(path.join(root, worker.shim), 'utf8')), 'vscode-nls/vscode-nls')],
|
||||
])
|
||||
const development = cache.member(worker.development).toString('utf8')
|
||||
const fragments = worker.ids.map((id) => {
|
||||
const source = local.get(id) ?? modules.get(id) ?? aliases.get(id)
|
||||
assert(source, `Missing source for ${id}`)
|
||||
return { id, source }
|
||||
})
|
||||
verifyWorkerSources(development, worker.ids, fragments)
|
||||
const target = fs.readFileSync(path.join(root, worker.target.path))
|
||||
assert.equal(hash(target), worker.target.sha256, 'Shipped Monaco language worker changed')
|
||||
const { code } = await terser.minify(development, { output: { comments: 'some' } })
|
||||
assert.equal(languageHeader(worker.language) + code, target.toString('utf8'), 'Minified language worker differs')
|
||||
results.push({ language: worker.language, modules: worker.ids.length, exactSources: true, exactWorker: true, sha256: hash(target) })
|
||||
}
|
||||
console.log(JSON.stringify({ archives: record.archives.length, gitSources: record.remotes.length, npmModules: modules.size, aliases: aliases.size, workers: results, licenseReviewComplete: false, otherMonacoComponentsReviewed: false }))
|
||||
@@ -1,5 +1,12 @@
|
||||
# Browser regression entry
|
||||
|
||||
`editor-languages.spec.js` loads the frozen Monaco 0.30.1 CSS/HTML/JSON workers,
|
||||
checks real Worker creation, positive/negative diagnostics, tag completion, document
|
||||
symbols and formatting, and disposes models/workers. It uses `createWebWorker` with
|
||||
the archived mode managers' options; this version does not expose public language
|
||||
worker getters other than TypeScript. These checks complement `editor-types.spec.js`
|
||||
and do not replace full editor UI or actual player playback tests.
|
||||
|
||||
`yarn test:vast-native` is the explicit external Google IMA suite; it is separate
|
||||
from default `*.spec.js` PR checks. It uses local VAST/media inputs and real SDK
|
||||
loading, playback, content restoration and destruction. See
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
import { expect, test } from './fixtures.js'
|
||||
|
||||
test('docs Monaco CSS, HTML and JSON workers validate, complete and format real models', async ({ page }, testInfo) => {
|
||||
const startedWorkers = []
|
||||
page.on('worker', worker => startedWorkers.push(worker.url()))
|
||||
await page.goto('/test/player.html?core=candidate&chapter=published')
|
||||
await page.addScriptTag({ url: '/assets/js/vs/loader.js' })
|
||||
const result = await page.evaluate(async () => {
|
||||
window.require.config({ paths: { vs: '/assets/js/vs' } })
|
||||
await new Promise((resolve, reject) => window.require(['vs/editor/editor.main'], resolve, reject))
|
||||
const api = window.monaco
|
||||
const models = []
|
||||
const workers = []
|
||||
const model = (text, language, name) => {
|
||||
const value = api.editor.createModel(text, language, api.Uri.parse(`file:///${name}`))
|
||||
models.push(value)
|
||||
return value
|
||||
}
|
||||
const connect = async (language, createData, resources) => {
|
||||
// Monaco 0.30.1 exposes getTypeScriptWorker but no CSS/HTML/JSON accessor.
|
||||
// Use the same public worker constructor and createData as its mode managers.
|
||||
const worker = api.editor.createWebWorker({ moduleId: `vs/language/${language}/${language}Worker`, label: language, createData })
|
||||
workers.push(worker)
|
||||
await worker.withSyncedResources(resources.map(model => model.uri))
|
||||
return worker.getProxy()
|
||||
}
|
||||
try {
|
||||
const css = model('a { color: red; }', 'css', 'valid.css')
|
||||
const badCss = model('a { color: ; }', 'css', 'invalid.css')
|
||||
const json = model('{"value":1}', 'json', 'valid.json')
|
||||
const badJson = model('{"value":}', 'json', 'invalid.json')
|
||||
const html = model('<div><p>hello</p><p>world</p></div>', 'html', 'valid.html')
|
||||
const htmlCompletion = model('<di', 'html', 'completion.html')
|
||||
const cssWorker = await connect('css', { languageId: 'css', options: api.languages.css.cssDefaults.options }, [css, badCss])
|
||||
const jsonWorker = await connect('json', { languageId: 'json', languageSettings: api.languages.json.jsonDefaults.diagnosticsOptions, enableSchemaRequest: false }, [json, badJson])
|
||||
const htmlWorker = await connect('html', { languageId: 'html', languageSettings: api.languages.html.htmlDefaults.options }, [html, htmlCompletion])
|
||||
const completion = await htmlWorker.doComplete(htmlCompletion.uri.toString(), { line: 0, character: 3 })
|
||||
const symbols = await htmlWorker.findDocumentSymbols(html.uri.toString())
|
||||
const edits = await htmlWorker.format(html.uri.toString(), null, { tabSize: 2, insertSpaces: true, wrapLineLength: 120 })
|
||||
const jsonEdits = await jsonWorker.format(json.uri.toString(), null, { tabSize: 2, insertSpaces: true })
|
||||
return {
|
||||
cssValid: await cssWorker.doValidation(css.uri.toString()),
|
||||
cssInvalid: await cssWorker.doValidation(badCss.uri.toString()),
|
||||
jsonValid: await jsonWorker.doValidation(json.uri.toString()),
|
||||
jsonInvalid: await jsonWorker.doValidation(badJson.uri.toString()),
|
||||
completionLabels: completion.items.map(item => item.label),
|
||||
htmlSymbols: symbols.map(item => item.name),
|
||||
htmlEdits: edits,
|
||||
jsonEdits,
|
||||
}
|
||||
}
|
||||
finally {
|
||||
workers.forEach(worker => worker.dispose())
|
||||
models.forEach(model => model.dispose())
|
||||
}
|
||||
})
|
||||
await testInfo.attach('monaco-language-results', { contentType: 'application/json', body: JSON.stringify({ ...result, startedWorkers }, null, 2) })
|
||||
expect(startedWorkers.length).toBeGreaterThanOrEqual(3)
|
||||
expect(result.cssValid).toEqual([])
|
||||
expect(result.cssInvalid.some(item => item.severity === 1 && item.message)).toBe(true)
|
||||
expect(result.jsonValid).toEqual([])
|
||||
expect(result.jsonInvalid.some(item => item.severity === 1 && item.message)).toBe(true)
|
||||
expect(result.completionLabels).toContain('div')
|
||||
expect(result.htmlSymbols).toEqual(['div', 'p', 'p'])
|
||||
expect(result.htmlEdits.some(item => item.newText.includes('\n') && item.newText.includes('hello'))).toBe(true)
|
||||
expect(result.jsonEdits.some(item => item.newText.includes('\n'))).toBe(true)
|
||||
})
|
||||
@@ -1,6 +1,7 @@
|
||||
import assert from 'node:assert/strict'
|
||||
// eslint-disable-next-line test/no-import-node-test -- Verify fixed source transforms without executing archived runtime.
|
||||
import test from 'node:test'
|
||||
import { aliasModule, moduleIds, nameModule, verifyWorkerSources } from '../scripts/site-vendor/monaco/languages.ts'
|
||||
import { browserTypeScript, verifyTypeScriptSource } from '../scripts/site-vendor/monaco/typescript.ts'
|
||||
|
||||
const source = `"use strict";
|
||||
@@ -37,3 +38,36 @@ test('Monaco TypeScript proof rejects modified or repeated worker content', () =
|
||||
assert.throws(() => verifyTypeScriptSource(source, worker + output), /Duplicate/)
|
||||
assert.throws(() => verifyTypeScriptSource(source, worker.slice(1)), /differs/)
|
||||
})
|
||||
|
||||
test('Monaco AMD naming ignores strings and preserves source bodies', () => {
|
||||
const anonymous = '// define(fake)\nconst example = "define(fake)";\ndefine(["exports"], function (exports) { exports.value = 1; });\n//# sourceMappingURL=source.js.map\n'
|
||||
const named = nameModule(anonymous, 'library/main')
|
||||
assert(named.includes('const example = "define(fake)";'))
|
||||
assert(named.includes('define(\'library/main\',["exports"]'))
|
||||
assert(!named.includes('sourceMappingURL'))
|
||||
assert.deepEqual(moduleIds(named), ['library/main'])
|
||||
assert(nameModule(anonymous.trimEnd(), 'library/main').endsWith('//# sourceMappingURL=source.js.map;'))
|
||||
assert.throws(() => nameModule(named, 'library/main'), /anonymous AMD dependency array/)
|
||||
assert.throws(() => nameModule(anonymous + anonymous, 'library/main'), /one anonymous/)
|
||||
assert.throws(() => nameModule(anonymous, 'library/\'main'), /identifier/)
|
||||
assert.throws(() => nameModule(`${anonymous}//# sourceMappingURL=second.map\n`, 'library/main'), /Duplicate source map/)
|
||||
})
|
||||
|
||||
test('Monaco worker proof covers helper code, aliases and all module boundaries', () => {
|
||||
const id = 'library/main'
|
||||
const source = nameModule('const helper = 1;\ndefine(["exports"], function (exports) { exports.value = helper; });', id)
|
||||
const alias = aliasModule('library', 'main')
|
||||
const worker = `${source}\n\n${alias}\n`
|
||||
const fragments = [{ id, source }, { id: 'library', source: alias }]
|
||||
const ids = [id, 'library']
|
||||
verifyWorkerSources(worker, ids, fragments)
|
||||
assert.throws(() => verifyWorkerSources(worker.replace('helper = 1', 'helper = 2'), ids, fragments), /Source differs/)
|
||||
assert.throws(() => verifyWorkerSources(`globalThis.hidden = true;\n${worker}`, ids, fragments), /Unattributed worker content/)
|
||||
assert.throws(() => verifyWorkerSources(`${worker}globalThis.hidden = true;`, ids, fragments), /Unattributed worker suffix/)
|
||||
assert.throws(() => verifyWorkerSources(worker, ids, fragments.slice(0, 1)), /Incomplete source coverage/)
|
||||
assert.throws(() => verifyWorkerSources(worker, ids, [{ id, source: alias }, fragments[1]]), /ownership/)
|
||||
assert.throws(() => verifyWorkerSources(worker.replace('[\'library/main\']', '[\'library/other\']'), ids, fragments), /Source differs/)
|
||||
assert.throws(() => verifyWorkerSources(worker + alias, ids, fragments), /Duplicate AMD/)
|
||||
assert.throws(() => verifyWorkerSources(`${worker}define('extra', [], function () {});`, ids, fragments), /inventory changed/)
|
||||
assert.throws(() => moduleIds('define(dynamicName, [], function () {});'), /literal AMD name/)
|
||||
})
|
||||
Reference in new issue
Block a user