build(site): [SITE-07] reproduce basic languages and verify upstream token cases

This commit is contained in:
Harvey Zhao committed 2026-09-15 10:23:26 +08:00
1 parent bc9cb61aaf
commit 426fee8faa
21 files changed
+4207 -6

No files matched your search

+2
View File
@@ -36,3 +36,5 @@ refactor/baselines/site-vendor/monaco-languages/** -text whitespace=-trailing-sp
refactor/baselines/site-vendor/monaco-language-notices/** -text whitespace=-trailing-space,cr-at-eol
docs/licenses/monaco-editor/language-services/** -text whitespace=-trailing-space,cr-at-eol
refactor/baselines/site-vendor/monaco-modes/** -text whitespace=-trailing-space,cr-at-eol
refactor/baselines/site-vendor/monaco-basic/** -text whitespace=-trailing-space,cr-at-eol
refactor/baselines/monaco-basic-fixtures.json text eol=lf
+2 -1
View File
@@ -167,7 +167,8 @@
"test:site-console": "node --test test/site-console.test.js",
"verify:monaco-typescript-source": "node scripts/site-vendor/monaco/reproduce-typescript.ts",
"verify:monaco-language-sources": "node scripts/site-vendor/monaco/reproduce-languages.ts",
"verify:monaco-mode-sources": "node scripts/site-vendor/monaco/reproduce-modes.ts"
"verify:monaco-mode-sources": "node scripts/site-vendor/monaco/reproduce-modes.ts",
"verify:monaco-basic-sources": "node scripts/site-vendor/monaco/reproduce-basic.ts"
},
"browserslist": "last 1 Chrome version",
"devDependencies": {
@@ -0,0 +1 @@
{"schemaVersion":1,"origin":"Microsoft monaco-editor 5a7ba61be909ae9e4889768a3453ebb0dec392e2 monaco-languages tests, MIT; see site-vendor/monaco-basic/LICENSE","fixtures":[{"source":"monaco-languages/src/abap/abap.test.ts","language":"abap","languages":["abap"],"cases":[[{"line":"* comment","tokens":[{"startIndex":0,"type":"comment.abap"}]}],[{"line":" \" comment","tokens":[{"startIndex":0,"type":""},{"startIndex":1,"type":"comment.abap"}]}],[{"line":"write hello.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":5,"type":""},{"startIndex":6,"type":"identifier.abap"},{"startIndex":11,"type":"delimiter.abap"}]}],[{"line":"IF 2 = 3.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":2,"type":""},{"startIndex":3,"type":"number.abap"},{"startIndex":4,"type":""},{"startIndex":5,"type":"key.abap"},{"startIndex":6,"type":""},{"startIndex":7,"type":"number.abap"},{"startIndex":8,"type":"delimiter.abap"}]}],[{"line":"'hello'","tokens":[{"startIndex":0,"type":"string.abap"}]}],[{"line":"|hello|","tokens":[{"startIndex":0,"type":"string.abap"}]}],[{"line":"write: hello, world.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":5,"type":"delimiter.abap"},{"startIndex":6,"type":""},{"startIndex":7,"type":"identifier.abap"},{"startIndex":12,"type":"delimiter.abap"},{"startIndex":13,"type":""},{"startIndex":14,"type":"identifier.abap"},{"startIndex":19,"type":"delimiter.abap"}]}],[{"line":"method_call( param ).","tokens":[{"startIndex":0,"type":"identifier.abap"},{"startIndex":11,"type":"delimiter.parenthesis.abap"},{"startIndex":12,"type":""},{"startIndex":13,"type":"identifier.abap"},{"startIndex":18,"type":""},{"startIndex":19,"type":"delimiter.parenthesis.abap"},{"startIndex":20,"type":"delimiter.abap"}]}],[{"line":"'he'' llo'","tokens":[{"startIndex":0,"type":"string.abap"}]}],[{"line":"|hel\\|lo|","tokens":[{"startIndex":0,"type":"string.abap"}]}],[{"line":"FIELD-SYMBOLS <foo>.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":13,"type":""},{"startIndex":14,"type":"identifier.abap"},{"startIndex":19,"type":"delimiter.abap"}]}],[{"line":"IF foo IS NOT INITIAL.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":2,"type":""},{"startIndex":3,"type":"identifier.abap"},{"startIndex":6,"type":""},{"startIndex":7,"type":"keyword.abap"},{"startIndex":9,"type":""},{"startIndex":10,"type":"keyword.abap"},{"startIndex":13,"type":""},{"startIndex":14,"type":"keyword.abap"},{"startIndex":21,"type":"delimiter.abap"}]}],[{"line":"WRITE `moo`.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":5,"type":""},{"startIndex":6,"type":"string.abap"},{"startIndex":11,"type":"delimiter.abap"}]}],[{"line":"FORM foo.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":4,"type":""},{"startIndex":5,"type":"identifier.abap"},{"startIndex":8,"type":"delimiter.abap"}]}],[{"line":"moo = CONV #( 1 ).","tokens":[{"startIndex":0,"type":"identifier.abap"},{"startIndex":3,"type":""},{"startIndex":4,"type":"key.abap"},{"startIndex":5,"type":""},{"startIndex":6,"type":"keyword.abap"},{"startIndex":10,"type":""},{"startIndex":11,"type":"key.abap"},{"startIndex":12,"type":"delimiter.parenthesis.abap"},{"startIndex":13,"type":""},{"startIndex":14,"type":"number.abap"},{"startIndex":15,"type":""},{"startIndex":16,"type":"delimiter.parenthesis.abap"},{"startIndex":17,"type":"delimiter.abap"}]}],[{"line":"WRITE foo ##pragma.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":5,"type":""},{"startIndex":6,"type":"identifier.abap"},{"startIndex":9,"type":""},{"startIndex":10,"type":"comment.abap"},{"startIndex":18,"type":"delimiter.abap"}]}],[{"line":"SELECT * FROM foo02 INTO @foo.","tokens":[{"startIndex":0,"type":"keyword.abap"},{"startIndex":6,"type":""},{"startIndex":7,"type":"key.abap"},{"startIndex":8,"type":""},{"startIndex":9,"type":"keyword.abap"},{"startIndex":13,"type":""},{"startIndex":14,"type":"identifier.abap"},{"startIndex":19,"type":""},{"startIndex":20,"type":"keyword.abap"},{"startIndex":24,"type":""},{"startIndex":25,"type":"identifier.abap"},{"startIndex":29,"type":"delimiter.abap"}]}],[{"line":"li = lines( itab ).","tokens":[{"startIndex":0,"type":"identifier.abap"},{"startIndex":2,"type":""},{"startIndex":3,"type":"key.abap"},{"startIndex":4,"type":""},{"startIndex":5,"type":"keyword.abap"},{"startIndex":10,"type":"delimiter.parenthesis.abap"},{"startIndex":11,"type":""},{"startIndex":12,"type":"identifier.abap"},{"startIndex":16,"type":""},{"startIndex":17,"type":"delimiter.parenthesis.abap"},{"startIndex":18,"type":"delimiter.abap"}]}],[{"line":"foo = 'bar' && 'baz'.","tokens":[{"startIndex":0,"type":"identifier.abap"},{"startIndex":3,"type":""},{"startIndex":4,"type":"key.abap"},{"startIndex":5,"type":""},{"startIndex":6,"type":"string.abap"},{"startIndex":11,"type":""},{"startIndex":12,"type":"key.abap"},{"startIndex":14,"type":""},{"startIndex":15,"type":"string.abap"},{"startIndex":20,"type":"delimiter.abap"}]}],[{"line":"DATA numLine truncated
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,874 @@
{
"schemaVersion": 1,
"task": "SITE-07",
"status": "checkpoint-incomplete",
"recordedAt": "2026-09-15T02:22:25.121Z",
"baseCommit": "bc9cb61aaf1a4ca466cebd4645fe19286042e56d",
"node": "v24.21.0",
"yarn": "1.22.22",
"fingerprints": {
"refactor/baselines/monaco-basic-provenance.json": "ea712d51d1e51ef01b1b87097e9c3692271151b311970fd59b18362e59594403",
"refactor/baselines/monaco-basic-fixtures.json": "2468d8957ef94503a7f46832b9fc8646ed6c3ffd3e133c048e96c90d97987612",
"scripts/site-vendor/monaco/basic-fixtures.ts": "eaed3dfa54f7ae6434e60e80c9fe36a037834c81273945a382ffe0f4a4ff6692",
"scripts/site-vendor/monaco/reproduce-basic.ts": "e3f3d5b483c4d06de3162dab9d241d2534fb0fc652e211878007a4e706e400c7",
"test/browser/editor-basic-languages.spec.js": "f3f594819f0ff2506a719542c4d699673d2865a84d621059c2577469662aa290"
},
"reproduction": {
"offline": {
"exitCode": 0,
"log": "refactor/.cache/monaco-basic-source.log",
"result": {
"files": [
{
"language": "abap",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "49638217243bab4ed7d928d194bafe334abb614777440bf46f8636b9e5dfe0a4"
},
{
"language": "apex",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "034f340001e4c340b80e18abe45c990564931c4a061b4e74de86c012fb7d7a21"
},
{
"language": "azcli",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "be50c776891279c9717db0d48a20d6d99f07cb60d2d8d279422fa917826683cf"
},
{
"language": "bat",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "3ec5d66f73ee7e7dc2b43db5999a768d1a54e933de9f507015fe7709a184adee"
},
{
"language": "bicep",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "59d02b8930e36e2cbc3e472e263f881a82d84da292a79faf1d379cb060a2d7e1"
},
{
"language": "cameligo",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f93cd405c71f97f26b4739f7f917b242e82a993ad42884422a43bf27d5b413e2"
},
{
"language": "clojure",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "9e99cf86bcfb25c1b33bac9e26e11e4646868fa753356c7d737cfb24b7b1e49c"
},
{
"language": "coffee",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "90d6aae23c9f5e4f335df5cb57634fa0193a102629deb88b98f238b4025f0551"
},
{
"language": "cpp",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "ece3d119688eaf8a37fffae388118b12f8724ac2c3c8ff10d44caf2e91026424"
},
{
"language": "csharp",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "d6367d0d67c0612cf37d25319e00cda2e4e38869a3c3200b1bfcd856cfe7fb4b"
},
{
"language": "csp",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "01241c709a7dddc0b5cedffb6dcf913a5d95c826eb68e2c27f114640719af7df"
},
{
"language": "css",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "1f8468a126f6bfdc43d49a75e0ae758de913ebf55e685165adb6d069a454de5c"
},
{
"language": "dart",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6b410bbe17b8ebcaed969bdfcf8049df6fe863482756ae73d2aebb919630034c"
},
{
"language": "dockerfile",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "315769a72a2877f8ddddf9497a2e7e259e8df51cc38232ddf76fbe4556c0d7cd"
},
{
"language": "ecl",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "fc412fe18e564cff17e9a0bcd5674ba15c49f4739417cf589ce1c546b21033a9"
},
{
"language": "elixir",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "130d310090d723f51111d573000a72aa26fe44c9d79e6d04d12524e6631cfb6b"
},
{
"language": "flow9",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "fafd88d973aed314454cd7d842b270125553f7a7613bb068c3c799a21ac61b64"
},
{
"language": "fsharp",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "32027afd4be75ddeca6c7beb9b52eda07d59afe3ea39a84f0696a6b3d074dcbf"
},
{
"language": "go",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "c93466a4479ee8aa5e3ec70a89b469db1277b801d1551d40ad700d5abd367363"
},
{
"language": "graphql",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "60a8825e939ca81540eb6ac00b17867b3e55af97bff99a9fa40c422a4281bdcf"
},
{
"language": "handlebars",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "5a174247aa64c7a064fc977365bb1c7161b4c97e559a6121773188c25df9d9a2"
},
{
"language": "hcl",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6053e90b8aa918c9744f41dcb1c0e58229a4946f0968a39b00776c3893538f54"
},
{
"language": "html",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6e7ae0ce7f07ec01c64db1368869715c115690e40fb5c183d5ced0d2716038bd"
},
{
"language": "ini",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "ecdb5c36a38a8b68af6384789c380d0e28b5b3df86de9c3419d348e688b8810e"
},
{
"language": "java",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "8fd9c491b67dfa9ab831ed71a3973cc6ffc840f438f41114a794163672f4cf9c"
},
{
"language": "javascript",
"modules": 2,
"exactSources": true,
"exactOutput": true,
"sha256": "bbd7fb1b714d347704eae4c74cb36c352876864f2103a69af3965f32c1c982c6"
},
{
"language": "julia",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "ef3783cbb81cee25697c0bddc9476813b593fb64712c21bc60099c8109c748f0"
},
{
"language": "kotlin",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "31b082803acb08622aa2dd736dca42772f6a0d3224fdb7c0e9c3e1f17800ca32"
},
{
"language": "less",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "5ba9296cc5c6a7699028ac6e263631eb9284f80bfbffe99a4429f6c85dfc0589"
},
{
"language": "lexon",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "2be27259788a7a4a6fb94a59150b47d169ef6e04933f76977e568c4cb0227f57"
},
{
"language": "liquid",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f4454c09b7e66ab2ffd81451aef2f12c79c0011839e19bcdb0fce42928acce6b"
},
{
"language": "lua",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f39154e727c8d3df5c70ecab1737c0a07df3011977288ba4adc7d25c8ef639b5"
},
{
"language": "m3",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "a3b616444441f34b90b4e06a6a3a845f2804da67220c19721b9461140eb7f074"
},
{
"language": "markdown",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "47ae9f567af2e69e682d14703bf4ad5428708464edb3d30791f3255a2863a52e"
},
{
"language": "mips",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "fcc6104a8c7092794744a1472511cd348d585d1cba0421e61e5eb8e0c58af186"
},
{
"language": "msdax",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f98e43f6600e629bfc354196006a02f9f9cc26480de064cc480e3bc885beb283"
},
{
"language": "mysql",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "1cafe5b6c81234fc6680a421dd6290ec590ce03b9e525eacb0936a78ab50aeae"
},
{
"language": "objective-c",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "7cfdb8b492b6f1c5a1d83fefc3bd349bb1acdd489516534aefacd553c2850e75"
},
{
"language": "pascal",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f2886264f5ad42d173ef18e8ea961f674090be7513f48af95dcef4eb1191cac3"
},
{
"language": "pascaligo",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "3d3317429e0837f6960e33829a2c2fd62119ca1514ad735f62345da8fd1dd817"
},
{
"language": "perl",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "317b527f0ade315a7cb066eac72672e5f2ba6d0c02c6014be052c32fb6566aed"
},
{
"language": "pgsql",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "f58b4ab8529e311f7f98f690ed39e13de22f3ae29cc8916bf99c21ac86917970"
},
{
"language": "php",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "3d7d187fb2e3b959adfda7b7557ccda4b6f690f838babc525cabffbe0dda7dd0"
},
{
"language": "pla",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6138b0b0a1be95370c00afe6eca5022ea10e8b0f11f1db9382163f28975373e6"
},
{
"language": "postiats",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "5b18eac81236e88ffca2e67e527fa1d6fb42f53a4df42c1fbeb37312a9ec2fe4"
},
{
"language": "powerquery",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "fb9705793a687b03fe08605f19c3f1019d83cf06394a8381db541bda92e230d4"
},
{
"language": "powershell",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "b80339b4a8450fd3a5bb5bf3817fb1b67fe6202690fc1ce97ef22336bcd7053b"
},
{
"language": "protobuf",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "18f13fbd6b421023eec480901e48354d249bc9c3dce9d0e0cc842cbab4393fd3"
},
{
"language": "pug",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "dbce9bb879b84cf3bf8bd05643a4d3d2ae6ded03b4a9234a0e8d2ebfab6ade44"
},
{
"language": "python",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "b0c9cb9c96d3b289b4ee1bb6ca921e810d87ec2967ebaf8608d5570865ac6524"
},
{
"language": "qsharp",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6cf9e660e8082f7a8dff4e8041c58c5e9fed1e622e0301b359886a5148c15327"
},
{
"language": "r",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "889684005db07d8b2e8c6f17d54b7bbf1bd67ad948b0b9ca411c2e55ba3433dd"
},
{
"language": "razor",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "da07ee116d392fbf97f5adc9d4f1fd46e5bbbe9765949c8cb9a6f6a4917ce6cb"
},
{
"language": "redis",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "286518ee6a7e76356149bebfbcdc19d2d30c19a5fa48d4bfcbf2f7a946783bd0"
},
{
"language": "redshift",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "8b865d41e76c227f3e1eb3bc74f8e9cf24627b449cc94164c803c1e515a9bbfd"
},
{
"language": "restructuredtext",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "32c72e9b8fa318289b628efee24bc5b573e3f74f8ab7dd544dead1b3545fc351"
},
{
"language": "ruby",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "93a9fbda62d9b4ef5537de37d7b4c77a89d8e2b0a2193dddac534ce98da47b5f"
},
{
"language": "rust",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "6352c16af73494a44e09b5ccad8a61c0369933d94881fcf58a7e8a75a27315cf"
},
{
"language": "sb",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "7323046d28f72e54b5abda684d4ec67d55b688a0b5e1d23ffe1d675c1c141b69"
},
{
"language": "scala",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "57309bc0e00edda2c4edb5fd255e042e1ef6ce8d51f51c7e822a74268e04f444"
},
{
"language": "scheme",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "3fe89a5618aa1c4eafa5c65aad212fcf2ba34e302de73df7db0867ba01dbd866"
},
{
"language": "scss",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "b01dfbdbd787642ed55a3ca7b0b89b2edb80e4aa486d89fee0ba748124dad4f9"
},
{
"language": "shell",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "39063f662fa62eb543e5d8f9b792b31d14c484abafd9a67943dae52fc9f5ce36"
},
{
"language": "solidity",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "e25859bb2a1babe193f03028489c95296b1bfe98a92dcb450d4c539661b5a86d"
},
{
"language": "sophia",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "4ba061aa0beb82ba64efeb6bd1128da0d3445ac8cfc26d3f4591c66df0fa4bb0"
},
{
"language": "sparql",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "162783ddf2dd67384d379ebf485f6ed0cafd820e892e4d89e82c8ba8617390c4"
},
{
"language": "sql",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "3b1decbf86cb0b163070cc144e826f104ba10468798b36e6d0e64257a35fd1f8"
},
{
"language": "st",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "b3ac35684d5668c2d08105cec31f43e8d897e4ab94103d8bd64ac804d256c20c"
},
{
"language": "swift",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "288a0ad2974e332bb873bacbb2a284f8f39cdc7d12b1fd5e3c46699147a63633"
},
{
"language": "systemverilog",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "40b18f15d29e3201142eb02fd5cc5ad690b32386bbe5dc0a874fd68a2f176f41"
},
{
"language": "tcl",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "317b63a872ce538d4eef5dae701641670fd3f99dfc0439465d444b2992b69bea"
},
{
"language": "twig",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "c3442379367d5ef43f1377a14e3c6a04ec451dabb05bed200571ea6dc328dfa0"
},
{
"language": "typescript",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "25dd318efd5aada375fdf391c488bd0b5ec0d665ba16e49f1e7968217ad01139"
},
{
"language": "vb",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "41d3d863c8b955c53eddb8724866a487d3632995114c77c0e9bc416227d148bf"
},
{
"language": "xml",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "95ddef452d5ff87f5c9f807d56f3f74964727677b5a55baa13a0a4870e2ae850"
},
{
"language": "yaml",
"modules": 1,
"exactSources": true,
"exactOutput": true,
"sha256": "a6ffa854247873af58df3ad550bbdd474b2d8dbc1d1c730fce4e44dfcb5f9b62"
}
],
"sources": 156,
"upstreamSuites": 76,
"upstreamCases": 2511,
"coreAndEmbeddedOriginsReviewed": false
}
},
"firstFetch": {
"exitCode": 1,
"error": "getaddrinfo ENOTFOUND codeload.github.com",
"log": "refactor/.cache/monaco-basic-fetch.log"
},
"retryFetch": {
"exitCode": 0,
"log": "refactor/.cache/monaco-basic-fetch-retry.log",
"resultMatchesOffline": true
}
},
"unit": {
"passed": 16,
"log": "refactor/.cache/monaco-basic-unit.log"
},
"typecheck": {
"exitCode": 0,
"log": "refactor/.cache/monaco-basic-types.log"
},
"lint": {
"exitCode": 0,
"log": "refactor/.cache/monaco-basic-lint.log"
},
"browser": {
"report": "refactor/.cache/browser/report.json",
"sha256": "035ba9f3d91bcfaaa039dbb95c1d06e75d54e244ded901620fab49dde3d949c1",
"stats": {
"startTime": "2026-09-15T02:12:29.720Z",
"duration": 10487.906,
"expected": 3,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"tests": [
{
"project": "chromium",
"status": "passed",
"browser": "153.0.8010.12",
"platform": "win32",
"cases": 2523,
"suites": 81,
"languages": [
"abap",
"apex",
"azcli",
"bat",
"bicep",
"cameligo",
"clojure",
"coffeescript",
"cpp",
"csharp",
"csp",
"css",
"dart",
"dockerfile",
"ecl",
"elixir",
"flow9",
"fsharp",
"go",
"graphql",
"handlebars",
"hcl",
"html",
"javascript",
"java",
"julia",
"kotlin",
"less",
"lexon",
"liquid",
"lua",
"m3",
"markdown",
"mips",
"msdax",
"mysql",
"objective-c",
"pascal",
"pascaligo",
"perl",
"sql",
"php",
"pla",
"postiats",
"powerquery",
"powershell",
"proto",
"pug",
"python",
"qsharp",
"r",
"razor",
"redis",
"restructuredtext",
"ruby",
"rust",
"sb",
"scala",
"scheme",
"scss",
"shell",
"sol",
"aes",
"sparql",
"st",
"swift",
"systemverilog",
"tcl",
"twig",
"typescript",
"vb",
"xml",
"yaml",
"ini",
"pgsql",
"redshift"
],
"failures": [],
"errors": [],
"consoleErrors": [],
"failedRequests": []
},
{
"project": "firefox",
"status": "passed",
"browser": "155.0",
"platform": "win32",
"cases": 2523,
"suites": 81,
"languages": [
"abap",
"apex",
"azcli",
"bat",
"bicep",
"cameligo",
"clojure",
"coffeescript",
"cpp",
"csharp",
"csp",
"css",
"dart",
"dockerfile",
"ecl",
"elixir",
"flow9",
"fsharp",
"go",
"graphql",
"handlebars",
"hcl",
"html",
"javascript",
"java",
"julia",
"kotlin",
"less",
"lexon",
"liquid",
"lua",
"m3",
"markdown",
"mips",
"msdax",
"mysql",
"objective-c",
"pascal",
"pascaligo",
"perl",
"sql",
"php",
"pla",
"postiats",
"powerquery",
"powershell",
"proto",
"pug",
"python",
"qsharp",
"r",
"razor",
"redis",
"restructuredtext",
"ruby",
"rust",
"sb",
"scala",
"scheme",
"scss",
"shell",
"sol",
"aes",
"sparql",
"st",
"swift",
"systemverilog",
"tcl",
"twig",
"typescript",
"vb",
"xml",
"yaml",
"ini",
"pgsql",
"redshift"
],
"failures": [],
"errors": [],
"consoleErrors": [],
"failedRequests": []
},
{
"project": "webkit",
"status": "passed",
"browser": "26.6",
"platform": "win32",
"cases": 2523,
"suites": 81,
"languages": [
"abap",
"apex",
"azcli",
"bat",
"bicep",
"cameligo",
"clojure",
"coffeescript",
"cpp",
"csharp",
"csp",
"css",
"dart",
"dockerfile",
"ecl",
"elixir",
"flow9",
"fsharp",
"go",
"graphql",
"handlebars",
"hcl",
"html",
"javascript",
"java",
"julia",
"kotlin",
"less",
"lexon",
"liquid",
"lua",
"m3",
"markdown",
"mips",
"msdax",
"mysql",
"objective-c",
"pascal",
"pascaligo",
"perl",
"sql",
"php",
"pla",
"postiats",
"powerquery",
"powershell",
"proto",
"pug",
"python",
"qsharp",
"r",
"razor",
"redis",
"restructuredtext",
"ruby",
"rust",
"sb",
"scala",
"scheme",
"scss",
"shell",
"sol",
"aes",
"sparql",
"st",
"swift",
"systemverilog",
"tcl",
"twig",
"typescript",
"vb",
"xml",
"yaml",
"ini",
"pgsql",
"redshift"
],
"failures": [],
"errors": [],
"consoleErrors": [],
"failedRequests": []
}
]
},
"limitations": [
"Full upstream semantic typecheck and editor core/embedded origin review are not complete.",
"Upstream INI tests absent; CSP/ECL suites empty; pgsql/redshift upstream cases target SQL. Twelve supplemental cases cover these gaps without replacing original cases.",
"No runtime or delivered notice changes, playback/device/external SDK/remote CI/publication evidence in this batch.",
"Thumbnail default compatibility choice remains pending."
]
}
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 - present Microsoft Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,203 @@
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
Do Not Translate or Localize
This project incorporates components from the projects listed below. The original copyright notices and the licenses
under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted
herein, whether by implication, estoppel or otherwise.
%% typescript version 2.7.2 (https://github.com/Microsoft/TypeScript)
=========================================
Copyright (c) Microsoft Corporation. All rights reserved.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
=========================================
END OF typescript NOTICES AND INFORMATION
%% HTML 5.1 W3C Working Draft version 08 October 2015 (http://www.w3.org/TR/2015/WD-html51-20151008/)
=========================================
Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang). This software or document includes material copied
from or derived from HTML 5.1 W3C Working Draft (http://www.w3.org/TR/2015/WD-html51-20151008/.)
THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT
NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF
THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE
DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents
without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders.
=========================================
END OF HTML 5.1 W3C Working Draft NOTICES AND INFORMATION
%% JS Beautifier version 1.6.2 (https://github.com/beautify-web/js-beautify)
=========================================
The MIT License (MIT)
Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF js-beautify NOTICES AND INFORMATION
%% Ionic documentation version 1.2.4 (https://github.com/driftyco/ionic-site)
=========================================
Copyright Drifty Co. http://drifty.com/.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
=========================================
END OF Ionic documentation NOTICES AND INFORMATION
%% vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
=========================================
The MIT License (MIT)
Copyright (c) 2015 David Owens II
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF vscode-swift NOTICES AND INFORMATION
@@ -0,0 +1,72 @@
const requirejs = require('requirejs');
const path = require('path');
const fs = require('fs');
const terser = require('terser');
const glob = require('glob');
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-languages version: ' + headerVersion,
' * Released under the MIT license',
' * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md',
' *-----------------------------------------------------------------------------*/',
''
].join('\n');
bundleOne('monaco.contribution');
glob('out/amd/*/*.contribution.js', { cwd: path.dirname(__dirname) }, function (err, files) {
if (err) {
console.log(err);
return;
}
files.forEach(function (file) {
file = file.replace(/\.contribution\.js$/, '');
file = file.replace(/out[/\\]amd[/\\]/, '');
bundleOne(file, ['vs/basic-languages/monaco.contribution']);
});
});
function bundleOne(moduleId, exclude) {
requirejs.optimize(
{
baseUrl: 'out/amd/',
name: 'vs/basic-languages/' + moduleId,
out: 'release/dev/' + moduleId + '.js',
exclude: exclude,
paths: {
'vs/basic-languages': REPO_ROOT + '/monaco-languages/out/amd',
'vs/basic-languages/fillers/monaco-editor-core':
REPO_ROOT + '/monaco-languages/out/amd/fillers/monaco-editor-core-amd'
},
optimize: 'none'
},
async function (buildResponse) {
const devFilePath = path.join(REPO_ROOT, 'monaco-languages/release/dev/' + moduleId + '.js');
const minFilePath = path.join(REPO_ROOT, 'monaco-languages/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-languages/release/min'));
} catch (err) {}
try {
fs.mkdirSync(path.dirname(minFilePath));
} catch (err) {}
fs.writeFileSync(minFilePath, BUNDLED_FILE_HEADER + result.code);
}
);
}
@@ -0,0 +1,63 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import '../monaco.contribution';
import { loadLanguage } from '../_.contribution';
import * as test from 'tape';
import { editor } from '../fillers/monaco-editor-core';
export interface IRelaxedToken {
startIndex: number;
type: string;
}
export interface ITestItem {
line: string;
tokens: IRelaxedToken[];
}
function timeout(ms: number) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms);
});
}
export function testTokenization(_language: string | string[], tests: ITestItem[][]): void {
let languages: string[];
if (typeof _language === 'string') {
languages = [_language];
} else {
languages = _language;
}
let mainLanguage = languages[0];
test(mainLanguage + ' tokenization', async (t: test.Test) => {
await Promise.all(languages.map((l) => loadLanguage(l)));
await timeout(0);
runTests(t, mainLanguage, tests);
});
}
function runTests(t: test.Test, languageId: string, tests: ITestItem[][]): void {
tests.forEach((test) => runTest(t, languageId, test));
}
function runTest(t: test.Test, languageId: string, test: ITestItem[]): void {
let text = test.map((t) => t.line).join('\n');
let actualTokens = editor.tokenize(text, languageId);
let actual = actualTokens.map((lineTokens, index) => {
return {
line: test[index].line,
tokens: lineTokens.map((t) => {
return {
startIndex: t.offset,
type: t.type
};
})
};
});
t.deepEqual(actual, test);
}
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "amd",
"moduleResolution": "node",
"outDir": "../out/amd",
"target": "es5",
"strict": true,
"lib": ["dom", "es5", "es2015.collection", "es2015.iterable", "es2015.promise"]
}
}
@@ -0,0 +1,43 @@
# SITE-07 Monaco 基础语言构建与语法高亮回归
修改前 HEAD:bc9cb61aaf1a4ca466cebd4645fe19286042e56d。
## 实现与兼容边界
新增 reproduce-basic.ts,将此前临时探针变成可重复执行的来源验证。固定 Monaco
提交的仓库归档通过字节数/SHA-256 检查;156 个选定成员逐个检查 Git blob ID
及 SHA-256,包含 76 份语法源码、75 份测试和五份配方/配置/runner/许可文件。
四个 npm 归档分别为 Monaco 0.30.1、TypeScript 4.4.4、Terser 5.9.0、source-map
0.7.3。历史工具只在忽略缓存中展开,不安装脚本、不增加运行时依赖或改锁。
76 个文件包含 77 个模块实例,JavaScript 文件包含共享 TypeScript 语法。
每份原始 AMD 发射覆盖完整开发产物,压缩结果与站点文件逐字节相等。
HTML/PHP 尾部源码注释后存在 RequireJS 添加的换行加分号,明确记录这两处
分隔符;没有放宽其他文件或未归属字节的检查。原始源码没有为通过比对而修改。
完整上游语义类型检查和内嵌来源审查不由这些字节检查替代。
新增 basic-fixtures.ts 单独负责提取上游测试定义。通过固定编译器及记录型 runner
保留 Clojure 动态生成与 SCSS 换行预处理,仅允许两个明确导入;VM 不是安全沙箱。
冻结 2,511 个用例供普通浏览器 CI 离线使用,完整来源命令重新提取并深比较。
冻结数据保留上游文件路径及 MIT 说明,原始 LICENSE/第三方说明完整保存。
## 测试范围
editor-basic-languages.spec.js 用真实 Monaco AMD loader、注册与 tokenizer 执行全部
上游预期,比较每行 token 类型与偏移,保留多行状态。额外 12 例补齐 INI 无上游
测试、CSP/ECL 空套件、pgsql/redshift 实际指向 SQL 的缺口;没有改写或删除
上游预期。所有 76 个真实语法 URL 必须返回 200。
Chromium/Firefox/WebKit 各执行 2,523 例,三项浏览器测试通过,没有重试或跳过。
单元 16/16,通过反例证明提取器保留动态预处理且拒绝未知导入;严格 docs-tools
类型与本批 lint 通过。完整来源离线复现通过;联网首次 GitHub DNS ENOTFOUND,
重试成功取得四个 npm 归档及源码仓库归档,复现结果与离线完全一致。详见
[验证记录](../baselines/monaco-basic-validation.json)。
## 状态与维护
源码/测试/重跑入口见 [Monaco 维护说明](../../scripts/site-vendor/monaco/README.md)。
SITE-07 保持 doing,VENDOR-06 保持 open,Monaco core 和内嵌来源细节仍需收尾。
本批不改变运行产物、URL、公共接口、声明或 notices 交付,不代表播放器实播、
真机、外部 SDK、远端 CI 或三轮复盘通过。Thumbnail 默认策略仍待用户决定。
整体仍 199/265。回退本批脚本、基线与测试即可;独立本地提交,不推送或发布。
+1 -1
View File
@@ -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) [记录](baselines/monaco-languages-provenance.json) [记录](baselines/monaco-languages-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-languages.md) [记录](baselines/monaco-language-notices.json) [记录](baselines/monaco-language-notices-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-language-notices.md) [记录](baselines/monaco-modes-provenance.json) [记录](baselines/monaco-modes-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-modes.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) [记录](baselines/monaco-language-notices.json) [记录](baselines/monaco-language-notices-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-language-notices.md) [记录](baselines/monaco-modes-provenance.json) [记录](baselines/monaco-modes-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-modes.md) [记录](baselines/monaco-basic-provenance.json) [记录](baselines/monaco-basic-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-basic.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)
+9
View File
@@ -1,5 +1,14 @@
# 进度与证据
## SITE-07 Monaco 基础语言
76 份语言源码与全部 76 个压缩文件精确复现,77 个模块实例;156 个归档成员有
Git blob/SHA-256 身份验证。2,511 个上游用例与 12 个补充用例在三引擎全部通过,
并验证全部 76 个语言 URL;单元 16/16、严格类型和相关 lint 通过。重跑脚本、
固定测试数据、原始配方/runner/许可与限制见
[记录](changes/2026-09-15-SITE-07-monaco-basic.md)。SITE-07/VENDOR-06 仍开放,
接续 Monaco core/内嵌来源,199/265;Thumbnail 默认兼容策略仍待答。
## SITE-07 Monaco 四种语言模式
CSS/HTML/JSON/TypeScript mode 的 26 个模块实例及完整压缩产物已精确复现,
+5 -2
View File
@@ -643,11 +643,14 @@
"refactor/baselines/monaco-modes-validation.json",
"refactor/changes/2026-09-15-SITE-07-monaco-modes.md",
"scripts/site-vendor/monaco/compiler.ts",
"scripts/site-vendor/monaco/reproduce-modes.ts"
"scripts/site-vendor/monaco/reproduce-modes.ts",
"refactor/baselines/monaco-basic-provenance.json",
"refactor/baselines/monaco-basic-validation.json",
"refactor/changes/2026-09-15-SITE-07-monaco-basic.md"
],
"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. 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. Seven language-service packages now deliver nine original notices, two complete formatter source headers and attribution. JSON glob BSD terms and the HTML formatter author-year difference are preserved. Component/source/notice bindings and all 81 site notice HTTP bytes/links pass; unit 14/14 and three-engine language/mobile suites 6/6. Broader Monaco origin review remains open. All four mode bundles now reproduce exactly from 14 Monaco sources, 6 npm modules and 2 aliases (26 instances), with 6 archives/23 Git files. jsonc-parser declarations drive const enum emission; mode assets are included in license bindings. Automatic editor diagnostics/formatting/model-switch/cleanup checks pass in three engines, unit 15/15 and all three worker source regressions pass. Core/basic-language and remaining origin review remain 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. Seven language-service packages now deliver nine original notices, two complete formatter source headers and attribution. JSON glob BSD terms and the HTML formatter author-year difference are preserved. Component/source/notice bindings and all 81 site notice HTTP bytes/links pass; unit 14/14 and three-engine language/mobile suites 6/6. Broader Monaco origin review remains open. All four mode bundles now reproduce exactly from 14 Monaco sources, 6 npm modules and 2 aliases (26 instances), with 6 archives/23 Git files. jsonc-parser declarations drive const enum emission; mode assets are included in license bindings. Automatic editor diagnostics/formatting/model-switch/cleanup checks pass in three engines, unit 15/15 and all three worker source regressions pass. Core/basic-language and remaining origin review remain open. All 76 basic-language bundles now reproduce byte-for-byte from 76 original grammar sources (77 module instances). The pinned repository archive verifies 156 members; 2511 unchanged upstream token cases plus 12 explicit gap cases pass in three engines with all 76 URLs loaded. Unit 16/16 and strict type/lint checks pass. Core and remaining embedded origins are still open."
},
{
"id": "VENDOR-07",
+4 -1
View File
@@ -4525,7 +4525,10 @@
"changes/2026-09-15-SITE-07-monaco-language-notices.md",
"baselines/monaco-modes-provenance.json",
"baselines/monaco-modes-validation.json",
"changes/2026-09-15-SITE-07-monaco-modes.md"
"changes/2026-09-15-SITE-07-monaco-modes.md",
"baselines/monaco-basic-provenance.json",
"baselines/monaco-basic-validation.json",
"changes/2026-09-15-SITE-07-monaco-basic.md"
]
},
{
+31 -1
View File
@@ -109,7 +109,37 @@ the editor's document-format action formats JSON/HTML while preserving content.
All four mode URLs must return 200; disposed models must lose their diagnostics.
This complements direct worker methods and the typed player test.
## Language-service notices
## Basic-language sources and tokenizer regression
`reproduce-basic.ts` verifies all 76 shipped basic-language bundles against 76
original TypeScript sources, including the shared TypeScript grammar in JavaScript.
The fixed Monaco commit's repository archive is SHA-256/size checked; every selected
member additionally has a Git blob ID and SHA-256. Only named members are read.
Historical compilers stay in the ignored cache; no install scripts or new root
dependencies are used. HTML/PHP need an explicit RequireJS separator after trailing
comments. Complete fragment coverage and complete minified bytes are both required.
`basic-fixtures.ts` evaluates the fixed test definitions with a recording runner,
preserving generated Clojure cases and SCSS preprocessing. Imports are restricted
to the runner and the verified Clojure grammar; this VM is not a security sandbox.
The 2,511 cases are frozen for ordinary offline browser CI; full reproduction
regenerates and compares them with TypeScript 4.4.4. The upstream runner, recipe,
config, LICENSE and third-party notices are retained alongside the provenance.
```sh
yarn verify:monaco-basic-sources --fetch
yarn verify:monaco-basic-sources
yarn test:browser test/browser/editor-basic-languages.spec.js --workers=1
```
The browser test uses Monaco's real AMD loader, language registration and tokenizer.
It retains every upstream case unchanged, and adds 12 explicit cases: INI has no
upstream test; CSP/ECL have empty suites; pgsql/redshift upstream tests actually
target SQL. All 76 grammar URLs must load successfully. Token offsets/types and
multiline state are compared, not just module loading. This is editor tokenization
evidence, not playback, physical-device evidence or a complete embedded-origin review.
## Language-service notice bindings
`monaco-language-notices.json` binds seven verified package versions to their nine
complete original LICENSE/third-party notice files. Two exact source-comment slices
@@ -0,0 +1,40 @@
import assert from 'node:assert/strict'
import vm from 'node:vm'
export interface TokenLine { line: string, tokens: { startIndex: number, type: string }[] }
export interface TokenFixture { source: string, language: string, languages: string[], cases: TokenLine[][] }
// Evaluate fixed upstream test definitions with a recording runner, including their
// generated cases and SCSS preprocessing. This VM is not a security sandbox.
export function extractBasicFixtures(ts: typeof import('typescript'), tests: string[], read: (file: string) => string): TokenFixture[] {
const fixtures: TokenFixture[] = []
const emit = (source: string) => ts.transpileModule(source, {
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES5 },
}).outputText
let clojure: object | undefined
for (const file of tests) {
assert(/^monaco-languages\/src\/[^/]+\/[^/]+\.test\.ts$/.test(file), 'Unexpected test member')
const language = file.split('/')[2]!
vm.runInNewContext(emit(read(file)), {
exports: {},
require(name: string) {
if (name === '../test/testRunner') {
return {
testTokenization(languages: string | string[], cases: TokenLine[][]) {
fixtures.push(JSON.parse(JSON.stringify({ source: file, language, languages: typeof languages === 'string' ? [languages] : languages, cases })))
},
}
}
if (language === 'clojure' && name === './clojure') {
if (!clojure) {
clojure = {}
vm.runInNewContext(emit(read('monaco-languages/src/clojure/clojure.ts')), { exports: clojure }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } })
}
return clojure
}
throw new Error(`Unexpected test import: ${name}`)
},
}, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } })
}
return fixtures
}
@@ -0,0 +1,112 @@
import type { Archive, Member } from './archives.ts'
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 { 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 { extractBasicFixtures } from './basic-fixtures.ts'
import { emitAmd } from './compiler.ts'
import { nameModule, verifyWorkerSources } from './languages.ts'
interface Provenance {
commit: string
archives: Archive[]
compilerMembers: Member[]
sourceArchive: { url: string, file: string, bytes: number, sha256: string }
members: { path: string, member: string, sha256: string, gitBlobSha: string, frozen?: string }[]
modules: { id: string, path: string, suffix: string }[]
files: { language: string, development: Member, target: { path: string, sha256: string }, ids: string[] }[]
fixtures: { path: string, sha256: string, tests: string[], cases: number, suites: number }
}
const root = fileURLToPath(new URL('../../../', import.meta.url))
assert(process.argv.slice(2).every(arg => arg === '--fetch'), 'Use reproduce-basic.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-basic-provenance.json'), 'utf8'))
const cache = new ArchiveCache(root, path.join(root, 'refactor/.cache/monaco-review'))
await cache.verify(record.archives, [], process.argv.includes('--fetch'))
assert.equal(record.sourceArchive.file, 'monaco-editor-source.tgz')
assert.equal(record.sourceArchive.url, `https://codeload.github.com/microsoft/monaco-editor/tar.gz/${record.commit}`)
const archiveFile = path.join(cache.directory, record.sourceArchive.file)
let archive: Buffer
if (process.argv.includes('--fetch')) {
const response = await fetch(record.sourceArchive.url, { signal: AbortSignal.timeout(60000) })
assert(response.ok, `Repository archive HTTP ${response.status}`)
archive = Buffer.from(await response.arrayBuffer())
}
else {
archive = fs.readFileSync(archiveFile)
}
assert.equal(archive.length, record.sourceArchive.bytes)
assert.equal(hash(archive), record.sourceArchive.sha256, 'Repository archive changed')
if (process.argv.includes('--fetch'))
fs.writeFileSync(archiveFile, archive)
const sources = new Map<string, string>()
for (const member of record.members) {
assert.equal(member.member, `monaco-editor-${record.commit}/${member.path}`)
assert(!member.path.split('/').includes('..'), 'Invalid repository member')
const bytes = execFileSync('tar', ['-xOzf', archiveFile, member.member], { maxBuffer: 20 * 1024 * 1024 })
assert.equal(hash(bytes), member.sha256, `Source changed: ${member.path}`)
assert.equal(createHash('sha1').update(`blob ${bytes.length}\0`).update(bytes).digest('hex'), member.gitBlobSha, 'Git blob changed')
if (member.frozen)
assert.deepEqual(fs.readFileSync(path.join(root, member.frozen)), bytes, 'Frozen upstream recipe/notice changed')
sources.set(member.path, bytes.toString('utf8'))
}
function read(file: string) {
const source = sources.get(file)
assert(source !== undefined, `Unverified source: ${file}`)
return source
}
for (const name of ['typescript', 'terser', 'source-map']) {
const archive = record.archives.find(item => item.name === name)
assert(archive, 'Missing 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')
assert.equal(require('terser/package.json').version, '5.9.0')
assert.equal(require('source-map/package.json').version, '0.7.3')
const config = JSON.parse(read('monaco-languages/src/tsconfig.json')).compilerOptions
assert.equal(config.module, 'amd')
assert.equal(config.target, 'es5')
const modules = new Map(record.modules.map((module) => {
// RequireJS adds this separator after HTML/PHP's trailing source comments.
const suffix = ['vs/basic-languages/html/html', 'vs/basic-languages/php/php'].includes(module.id) ? '\n;' : ''
assert.equal(module.suffix, suffix, 'Unexpected optimizer adaptation')
return [module.id, nameModule(emitAmd(ts, read(module.path), config.lib, config.strict), module.id) + suffix]
}))
assert.equal(modules.size, 76)
assert.deepEqual(record.files.map(file => file.language), fs.readdirSync(path.join(root, 'docs/assets/js/vs/basic-languages')).sort(), 'Missing basic-language bundle')
const results = []
for (const file of record.files) {
const development = cache.member(file.development).toString('utf8')
verifyWorkerSources(development, file.ids, file.ids.map((id) => {
const source = modules.get(id)
assert(source, `Missing grammar: ${id}`)
return { id, source }
}))
const target = fs.readFileSync(path.join(root, file.target.path))
assert.equal(hash(target), file.target.sha256, 'Shipped grammar changed')
const header = `/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * monaco-languages version: 0.30.1(${record.commit})\n * Released under the MIT license\n * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md\n *-----------------------------------------------------------------------------*/\n`
const { code } = await terser.minify(development, { output: { comments: 'some' } })
assert.equal(header + code, target.toString('utf8'), 'Minified grammar differs')
results.push({ language: file.language, modules: file.ids.length, exactSources: true, exactOutput: true, sha256: hash(target) })
}
const fixtureBytes = fs.readFileSync(path.join(root, record.fixtures.path))
assert.equal(hash(fixtureBytes), record.fixtures.sha256, 'Frozen token cases changed')
const fixtures = extractBasicFixtures(ts, record.fixtures.tests, read)
assert.deepEqual(fixtures, JSON.parse(fixtureBytes.toString('utf8')).fixtures, 'Upstream test semantics changed')
assert.equal(fixtures.length, record.fixtures.suites)
assert.equal(fixtures.reduce((total, fixture) => total + fixture.cases.length, 0), record.fixtures.cases)
console.log(JSON.stringify({ files: results, sources: sources.size, upstreamSuites: fixtures.length, upstreamCases: record.fixtures.cases, coreAndEmbeddedOriginsReviewed: false }))
+9
View File
@@ -416,3 +416,12 @@ Three explicitly historical cases reproduce pending-scroll, multiple-viewer hook
ownership and native Error-message defects. Passing those cases is not proof of
candidate fixes. SITE-CONSOLE-01 must add candidate remediation assertions and
main-editor integration checks; see `refactor/console-modernization.md`.
## Monaco basic-language regression
`yarn test:browser test/browser/editor-basic-languages.spec.js --workers=1` runs
all 2,511 frozen upstream tokenization cases and 12 explicitly authored gap cases.
The real docs AMD loader must serve all 76 language files. Expected token offsets,
types and multiline state are checked in each engine. Fixtures are regenerated by
`yarn verify:monaco-basic-sources`; see `scripts/site-vendor/monaco/README.md` for
the fixed archive, historical compiler and upstream coverage limitations.
@@ -0,0 +1,53 @@
import fs from 'node:fs'
import { expect, test } from './fixtures.js'
const upstream = JSON.parse(fs.readFileSync(new URL('../../refactor/baselines/monaco-basic-fixtures.json', import.meta.url))).fixtures
// Upstream has no INI test, empty CSP/ECL suites, and SQL-targeted pgsql/redshift suites.
const supplemental = [
{ language: 'ini', samples: [['[player]', 'metatag.ini'], ['# comment', 'comment.ini'], ['42', 'number.ini']] },
{ language: 'csp', samples: [['default-src', 'string.quote.csp'], ['\'self\'', 'string.quote.csp']] },
{ language: 'ecl', samples: [['// comment', 'comment.ecl'], ['OUTPUT', 'keyword.function.ecl'], ['42', 'number.ecl']] },
{ language: 'pgsql', samples: [['-- comment', 'comment.sql'], ['SELECT', 'keyword.sql']] },
{ language: 'redshift', samples: [['-- comment', 'comment.sql'], ['SELECT', 'keyword.sql']] },
].map(({ language, samples }) => ({ source: 'ArtPlayer supplemental cases', language, languages: [language], cases: samples.map(([line, type]) => [{ line, tokens: [{ startIndex: 0, type }] }]) }))
test('docs Monaco preserves all upstream basic-language tokenization cases', async ({ page }, testInfo) => {
const loaded = new Map()
page.on('response', (response) => {
const match = /\/basic-languages\/([^/]+)\/\1\.js$/.exec(response.url())
if (match)
loaded.set(match[1], response.status())
})
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 (fixtures) => {
window.require.config({ paths: { vs: '/assets/js/vs' } })
const load = ids => new Promise((resolve, reject) => window.require(ids, (...modules) => resolve(modules), reject))
await load(['vs/editor/editor.main'])
const [helper] = await load(['vs/basic-languages/_.contribution'])
const languages = [...new Set(fixtures.flatMap(fixture => fixture.languages))]
await Promise.all(languages.map(language => helper.loadLanguage(language)))
// Match the upstream runner's turn for asynchronous token-provider registration.
await new Promise(resolve => setTimeout(resolve, 0))
const failures = []
let cases = 0
for (const fixture of fixtures) {
for (const [index, expected] of fixture.cases.entries()) {
const text = expected.map(line => line.line).join('\n')
const actual = window.monaco.editor.tokenize(text, fixture.languages[0]).map((tokens, line) => ({
line: expected[line].line,
tokens: tokens.map(token => ({ startIndex: token.offset, type: token.type })),
}))
cases++
if (JSON.stringify(actual) !== JSON.stringify(expected))
failures.push({ source: fixture.source, index, expected, actual })
}
}
return { cases, suites: fixtures.length, languages, failures }
}, [...upstream, ...supplemental])
await testInfo.attach('monaco-basic-results', { contentType: 'application/json', body: JSON.stringify(result, null, 2) })
expect(result.cases).toBe(2523)
expect(result.failures).toEqual([])
expect([...loaded.keys()].sort()).toEqual(fs.readdirSync(new URL('../../docs/assets/js/vs/basic-languages', import.meta.url)).sort())
expect([...loaded.values()].every(status => status === 200)).toBe(true)
})
+12
View File
@@ -2,10 +2,22 @@ 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 ts from 'typescript'
import { extractBasicFixtures } from '../scripts/site-vendor/monaco/basic-fixtures.ts'
import { emitAmd } from '../scripts/site-vendor/monaco/compiler.ts'
import { aliasModule, moduleIds, nameModule, verifyWorkerSources } from '../scripts/site-vendor/monaco/languages.ts'
import { browserTypeScript, verifyTypeScriptSource } from '../scripts/site-vendor/monaco/typescript.ts'
test('Monaco fixture extraction retains generated cases and preprocessing but rejects extra imports', () => {
const file = 'monaco-languages/src/scss/scss.test.ts'
const source = `import { testTokenization } from '../test/testRunner';
const cases = ['a\\nb', 'c'].map(line => [{ line: line.replace(/\\n/g, ' '), tokens: [{ startIndex: 0, type: 'text' }] }]);
testTokenization(['scss', 'css'], cases);`
const [fixture] = extractBasicFixtures(ts, [file], () => source)
assert.deepEqual(fixture.languages, ['scss', 'css'])
assert.deepEqual(fixture.cases.map(item => item[0].line), ['a b', 'c'])
assert.throws(() => extractBasicFixtures(ts, [file], () => 'import fs from "node:fs"; fs.readFileSync("x");'), /Unexpected test import/)
})
const source = `"use strict";
ts.sys = (function () {
return 1;