diff --git a/src/microsoft-learn-mock/src/interactivity/originalCode.ts b/src/microsoft-learn-mock/src/interactivity/originalCode.ts index f83cf82a0..5157691ad 100644 --- a/src/microsoft-learn-mock/src/interactivity/originalCode.ts +++ b/src/microsoft-learn-mock/src/interactivity/originalCode.ts @@ -36,8 +36,21 @@ export function getUrls(): { trydotnetUrl: string, trydotnetOrigin: string } { if (window) { let params = new URLSearchParams(window.location.search); - ret.trydotnetUrl = params.get('trydotnetUrl') || trydotnetUrl; - ret.trydotnetOrigin = params.get('trydotnetOrigin') || trydotnetOrigin; + const paramUrl = params.get('trydotnetUrl'); + if (paramUrl && paramUrl.startsWith('/') && !paramUrl.startsWith('//')) { + ret.trydotnetUrl = paramUrl; + } + const paramOrigin = params.get('trydotnetOrigin'); + if (paramOrigin) { + try { + const url = new URL(paramOrigin); + if (url.protocol === 'https:' && (url.hostname === 'trydotnet.microsoft.com' || url.hostname.endsWith('.microsoft.com'))) { + ret.trydotnetOrigin = paramOrigin; + } + } catch { + // invalid URL, use default + } + } } return ret; } diff --git a/src/microsoft-trydotnet-editor/package-lock.json b/src/microsoft-trydotnet-editor/package-lock.json index 145a068a1..56bb5e97a 100644 --- a/src/microsoft-trydotnet-editor/package-lock.json +++ b/src/microsoft-trydotnet-editor/package-lock.json @@ -23,7 +23,7 @@ "@types/tmp": "^0.2.6", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "chai": "4.3.6", + "chai": "4.5.0", "chai-as-promised": "8.0.2", "css-loader": "^7.1.4", "eslint": "8.18.0", @@ -1253,18 +1253,18 @@ ] }, "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.1.0" }, "engines": { "node": ">=4" @@ -1292,10 +1292,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -1572,15 +1575,15 @@ "dev": true }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, "node_modules/deep-is": { @@ -2405,10 +2408,9 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha1-DXzyDNE/2oCGaf+oj0/8ejlD/EE=", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -3101,12 +3103,12 @@ } }, "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { @@ -4699,9 +4701,9 @@ } }, "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "engines": { "node": ">=4" @@ -6158,18 +6160,18 @@ "dev": true }, "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "requires": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.1.0" } }, "chai-as-promised": { @@ -6190,10 +6192,13 @@ } }, "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } }, "chokidar": { "version": "3.5.3", @@ -6385,9 +6390,9 @@ "dev": true }, "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -6989,8 +6994,8 @@ }, "get-func-name": { "version": "2.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha1-DXzyDNE/2oCGaf+oj0/8ejlD/EE=", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, "glob": { @@ -7477,12 +7482,12 @@ } }, "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "requires": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "lower-case": { @@ -8603,9 +8608,9 @@ } }, "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true }, "type-fest": { diff --git a/src/microsoft-trydotnet-editor/package.json b/src/microsoft-trydotnet-editor/package.json index f46703e18..d6c35032d 100644 --- a/src/microsoft-trydotnet-editor/package.json +++ b/src/microsoft-trydotnet-editor/package.json @@ -31,7 +31,7 @@ "@types/tmp": "^0.2.6", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "chai": "4.3.6", + "chai": "4.5.0", "chai-as-promised": "8.0.2", "css-loader": "^7.1.4", "eslint": "8.18.0", diff --git a/src/microsoft-trydotnet-styles/sass/trydotnet.scss b/src/microsoft-trydotnet-styles/sass/trydotnet.scss index ece6fa102..ad9216a9f 100644 --- a/src/microsoft-trydotnet-styles/sass/trydotnet.scss +++ b/src/microsoft-trydotnet-styles/sass/trydotnet.scss @@ -117,20 +117,12 @@ footer { } } +.code-container, .code-container-inline { position: relative; margin-top: 1em; margin-bottom: 1em; - padding: 01px; - border: 1px solid #ab9ce0; - border-left: 4px solid #ab9ce0; -} - -.code-container { - position: relative; - margin-top: 1em; - margin-bottom: 1em; - padding: 01px; + padding: 1px; border: 1px solid #ab9ce0; border-left: 4px solid #ab9ce0; } diff --git a/src/microsoft-trydotnet/package-lock.json b/src/microsoft-trydotnet/package-lock.json index 26750c33c..bca287752 100644 --- a/src/microsoft-trydotnet/package-lock.json +++ b/src/microsoft-trydotnet/package-lock.json @@ -39,6 +39,9 @@ "ts-node": "10.9.2", "typescript": "^5.8.3", "uglify-js": "3.19.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@asamuzakjp/css-color": { diff --git a/src/microsoft-trydotnet/test/sessionFactory.ts b/src/microsoft-trydotnet/test/sessionFactory.ts index 7484dfb4f..67dc4a14e 100644 --- a/src/microsoft-trydotnet/test/sessionFactory.ts +++ b/src/microsoft-trydotnet/test/sessionFactory.ts @@ -13,8 +13,8 @@ export function createReadySession(configuration: Configuration, editorIFrame: H export function createReadySessionWithMultipleEditors(configuration: Configuration, editorIFrames: HTMLIFrameElement[], window: DOMWindow): Promise { let awaitableSession = createSession(configuration, editorIFrames, window as unknown as Window); - for (let editorIframe of editorIFrames) { - notifyEditorReadyWithId(configuration, window, editorIframe.dataset.trydotnetEditorId!); + for (let editorIFrame of editorIFrames) { + notifyEditorReadyWithId(configuration, window, editorIFrame.dataset.trydotnetEditorId!); } return awaitableSession; } \ No newline at end of file