diff --git a/.gitattributes b/.gitattributes
index ae51fb5f6..b9d296b21 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -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
diff --git a/package.json b/package.json
index 57193d676..da73d04d9 100644
--- a/package.json
+++ b/package.json
@@ -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": {
diff --git a/refactor/baselines/monaco-languages-provenance.json b/refactor/baselines/monaco-languages-provenance.json
new file mode 100644
index 000000000..e31402a68
--- /dev/null
+++ b/refactor/baselines/monaco-languages-provenance.json
@@ -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"
+ }
+ ]
+}
diff --git a/refactor/baselines/monaco-languages-validation.json b/refactor/baselines/monaco-languages-validation.json
new file mode 100644
index 000000000..ebe2df804
--- /dev/null
+++ b/refactor/baselines/monaco-languages-validation.json
@@ -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": "
"
+ }
+ ],
+ "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": ""
+ }
+ ],
+ "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": ""
+ }
+ ],
+ "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."
+ ]
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-css-scripts-bundle.js.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-css-scripts-bundle.js.txt
new file mode 100644
index 000000000..49709bc5e
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-css-scripts-bundle.js.txt
@@ -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);
+ }
+ );
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-cssWorker.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-cssWorker.ts.txt
new file mode 100644
index 000000000..456280439
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-cssWorker.ts.txt
@@ -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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let ranges = this._languageService.getFoldingRanges(document, context);
+ return Promise.resolve(ranges);
+ }
+ async getSelectionRanges(
+ uri: string,
+ positions: cssService.Position[]
+ ): Promise {
+ 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 {
+ 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);
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-fillers-vscode-nls.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-fillers-vscode-nls.ts.txt
new file mode 100644
index 000000000..38f7b3349
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-fillers-vscode-nls.ts.txt
@@ -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;
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-tsconfig.json.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-tsconfig.json.txt
new file mode 100644
index 000000000..707f714dd
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-css-src-tsconfig.json.txt
@@ -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"]
+ }
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-html-scripts-bundle.js.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-html-scripts-bundle.js.txt
new file mode 100644
index 000000000..d5932edf6
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-html-scripts-bundle.js.txt
@@ -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);
+ }
+ );
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-fillers-vscode-nls.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-fillers-vscode-nls.ts.txt
new file mode 100644
index 000000000..38f7b3349
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-fillers-vscode-nls.ts.txt
@@ -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;
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-htmlWorker.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-htmlWorker.ts.txt
new file mode 100644
index 000000000..cf5cb6e5f
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-htmlWorker.ts.txt
@@ -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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let links = this._languageService.findDocumentLinks(document, null);
+ return Promise.resolve(links);
+ }
+ async findDocumentSymbols(uri: string): Promise {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let ranges = this._languageService.getFoldingRanges(document, context);
+ return Promise.resolve(ranges);
+ }
+ async getSelectionRanges(
+ uri: string,
+ positions: htmlService.Position[]
+ ): Promise {
+ 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 {
+ 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);
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-tsconfig.json.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-tsconfig.json.txt
new file mode 100644
index 000000000..707f714dd
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-html-src-tsconfig.json.txt
@@ -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"]
+ }
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-json-scripts-bundle.js.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-json-scripts-bundle.js.txt
new file mode 100644
index 000000000..cb54926f4
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-json-scripts-bundle.js.txt
@@ -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);
+ }
+ );
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-fillers-vscode-nls.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-fillers-vscode-nls.ts.txt
new file mode 100644
index 000000000..38f7b3349
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-fillers-vscode-nls.ts.txt
@@ -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;
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-jsonWorker.ts.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-jsonWorker.ts.txt
new file mode 100644
index 000000000..781b58e26
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-jsonWorker.ts.txt
@@ -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 {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let jsonDocument = this._languageService.parseJSONDocument(document);
+ return this._languageService.doComplete(document, position, jsonDocument);
+ }
+ async doResolve(item: jsonService.CompletionItem): Promise {
+ return this._languageService.doResolve(item);
+ }
+ async doHover(uri: string, position: jsonService.Position): Promise {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let textEdits = this._languageService.format(document, range, options);
+ return Promise.resolve(textEdits);
+ }
+ async resetSchema(uri: string): Promise {
+ return Promise.resolve(this._languageService.resetSchema(uri));
+ }
+ async findDocumentSymbols(uri: string): Promise {
+ 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 {
+ 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 {
+ 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 {
+ let document = this._getTextDocument(uri);
+ let ranges = this._languageService.getFoldingRanges(document, context);
+ return Promise.resolve(ranges);
+ }
+ async getSelectionRanges(
+ uri: string,
+ positions: jsonService.Position[]
+ ): Promise {
+ 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);
+}
diff --git a/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-tsconfig.json.txt b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-tsconfig.json.txt
new file mode 100644
index 000000000..707f714dd
--- /dev/null
+++ b/refactor/baselines/site-vendor/monaco-languages/monaco-json-src-tsconfig.json.txt
@@ -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"]
+ }
+}
diff --git a/refactor/changes/2026-09-15-SITE-07-monaco-languages.md b/refactor/changes/2026-09-15-SITE-07-monaco-languages.md
new file mode 100644
index 000000000..e0a49dadc
--- /dev/null
+++ b/refactor/changes/2026-09-15-SITE-07-monaco-languages.md
@@ -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 提交,没有推送、部署或发布。
diff --git a/refactor/plan.md b/refactor/plan.md
index 9d83925f0..5606d7c3d 100644
--- a/refactor/plan.md
+++ b/refactor/plan.md
@@ -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)
diff --git a/refactor/progress.md b/refactor/progress.md
index 0520abb8f..058d90a43 100644
--- a/refactor/progress.md
+++ b/refactor/progress.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与固定提交锁,补充准确版本及三份原始许可/第三方说明,保留
diff --git a/refactor/risks.json b/refactor/risks.json
index c81eb3491..d84003cac 100644
--- a/refactor/risks.json
+++ b/refactor/risks.json
@@ -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",
diff --git a/refactor/tasks.json b/refactor/tasks.json
index 2e05810c2..88d90bcc7 100644
--- a/refactor/tasks.json
+++ b/refactor/tasks.json
@@ -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"
]
},
{
diff --git a/scripts/site-vendor/monaco/README.md b/scripts/site-vendor/monaco/README.md
index 56347402a..b68619f1c 100644
--- a/scripts/site-vendor/monaco/README.md
+++ b/scripts/site-vendor/monaco/README.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.
diff --git a/scripts/site-vendor/monaco/archives.ts b/scripts/site-vendor/monaco/archives.ts
new file mode 100644
index 000000000..f0fd49713
--- /dev/null
+++ b/scripts/site-vendor/monaco/archives.ts
@@ -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 {
+ 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 {
+ 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))
+ }
+ }
+}
diff --git a/scripts/site-vendor/monaco/languages.ts b/scripts/site-vendor/monaco/languages.ts
new file mode 100644
index 000000000..1e2d0c54f
--- /dev/null
+++ b/scripts/site-vendor/monaco/languages.ts
@@ -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
+ *-----------------------------------------------------------------------------*/
+`
+}
diff --git a/scripts/site-vendor/monaco/reproduce-languages.ts b/scripts/site-vendor/monaco/reproduce-languages.ts
new file mode 100644
index 000000000..c5a343637
--- /dev/null
+++ b/scripts/site-vendor/monaco/reproduce-languages.ts
@@ -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 }))
diff --git a/test/browser/README.md b/test/browser/README.md
index d61e9f0aa..2de6116fd 100644
--- a/test/browser/README.md
+++ b/test/browser/README.md
@@ -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
diff --git a/test/browser/editor-languages.spec.js b/test/browser/editor-languages.spec.js
new file mode 100644
index 000000000..d5aea317d
--- /dev/null
+++ b/test/browser/editor-languages.spec.js
@@ -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('', 'html', 'valid.html')
+ const htmlCompletion = model(' 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)
+})
diff --git a/test/monaco-provenance.test.js b/test/monaco-provenance.test.js
index 8f9c979bc..b42f759b7 100644
--- a/test/monaco-provenance.test.js
+++ b/test/monaco-provenance.test.js
@@ -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/)
+})