diff --git a/.vscode/launch.json b/.vscode/launch.json index 70ae4a7242d85ec485ac739a71295b788973f8cf..72fd892dc3cc2f37ef5a667de039955be24418c2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -217,10 +217,7 @@ "type": "node", "request": "launch", "name": "VS Code (Web)", - "runtimeExecutable": "yarn", - "runtimeArgs": [ - "web" - ], + "program": "${workspaceFolder}/scripts/code-web.js", "presentation": { "group": "0_vscode", "order": 2 diff --git a/extensions/css-language-features/client/src/browser/cssClientBrowserMain.ts b/extensions/css-language-features/client/src/browser/cssClientBrowserMain.ts new file mode 100644 index 0000000000000000000000000000000000000000..18e1d607a5296d0837d7f0582fa6c17fd7175b90 --- /dev/null +++ b/extensions/css-language-features/client/src/browser/cssClientBrowserMain.ts @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { ExtensionContext, window } from 'vscode'; +//import { startClient } from '../cssClient'; + +// this method is called when vs code is activated +export function activate(_context: ExtensionContext) { + + window.showInformationMessage('cssClientBrowserMain.ts running'); + + //startClient(context, {}); +} diff --git a/extensions/css-language-features/extension-browser.webpack.config.js b/extensions/css-language-features/extension-browser.webpack.config.js new file mode 100644 index 0000000000000000000000000000000000000000..30a7fe2341336242021daa2e51a68cfdff48bac9 --- /dev/null +++ b/extensions/css-language-features/extension-browser.webpack.config.js @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check + +'use strict'; + +const withDefaults = require('../shared.webpack.config'); +const path = require('path'); + +module.exports = withDefaults({ + target: 'webworker', + context: path.join(__dirname, 'client'), + entry: { + extension: './src/browser/cssClientBrowserMain.ts', + }, + output: { + filename: 'cssClientBrowserMain.js', + path: path.join(__dirname, 'client', 'dist', 'browser') + } +}); diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json index a96cfa56c5f317878b6d503977a1440ab8d1fb21..a02e79ecf6d7ed81dcb3b94621d984ed0df9cf4a 100644 --- a/extensions/css-language-features/package.json +++ b/extensions/css-language-features/package.json @@ -16,6 +16,7 @@ "onCommand:_css.applyCodeAction" ], "main": "./client/out/node/cssClientMain", + "browser": "./client/dist/browser/cssClientBrowserMain", "enableProposedApi": true, "scripts": { "compile": "gulp compile-extension:css-language-features-client compile-extension:css-language-features-server", diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock index b2188f181a13a25cb02636d27c729c68e5a09b48..2f639b86a16763f943212496c45ad86b03512c82 100644 --- a/extensions/css-language-features/server/yarn.lock +++ b/extensions/css-language-features/server/yarn.lock @@ -701,7 +701,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -vscode-css-languageservice@^4.3.0-next.0: +vscode-css-languageservice@4.3.0-next.0: version "4.3.0-next.0" resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.3.0-next.0.tgz#70ca6e192e1d7fb904867e696851b14401da9573" integrity sha512-OwYavU+gqocK3YQi484CrGkGMMRRmzJdeNMfgAr/SssKJVJuvkLec7NbAopM42KTE6OPaqU3AFgI5AMERmIJ4A== diff --git a/extensions/vscode-web-playground/package.json b/extensions/vscode-web-playground/package.json index 46b6102c10ee4225e05f4c4f30bed7166e6cca2f..05fa8bdeb78c8fdfa34fc405404d6095e1524ec7 100644 --- a/extensions/vscode-web-playground/package.json +++ b/extensions/vscode-web-playground/package.json @@ -10,7 +10,7 @@ "onFileSystem:memfs", "onDebug" ], - "main": "./out/extension", + "browser": "./out/extension", "engines": { "vscode": "^1.25.0" }, diff --git a/scripts/code-web.js b/scripts/code-web.js index b208a1e908e09e863f3f7e9af6568e2020315684..549de9019dfed48fdc418ed4814469aaa67c06d3 100755 --- a/scripts/code-web.js +++ b/scripts/code-web.js @@ -15,6 +15,8 @@ const util = require('util'); const opn = require('opn'); const minimist = require('minimist'); +const webpack = require("webpack"); + const APP_ROOT = path.dirname(__dirname); const EXTENSIONS_ROOT = path.join(APP_ROOT, 'extensions'); const WEB_MAIN = path.join(APP_ROOT, 'src', 'vs', 'code', 'browser', 'workbench', 'workbench-dev.html'); @@ -140,30 +142,42 @@ function handleStaticExtension(req, res, parsedUrl) { */ async function handleRoot(req, res) { const extensionFolders = await util.promisify(fs.readdir)(EXTENSIONS_ROOT); - const mapExtensionFolderToExtensionPackageJSON = new Map(); + + const staticExtensions = []; + + const webpackConfigs = []; await Promise.all(extensionFolders.map(async extensionFolder => { try { const packageJSON = JSON.parse((await util.promisify(fs.readFile)(path.join(EXTENSIONS_ROOT, extensionFolder, 'package.json'))).toString()); - if (packageJSON.main && packageJSON.name !== 'vscode-web-playground') { + if (packageJSON.main && !packageJSON.browser) { return; // unsupported } - packageJSON.extensionKind = ['web']; // enable for Web + if (packageJSON.browser) { + packageJSON.main = packageJSON.browser; + const webpackConfigPath = path.join(EXTENSIONS_ROOT, extensionFolder, 'extension-browser.webpack.config.js'); + if ((await util.promisify(fs.exists)(webpackConfigPath))) { + webpackConfigs.push(require(webpackConfigPath)); + packageJSON.main.replace('/out/', '/dist/'); + } + } - mapExtensionFolderToExtensionPackageJSON.set(extensionFolder, packageJSON); + packageJSON.extensionKind = ['web']; // enable for Web + staticExtensions.push({ + packageJSON, + extensionLocation: { scheme: SCHEME, authority: AUTHORITY, path: `/static-extension/${extensionFolder}` } + }); } catch (error) { return null; } })); - const staticExtensions = []; - - // Built in extensions - mapExtensionFolderToExtensionPackageJSON.forEach((packageJSON, extensionFolder) => { - staticExtensions.push({ - packageJSON, - extensionLocation: { scheme: SCHEME, authority: AUTHORITY, path: `/static-extension/${extensionFolder}` } - }); + webpack(webpackConfigs).watch({}, (err, stats) => { + if (err) { + console.log(err); + } else { + console.log(stats.toString()); + } }); const webConfiguration = escapeAttribute(JSON.stringify({ staticExtensions, folderUri: { scheme: 'memfs', path: `/sample-folder` }}));