Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add web-extension support #60

Merged
merged 1 commit into from
Jan 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/node_modules/
/dist/**
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
# Changelog

## [Unreleased](https://github.com/avenga/couper/compare-vscode/v0.9.0...master)
## [Unreleased](https://github.com/avenga/couper/compare-vscode/v1.0.0...master)

---

## [v1.0.0](https://github.com/avenga/couper-vscode/releases/tag/v1.0.0)

### Added

- Support for running as [web-extension](https://code.visualstudio.com/api/extension-guides/web-extensions) [#60](https://github.com/avenga/couper-vscode/pull/60)
- [vscode.dev](https://vscode.dev/)
- [github.dev](https://github.dev/github/dev)

## [v0.9.0](https://github.com/avenga/couper-vscode/releases/tag/v0.9.0)

### Added
Expand Down
9 changes: 6 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ install:
run:
code --extensionDevelopmentPath=$(__DIR__)

# TAG=v0.3 make changelog
changelog:
git-chglog --next-tag $(TAG) $(TAG)
run-web:
code --extensionDevelopmentPath=$(__DIR__) --extensionDevelopmentKind=web

host-vscode-dev:
$(npx serve --cors -l 5000)
npx localtunnel -p 5000
23 changes: 20 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,17 @@
"theme": "light"
},
"engines": {
"vscode": "^1.0.0"
"vscode": "^1.59.0"
},
"main": "src/extension.js",
"browser": "dist/web/extension.js",
"scripts": {
"watch": "true"
"pretest": "npm run compile-web",
"vscode:prepublish": "npm run package-web",
"compile-web": "webpack",
"watch-web": "webpack --watch",
"package-web": "webpack --mode production --devtool hidden-source-map",
"lint": "eslint src --ext ts"
},
"contributes": {
"languages": [
Expand Down Expand Up @@ -53,7 +59,18 @@
"workspaceContains:**/*.hcl"
],
"devDependencies": {
"vscode": "^1.1.37"
"@types/vscode": "^1.59.0",
"eslint": "^7.32.0",
"@typescript-eslint/eslint-plugin": "^4.31.1",
"@typescript-eslint/parser": "^4.31.1",
"typescript": "^4.4.3",
"@vscode/test-web": "^0.0.12",
"ts-loader": "^9.2.5",
"webpack": "^5.52.1",
"webpack-cli": "^4.8.0",
"@types/webpack-env": "^1.16.2",
"assert": "^2.0.0",
"process": "^0.11.10"
},
"bugs": "https://github.com/avenga/couper-vscode/issues",
"repository": {
Expand Down
4 changes: 2 additions & 2 deletions src/completion.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
"use strict"

const vscode = require('vscode')
const common = require('./common')
const { attributes, blocks, functions, variables, DEFAULT_LABEL } = require('./schema')
const common = require('common')
const { attributes, blocks, functions, variables, DEFAULT_LABEL } = require('schema')
malud marked this conversation as resolved.
Show resolved Hide resolved

const selector = { language: 'couper' }

Expand Down
2 changes: 1 addition & 1 deletion src/definition.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict"

const vscode = require('vscode')
const common = require('./common')
const common = require('common')

const selector = { language: 'couper' }

Expand Down
4 changes: 2 additions & 2 deletions src/extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

Object.defineProperty(exports, "__esModule", { value: true })

const Completion = require("./completion")
const Definition = require("./definition")
const Completion = require("completion")
const Definition = require("definition")

exports.activate = (context) => {
context.subscriptions.concat(Completion.providers, Definition.providers)
Expand Down
62 changes: 62 additions & 0 deletions webpack.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const path = require('path');
const webpack = require('webpack');

/** @typedef {import('webpack').Configuration} WebpackConfig **/
/** @type WebpackConfig */
const webExtensionConfig = {
mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
target: 'webworker', // extensions run in a webworker context
entry: {
extension: './src/extension.js', // source of the web extension main file
},
output: {
filename: '[name].js',
path: path.join(__dirname, './dist/web'),
libraryTarget: 'commonjs',
devtoolModuleFilenameTemplate: '../../[resource-path]'
},
resolve: {
mainFields: ['browser', 'module', 'main'], // look for `browser` entry point in imported node modules
extensions: ['.ts', '.js'], // support ts-files and js-files
alias: {
// provides alternate implementation for node module and source files
common: path.resolve(__dirname,'src/common.js'),
completion: path.resolve(__dirname,'src/completion.js'),
definition: path.resolve(__dirname,'src/definition.js'),
extension: path.resolve(__dirname,'src/extension.js'),
schema: path.resolve(__dirname,'src/schema.js'),
},
fallback: {
// Webpack 5 no longer polyfills Node.js core modules automatically.
// see https://webpack.js.org/configuration/resolve/#resolvefallback
// for the list of Node.js core module polyfills.
assert: require.resolve('assert')
}
},
module: {
rules: [
{
test: /\.ts$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader'
}
]
}
]
},
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser' // provide a shim for the global `process` variable
})
],
externals: {
vscode: 'commonjs vscode' // ignored because it doesn't exist
},
performance: {
hints: false
},
devtool: 'nosources-source-map' // create a source map that points to the original source file
};
module.exports = [webExtensionConfig];