diff --git a/README.md b/README.md
index f0aaffb5..ca892f5b 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,13 @@ let g:LanguageClient_serverCommands = {
\ }
```
+#### Monaco Editor([monaco-languageclient](https://github.com/TypeFox/monaco-languageclient))
+
+https://github.com/joe-re/sql-language-server/blob/master/example/monaco_editor
+
+It's also used to develop sql-language-server.
+You can follow [development section](#development) to check Mocaco Editor working.
+
## Usage
### CLI
@@ -111,7 +118,7 @@ Please restart sql-language-server process after create .sqllsrc.json.
| Key | Description | value | required | default |
| ------------ | ------------------------------------------------------------------------------------------------------------------------- | ----------------------- | -------- | --------------------------------- |
| name | Connection name(free-form text) | | true | |
-| adapter | Database type | "mysql" #124; "postgres" #124; "sqlite3" | true | |
+| adapter | Database type | "mysql" or "postgres" or "sqlite3" | true | |
| host | Database host | string | false | |
| port | Database port | string | false | mysql:3306, postgres:5432 |
| user | Database user | string | false | mysql:"root", postgres:"postgres" |
@@ -272,3 +279,30 @@ method: workspace/executeCommand
command: fixAllFixableProblems
arguments: string(document uri)
```
+
+## Contributing on sql-language-server
+
+### Bug Repots and Feature Requests
+
+[GitHub Issues](https://github.com/joe-re/sql-language-server/issues) are opening for asking question, reporting problems, and suggests improvement.
+
+You can start a disccustion about new rule for SQLint there also.
+
+### Development
+
+Code contributions are always appreciated. Feel free to fork the repo and submit pull requests.
+
+You can start to develop sql-language-server on docker-compose.
+Please follows below steps.
+
+1. Setup docker-compose on your machine.
+ - https://docs.docker.com/compose/install/
+2. Start development process on your docker.
+
+```sh
+$ docker-compose up
+```
+
+3. Open `http://localhost:3000` on your browser.
+
+
diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 00000000..71c70eca
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ assets:
+ build:
+ context: .
+ dockerfile: dockerfile
+ volumes:
+ - .:/opt/sql-language-server:rw
+ command: 'yarn dev' # 'tail -f /dev/null'
+ ports:
+ - '3000:3000'
+ postgres:
+ image: postgres:10
+ restart: always
+ environment:
+ POSTGRES_DB: postgres_db
+ POSTGRES_USER: sqlls
+ POSTGRES_PASSWORD: sqlls
+ volumes:
+ - postgres:/var/lib/postgresql/data
+volumes:
+ postgres:
\ No newline at end of file
diff --git a/dockerfile b/dockerfile
new file mode 100644
index 00000000..c0ea9b8a
--- /dev/null
+++ b/dockerfile
@@ -0,0 +1,9 @@
+FROM node:12
+
+COPY ./example /opt/sql-language-server/example
+COPY ./package.json yarn.lock /opt/sql-language-server/
+COPY ./packages/server/package.json /opt/sql-language-server/packages/server/
+COPY ./packages/sql-parser/package.json /opt/sql-language-server/packages/sql-parser/
+COPY ./packages/sqlint/package.json /opt/sql-language-server/packages/sqlint/
+WORKDIR /opt/sql-language-server
+RUN yarn
\ No newline at end of file
diff --git a/dockerfile_dev_example_server b/dockerfile_dev_example_server
new file mode 100644
index 00000000..c0ea9b8a
--- /dev/null
+++ b/dockerfile_dev_example_server
@@ -0,0 +1,9 @@
+FROM node:12
+
+COPY ./example /opt/sql-language-server/example
+COPY ./package.json yarn.lock /opt/sql-language-server/
+COPY ./packages/server/package.json /opt/sql-language-server/packages/server/
+COPY ./packages/sql-parser/package.json /opt/sql-language-server/packages/sql-parser/
+COPY ./packages/sqlint/package.json /opt/sql-language-server/packages/sqlint/
+WORKDIR /opt/sql-language-server
+RUN yarn
\ No newline at end of file
diff --git a/example/monaco_editor/.gitignore b/example/monaco_editor/.gitignore
new file mode 100644
index 00000000..1521c8b7
--- /dev/null
+++ b/example/monaco_editor/.gitignore
@@ -0,0 +1 @@
+dist
diff --git a/example/monaco_editor/.sqllsrc.json b/example/monaco_editor/.sqllsrc.json
new file mode 100644
index 00000000..0ce72c88
--- /dev/null
+++ b/example/monaco_editor/.sqllsrc.json
@@ -0,0 +1,8 @@
+{
+ "adapter": "postgres",
+ "host": "postgres",
+ "port": 5432,
+ "user": "sqlls",
+ "password": "sqlls",
+ "database": "postgres_db"
+}
\ No newline at end of file
diff --git a/packages/server/example/monaco_editor/README.md b/example/monaco_editor/README.md
similarity index 100%
rename from packages/server/example/monaco_editor/README.md
rename to example/monaco_editor/README.md
diff --git a/example/monaco_editor/config/config.json b/example/monaco_editor/config/config.json
new file mode 100644
index 00000000..b5c97da4
--- /dev/null
+++ b/example/monaco_editor/config/config.json
@@ -0,0 +1,16 @@
+{
+ "postgres": {
+ "username": "sqlls",
+ "password": "sqlls",
+ "database": "postgres_db",
+ "host": "postgres",
+ "dialect": "postgres"
+ },
+ "mysql": {
+ "username": "root",
+ "password": null,
+ "database": "database_test",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ }
+}
diff --git a/example/monaco_editor/migrations/20200715005652-create-user.js b/example/monaco_editor/migrations/20200715005652-create-user.js
new file mode 100644
index 00000000..d007022a
--- /dev/null
+++ b/example/monaco_editor/migrations/20200715005652-create-user.js
@@ -0,0 +1,33 @@
+'use strict';
+module.exports = {
+ up: async (queryInterface, Sequelize) => {
+ await queryInterface.createTable('Users', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: Sequelize.INTEGER
+ },
+ firstName: {
+ type: Sequelize.STRING
+ },
+ lastName: {
+ type: Sequelize.STRING
+ },
+ email: {
+ type: Sequelize.STRING
+ },
+ createdAt: {
+ allowNull: false,
+ type: Sequelize.DATE
+ },
+ updatedAt: {
+ allowNull: false,
+ type: Sequelize.DATE
+ }
+ });
+ },
+ down: async (queryInterface, Sequelize) => {
+ await queryInterface.dropTable('Users');
+ }
+};
\ No newline at end of file
diff --git a/example/monaco_editor/models/index.js b/example/monaco_editor/models/index.js
new file mode 100644
index 00000000..33f09e77
--- /dev/null
+++ b/example/monaco_editor/models/index.js
@@ -0,0 +1,37 @@
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+const Sequelize = require('sequelize');
+const basename = path.basename(__filename);
+const env = process.env.NODE_ENV || 'development';
+const config = require(__dirname + '/../config/config.json')[env];
+const db = {};
+
+let sequelize;
+if (config.use_env_variable) {
+ sequelize = new Sequelize(process.env[config.use_env_variable], config);
+} else {
+ sequelize = new Sequelize(config.database, config.username, config.password, config);
+}
+
+fs
+ .readdirSync(__dirname)
+ .filter(file => {
+ return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
+ })
+ .forEach(file => {
+ const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
+ db[model.name] = model;
+ });
+
+Object.keys(db).forEach(modelName => {
+ if (db[modelName].associate) {
+ db[modelName].associate(db);
+ }
+});
+
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
+
+module.exports = db;
diff --git a/example/monaco_editor/models/user.js b/example/monaco_editor/models/user.js
new file mode 100644
index 00000000..b4d44cf9
--- /dev/null
+++ b/example/monaco_editor/models/user.js
@@ -0,0 +1,25 @@
+'use strict';
+const {
+ Model
+} = require('sequelize');
+module.exports = (sequelize, DataTypes) => {
+ class User extends Model {
+ /**
+ * Helper method for defining associations.
+ * This method is not a part of Sequelize lifecycle.
+ * The `models/index` file will call this method automatically.
+ */
+ static associate(models) {
+ // define association here
+ }
+ };
+ User.init({
+ firstName: DataTypes.STRING,
+ lastName: DataTypes.STRING,
+ email: DataTypes.STRING
+ }, {
+ sequelize,
+ modelName: 'User',
+ });
+ return User;
+};
\ No newline at end of file
diff --git a/packages/server/example/monaco_editor/package.json b/example/monaco_editor/package.json
similarity index 56%
rename from packages/server/example/monaco_editor/package.json
rename to example/monaco_editor/package.json
index cbbcc5b7..979787da 100644
--- a/packages/server/example/monaco_editor/package.json
+++ b/example/monaco_editor/package.json
@@ -5,12 +5,13 @@
"main": "index.js",
"license": "MIT",
"scripts": {
- "compile": "tsc",
- "copy": "cp src/index.html lib/index.html",
- "build": "yarn build:server && yarn build:client",
- "build:client": "yarn compile && webpack && yarn run copy",
- "build:server": "cd ../../ && yarn",
- "start": "node lib/server.js"
+ "tsc": "tsc",
+ "tsc:watch": "tsc -w",
+ "webpack:watch": "webpack -w",
+ "copy": "cp src/index.html dist/index.html",
+ "build": "yarn tsc && webpack && yarn run copy",
+ "watch": "run-p copy webpack:watch",
+ "start": "ts-node-dev --transpile-only ./src/server/server.ts"
},
"dependencies": {
"express": "^4.17.1",
@@ -25,9 +26,17 @@
"@types/ws": "^7.2.6",
"css-loader": "^3.6.0",
"file-loader": "^6.0.0",
+ "npm-run-all": "^4.1.5",
+ "sequelize": "^6.3.3",
+ "sequelize-cli": "^6.2.0",
"source-map-loader": "^1.0.1",
"style-loader": "^1.2.1",
+ "svelte": "^3.24.0",
+ "svelte-loader": "^2.13.6",
+ "ts-loader": "^7.0.5",
+ "ts-node-dev": "^1.0.0-pre.50",
"typescript": "^3.9.6",
+ "wait-on": "^5.0.1",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12"
}
diff --git a/example/monaco_editor/src/client/App.svelte b/example/monaco_editor/src/client/App.svelte
new file mode 100644
index 00000000..5fe5517a
--- /dev/null
+++ b/example/monaco_editor/src/client/App.svelte
@@ -0,0 +1,32 @@
+
+
+
Monaco Language Client SQLLanguageServer Sample
+
+
+
+
\ No newline at end of file
diff --git a/example/monaco_editor/src/client/client.ts b/example/monaco_editor/src/client/client.ts
new file mode 100644
index 00000000..6b931b12
--- /dev/null
+++ b/example/monaco_editor/src/client/client.ts
@@ -0,0 +1,92 @@
+///
+
+import { listen, MessageConnection } from "vscode-ws-jsonrpc";
+import {
+ MonacoLanguageClient,
+ MonacoServices,
+ createConnection,
+ ExecuteCommandParams,
+} from "monaco-languageclient";
+import ReconnectingWebSocket from "reconnecting-websocket";
+import { URI } from 'vscode-uri'
+
+let languageClient: MonacoLanguageClient;
+export function initClient() {
+ monaco.languages.register({
+ id: "sql",
+ extensions: [".sql"],
+ aliases: ["SQL", "sql"],
+ mimetypes: ["application/json"],
+ });
+
+ const value = `SELECT * FROM users`;
+ const editor = monaco.editor.create(document.getElementById("container")!, {
+ model: monaco.editor.createModel(
+ value,
+ "sql",
+ monaco.Uri.parse("inmemory://model.sql")
+ ),
+ glyphMargin: true,
+ tabCompletion: "on",
+ });
+
+ MonacoServices.install(editor);
+
+ const URL = "ws://localhost:3000/server";
+ const webSocket = createWebSocket(URL) as WebSocket;
+ listen({
+ webSocket,
+ onConnection: (connection) => {
+ languageClient = createLanguageClient(connection);
+ const disposable = languageClient.start();
+ connection.onClose(() => disposable.dispose());
+ },
+ });
+
+ function createLanguageClient(
+ connection: MessageConnection
+ ): MonacoLanguageClient {
+ return new MonacoLanguageClient({
+ name: "SQL Language Server MonacoClient",
+ clientOptions: {
+ documentSelector: ["sql"],
+ workspaceFolder: {
+ uri: URI.file('/opt/sql-language-server/example/monaco_editor'),
+ name: 'workspace',
+ index: 0
+ }
+ },
+ connectionProvider: {
+ get: (errorHandler, closeHandler) => {
+ return Promise.resolve(
+ createConnection(connection, errorHandler, closeHandler)
+ );
+ },
+ },
+ });
+ }
+
+ function createWebSocket(url: string): ReconnectingWebSocket {
+ const socketOptions = {
+ maxReconnectionDelay: 10000,
+ minReconnectionDelay: 1000,
+ reconnectionDelayGrowFactor: 1.3,
+ connectionTimeout: 10000,
+ maxRetries: Infinity,
+ debug: false,
+ };
+ return new ReconnectingWebSocket(url, [], socketOptions);
+ }
+}
+
+export function getLanguageClient() {
+ return languageClient;
+}
+
+export function executeFixAllFixableProblemsCommand() {
+ const params: ExecuteCommandParams = {
+ command: 'fixAllFixableProblems',
+ arguments: ['inmemory://model.sql']
+ }
+ languageClient.sendRequest('workspace/executeCommand', params)
+}
diff --git a/example/monaco_editor/src/client/index.ts b/example/monaco_editor/src/client/index.ts
new file mode 100644
index 00000000..6a7210d9
--- /dev/null
+++ b/example/monaco_editor/src/client/index.ts
@@ -0,0 +1,17 @@
+import App from './App.svelte';
+import { initClient } from './client'
+
+require('monaco-editor-core');
+(self as any).MonacoEnvironment = {
+ getWorkerUrl: () => './editor.worker.bundle.js'
+}
+
+const app = new App({
+ target: document.body,
+});
+
+(window as any).app = app;
+
+initClient()
+
+// export default app;
\ No newline at end of file
diff --git a/example/monaco_editor/src/client/main.ts b/example/monaco_editor/src/client/main.ts
new file mode 100644
index 00000000..f1279e06
--- /dev/null
+++ b/example/monaco_editor/src/client/main.ts
@@ -0,0 +1,2 @@
+
+require('./client');
\ No newline at end of file
diff --git a/packages/server/example/monaco_editor/src/index.html b/example/monaco_editor/src/index.html
similarity index 100%
rename from packages/server/example/monaco_editor/src/index.html
rename to example/monaco_editor/src/index.html
diff --git a/packages/server/example/monaco_editor/src/launchServer.ts b/example/monaco_editor/src/server/launchServer.ts
similarity index 91%
rename from packages/server/example/monaco_editor/src/launchServer.ts
rename to example/monaco_editor/src/server/launchServer.ts
index 70faa3e3..231383ed 100644
--- a/packages/server/example/monaco_editor/src/launchServer.ts
+++ b/example/monaco_editor/src/server/launchServer.ts
@@ -1,9 +1,8 @@
import * as path from "path";
import * as rpc from "vscode-ws-jsonrpc";
-import * as server from "vscode-ws-jsonrpc/lib/server";
import * as lsp from "vscode-languageserver";
import { createConnection } from 'vscode-languageserver';
-import { createServerWithConnection } from '../../../dist_index/index'
+import { createServerWithConnection } from 'sql-language-server/src/index'
export function launchServer(socket: rpc.IWebSocket) {
const reader = new rpc.WebSocketMessageReader(socket);
diff --git a/packages/server/example/monaco_editor/src/server.ts b/example/monaco_editor/src/server/server.ts
similarity index 74%
rename from packages/server/example/monaco_editor/src/server.ts
rename to example/monaco_editor/src/server/server.ts
index 674ee6f4..ee31d092 100644
--- a/packages/server/example/monaco_editor/src/server.ts
+++ b/example/monaco_editor/src/server/server.ts
@@ -1,10 +1,10 @@
-import * as express from "express";
-import * as ws from "ws";
-import * as http from "http";
-import * as net from "net";
-import * as url from "url";
-import * as rpc from "vscode-ws-jsonrpc";
-import { launchServer } from './launchServer'
+import express from "express";
+import ws from "ws";
+import http from "http";
+import net from "net";
+import url from "url";
+import rpc from "vscode-ws-jsonrpc";
+import { launchServer } from "./launchServer";
process.on("uncaughtException", function (err: any) {
console.error("Uncaught Exception: ", err.toString());
@@ -14,7 +14,7 @@ process.on("uncaughtException", function (err: any) {
});
const app = express();
-app.use(express.static(__dirname));
+app.use(express.static(`${process.cwd()}/dist`));
const server = app.listen(3000);
@@ -43,12 +43,11 @@ server.on(
};
if (webSocket.readyState === webSocket.OPEN) {
console.log("ready to launch server");
- launchServer(socket)
+ launchServer(socket);
} else {
webSocket.on("open", () => {
- // launch(socket)
- console.log("ready to raunch server2");
- launchServer(socket)
+ console.log("ready to launch server");
+ launchServer(socket);
});
}
});
diff --git a/example/monaco_editor/tsconfig.json b/example/monaco_editor/tsconfig.json
new file mode 100644
index 00000000..bcefcf6f
--- /dev/null
+++ b/example/monaco_editor/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "target": "ES2015",
+ "module": "CommonJS",
+ "moduleResolution": "Node",
+ "outDir": "dist",
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "declarationMap": true,
+ "inlineSources": false,
+ "esModuleInterop": true,
+ "declaration": true,
+ "stripInternal": true,
+ "lib": [
+ "es2016",
+ "dom"
+ ],
+ },
+ "include": [
+ "src"
+ ],
+ "exclude": [ "node_modules" ]
+}
+
diff --git a/example/monaco_editor/webpack.config.js b/example/monaco_editor/webpack.config.js
new file mode 100644
index 00000000..af55e4c7
--- /dev/null
+++ b/example/monaco_editor/webpack.config.js
@@ -0,0 +1,68 @@
+const path = require('path')
+const src = path.resolve(__dirname, 'src/client')
+const dist = path.resolve(__dirname, 'dist')
+
+const client = {
+ entry: {
+ main: path.resolve(src, 'index.ts'),
+ 'editor.worker': 'monaco-editor-core/esm/vs/editor/editor.worker.js'
+ },
+ output: {
+ filename: '[name].bundle.js',
+ path: dist
+ },
+ target: 'web',
+ mode: 'development',
+ node: {
+ fs: 'empty',
+ child_process: 'empty',
+ net: 'empty',
+ crypto: 'empty'
+ },
+ resolve: {
+ alias: {
+ 'vscode': require.resolve('monaco-languageclient/lib/vscode-compatibility')
+ },
+ extensions: ['.js', '.json', '.ttf', '.ts', '.svelte']
+ },
+ devtool: 'source-map',
+ module: {
+ rules: [{
+ test: /\.svelte$/,
+ use: {
+ loader: 'svelte-loader'
+ }
+ },
+ {
+ test: /\.ts$/,
+ use: [
+ {
+ loader: 'ts-loader',
+ options: {
+ transpileOnly: true
+ },
+ }
+ ],
+ exclude: /node_modules/
+ },
+ {
+ test: /\.css$/i,
+ use: ['style-loader', 'css-loader']
+ },
+ {
+ test: /\.ttf$/,
+ use: ['file-loader']
+ },
+ {
+ test: /\.js$/,
+ enforce: 'pre',
+ loader: 'source-map-loader',
+ exclude: /node_modules/
+ }]
+ },
+ watchOptions: {
+ poll: 1000
+ }
+}
+
+module.exports = [client]
\ No newline at end of file
diff --git a/package.json b/package.json
index 74052bfa..e752dfff 100644
--- a/package.json
+++ b/package.json
@@ -15,13 +15,16 @@
"license": "MIT",
"publisher": "joe-re",
"scripts": {
- "postinstall": "npm i sqlite3 electron-rebuild",
"compile": "npm run compile:client && npm run compile:server",
"compile:client": "cd ./packages/client && yarn run compile",
"compile:server": "cd ./packages/server && yarn run compile",
"watch": "run-p watch:client watch:server",
"watch:client": "cd ./packages/client && yarn run watch",
- "watch:server": "cd ./packages/server && yarn run watch",
+ "watch:sqlint": "cd ./packages/sqlint && yarn run watch",
+ "watch:server": "wait-on ./packages/sqlint/dist/src/index.js && cd ./packages/server && yarn run watch:index",
+ "watch:dev-server:client": "cd ./example/monaco_editor && yarn run webpack:watch",
+ "watch:dev-server:server": "wait-on ./packages/server/dist/src/index.js && cd ./example/monaco_editor && yarn run start",
+ "dev": "run-p watch:sqlint watch:server watch:dev-server:client watch:dev-server:server",
"vscode:prepublish": "yarn run compile"
},
"engines": {
@@ -51,10 +54,12 @@
},
"private": true,
"workspaces": [
- "packages/*"
+ "packages/*",
+ "example/monaco_editor/*"
],
"devDependencies": {
- "npm-run-all": "^4.1.3"
+ "npm-run-all": "^4.1.3",
+ "wait-on": "^5.0.1"
},
"dependencies": {
"electron-rebuild": "^1.11.0",
diff --git a/packages/server/bin/cli.ts b/packages/server/bin/cli.ts
index 903dbf9d..d3701d18 100644
--- a/packages/server/bin/cli.ts
+++ b/packages/server/bin/cli.ts
@@ -1,5 +1,5 @@
import yargs from 'yargs'
-import { createServer } from '../createServer'
+import { createServer } from '../src/createServer'
const cli = yargs
.usage('SQL Language Server Command Line Interface')
diff --git a/packages/server/example/monaco_editor/.gitignore b/packages/server/example/monaco_editor/.gitignore
deleted file mode 100644
index a65b4177..00000000
--- a/packages/server/example/monaco_editor/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-lib
diff --git a/packages/server/example/monaco_editor/src/client.ts b/packages/server/example/monaco_editor/src/client.ts
deleted file mode 100644
index d9fb531e..00000000
--- a/packages/server/example/monaco_editor/src/client.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-///
-
-import { listen, MessageConnection } from "vscode-ws-jsonrpc";
-import {
- MonacoLanguageClient,
- MonacoServices,
- createConnection,
-} from "monaco-languageclient";
-import ReconnectingWebSocket from "reconnecting-websocket";
-
-monaco.languages.register({
- id: "sql",
- extensions: [".sql"],
- aliases: ["SQL", "sql"],
- mimetypes: ["application/json"],
-});
-
-const value = `SELECT * FROM users`;
-const editor = monaco.editor.create(document.getElementById("container")!, {
- model: monaco.editor.createModel(
- value,
- "sql",
- monaco.Uri.parse("inmemory://model.sql"),
- ),
- glyphMargin: true,
- tabCompletion: 'on'
-});
-
-MonacoServices.install(editor);
-
-const URL = "ws://localhost:3000/server";
-const webSocket = createWebSocket(URL) as WebSocket;
-listen({
- webSocket,
- onConnection: (connection) => {
- const languageClient = createLanguageClient(connection);
- const disposable = languageClient.start();
- connection.onClose(() => disposable.dispose());
- },
-});
-
-function createLanguageClient(
- connection: MessageConnection
-): MonacoLanguageClient {
- return new MonacoLanguageClient({
- name: "SQL Language Server MonacoClient",
- clientOptions: {
- documentSelector: ["sql"],
- },
- connectionProvider: {
- get: (errorHandler, closeHandler) => {
- return Promise.resolve(
- createConnection(connection, errorHandler, closeHandler)
- );
- },
- },
- });
-}
-
-function createWebSocket(url: string): ReconnectingWebSocket {
- const socketOptions = {
- maxReconnectionDelay: 10000,
- minReconnectionDelay: 1000,
- reconnectionDelayGrowFactor: 1.3,
- connectionTimeout: 10000,
- maxRetries: Infinity,
- debug: false,
- };
- return new ReconnectingWebSocket(url, [], socketOptions);
-}
diff --git a/packages/server/example/monaco_editor/src/main.ts b/packages/server/example/monaco_editor/src/main.ts
deleted file mode 100644
index 837ac53a..00000000
--- a/packages/server/example/monaco_editor/src/main.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-require('monaco-editor-core');
-(self as any).MonacoEnvironment = {
- getWorkerUrl: () => './editor.worker.bundle.js'
-}
-require('./client');
\ No newline at end of file
diff --git a/packages/server/example/monaco_editor/tsconfig.json b/packages/server/example/monaco_editor/tsconfig.json
deleted file mode 100644
index 45f39d63..00000000
--- a/packages/server/example/monaco_editor/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "compilerOptions": {
- "strict": true,
- "target": "es6",
- "module": "commonjs",
- "moduleResolution": "node",
- "outDir": "lib",
- "skipLibCheck": true,
- "sourceMap": true,
- "declarationMap": true,
- "inlineSources": false,
- "declaration": true,
- "stripInternal": true,
- "lib": [
- "es2016",
- "dom"
- ],
- },
- "include": [
- "src"
- ],
- "exclude": [ "node_modules" ]
-}
\ No newline at end of file
diff --git a/packages/server/example/monaco_editor/webpack.config.js b/packages/server/example/monaco_editor/webpack.config.js
deleted file mode 100644
index 10057874..00000000
--- a/packages/server/example/monaco_editor/webpack.config.js
+++ /dev/null
@@ -1,42 +0,0 @@
-const path = require('path')
-const lib = path.resolve(__dirname, 'lib')
-
-module.exports = {
- entry: {
- main: path.resolve(lib, 'main.js'),
- 'editor.worker': 'monaco-editor-core/esm/vs/editor/editor.worker.js'
- },
- output: {
- filename: '[name].bundle.js',
- path: lib
- },
- target: 'web',
- node: {
- fs: 'empty',
- child_process: 'empty',
- net: 'empty',
- crypto: 'empty'
- },
- resolve: {
- alias: {
- 'vscode': require.resolve('monaco-languageclient/lib/vscode-compatibility')
- },
- extensions: ['.js', '.json', '.ttf']
- },
- devtool: 'source-map',
- module: {
- rules: [{
- test: /\.css$/i,
- use: ['style-loader', 'css-loader']
- },
- {
- test: /\.ttf$/,
- use: ['file-loader']
- },
- {
- test: /\.js$/,
- enforce: 'pre',
- loader: 'source-map-loader'
- }]
- }
-}
\ No newline at end of file
diff --git a/packages/server/package.json b/packages/server/package.json
index 53997ea2..465ccd03 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,24 +1,24 @@
{
"name": "sql-language-server",
"version": "0.10.0",
- "main": "dist_index/index.js",
+ "main": "dist/src/index.js",
"bin": {
- "sql-language-server": "./dist/cli.js"
+ "sql-language-server": "./dist/bin/cli.js"
},
"license": "MIT",
"scripts": {
- "compile:cli": "rm -rf dist && rollup -c",
- "compile:index": "rm -rf dist_index && rollup -c rollup.index.config.js",
- "compile:sqlint": "cd ../sqlint && yarn && yarn build",
- "clean": "rm -rf dist dist_index",
- "watch": "rollup -c -w",
+ "compile:cli": "rollup -c",
+ "compile:index": "tsc -p .",
+ "clean": "rm -rf dist",
+ "watch:cli": "rollup -c -w",
+ "watch:index": "tsc -w",
"test": "jest",
- "prepublish": "yarn compile:sqlint && yarn compile:cli && yarn compile:index"
+ "_prepare": "yarn compile:sqlint && yarn compile:cli && yarn compile:index"
},
+ "type": "module",
"files": [
"package.json",
- "dist",
- "dist_index"
+ "dist"
],
"dependencies": {
"@types/pg": "^7.4.10",
@@ -31,7 +31,8 @@
"vscode-languageclient": "^6.1.3",
"vscode-languageserver": "^6.1.1",
"vscode-languageserver-textdocument": "^1.0.1",
- "yargs": "^12.0.1"
+ "yargs": "^12.0.1",
+ "sqlint": "^0.9.2"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^11.1.0",
diff --git a/packages/server/rollup.config.js b/packages/server/rollup.config.js
index fd51c3b7..6fddddf4 100644
--- a/packages/server/rollup.config.js
+++ b/packages/server/rollup.config.js
@@ -13,7 +13,7 @@ export default {
sourcemap: true
},
plugins: [
- typescript(),
+ typescript({ tsconfig: 'tsconfig.cli.json' }),
json(),
resolve({
preferBuiltins: false
diff --git a/packages/server/rollup.index.config.js b/packages/server/rollup.index.config.js
deleted file mode 100644
index c15c214f..00000000
--- a/packages/server/rollup.index.config.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import typescript from '@rollup/plugin-typescript';
-import commonjs from "@rollup/plugin-commonjs";
-import json from "@rollup/plugin-json";
-import replace from "@rollup/plugin-replace";
-import resolve from '@rollup/plugin-node-resolve';
-
-export default {
- input: 'index.ts',
- output: {
- dir: 'dist_index',
- format: 'cjs',
- sourcemap: true
- },
- plugins: [
- typescript({ tsconfig: 'tsconfig.index.json' }),
- json(),
- resolve({
- preferBuiltins: false
- }),
- replace({
- delimiters: ['', ''],
- values: {
- 'require(\'readable-stream/transform\')': 'require(\'stream\').Transform',
- 'require("readable-stream/transform")': 'require("stream").Transform',
- 'readable-stream': 'stream'
- }
- }),
- commonjs({
- ignore: ['pg-native' , './native']
- })
- ]
-};
diff --git a/packages/server/SettingStore.ts b/packages/server/src/SettingStore.ts
similarity index 98%
rename from packages/server/SettingStore.ts
rename to packages/server/src/SettingStore.ts
index c3cefbd0..40162988 100644
--- a/packages/server/SettingStore.ts
+++ b/packages/server/src/SettingStore.ts
@@ -15,7 +15,7 @@ export type SSHConfig = {
}
export type Settings = {
name: string | null,
- adapter: 'mysql' | 'postgresql' | 'sqlite3' | null,
+ adapter: 'mysql' | 'postgresql' | 'postgres' | 'sqlite3' | null,
host: string | null
port: number | null
user: string | null
diff --git a/packages/server/ambient.d.ts b/packages/server/src/ambient.d.ts
similarity index 100%
rename from packages/server/ambient.d.ts
rename to packages/server/src/ambient.d.ts
diff --git a/packages/server/cache.ts b/packages/server/src/cache.ts
similarity index 100%
rename from packages/server/cache.ts
rename to packages/server/src/cache.ts
diff --git a/packages/server/complete.ts b/packages/server/src/complete.ts
similarity index 100%
rename from packages/server/complete.ts
rename to packages/server/src/complete.ts
diff --git a/packages/server/createConnection.ts b/packages/server/src/createConnection.ts
similarity index 100%
rename from packages/server/createConnection.ts
rename to packages/server/src/createConnection.ts
diff --git a/packages/server/createDiagnostics.ts b/packages/server/src/createDiagnostics.ts
similarity index 95%
rename from packages/server/createDiagnostics.ts
rename to packages/server/src/createDiagnostics.ts
index 992dd69d..3565d24c 100644
--- a/packages/server/createDiagnostics.ts
+++ b/packages/server/src/createDiagnostics.ts
@@ -2,8 +2,7 @@ import { parse } from '@joe-re/sql-parser'
import log4js from 'log4js';
import { PublishDiagnosticsParams, Diagnostic } from 'vscode-languageserver'
import { DiagnosticSeverity }from 'vscode-languageserver-types'
-import { lint, ErrorLevel } from 'sqlint'
-import { LintResult } from 'sqlint/src/cli/lint'
+import { lint, ErrorLevel, LintResult } from 'sqlint'
import cache, { LintCache } from './cache'
const logger = log4js.getLogger()
diff --git a/packages/server/createServer.ts b/packages/server/src/createServer.ts
similarity index 100%
rename from packages/server/createServer.ts
rename to packages/server/src/createServer.ts
diff --git a/packages/server/database_libs/AbstractClient.ts b/packages/server/src/database_libs/AbstractClient.ts
similarity index 100%
rename from packages/server/database_libs/AbstractClient.ts
rename to packages/server/src/database_libs/AbstractClient.ts
diff --git a/packages/server/database_libs/MysqlClient.ts b/packages/server/src/database_libs/MysqlClient.ts
similarity index 100%
rename from packages/server/database_libs/MysqlClient.ts
rename to packages/server/src/database_libs/MysqlClient.ts
diff --git a/packages/server/database_libs/PostgresClient.ts b/packages/server/src/database_libs/PostgresClient.ts
similarity index 98%
rename from packages/server/database_libs/PostgresClient.ts
rename to packages/server/src/database_libs/PostgresClient.ts
index c97f0f35..9134aceb 100644
--- a/packages/server/database_libs/PostgresClient.ts
+++ b/packages/server/src/database_libs/PostgresClient.ts
@@ -67,7 +67,7 @@ export default class PosgresClient extends AbstractClient {
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
- WHERE a.attrelid = '${tableName}'::regclass
+ WHERE a.attrelid = '"${tableName}"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
`
diff --git a/packages/server/database_libs/Sqlite3Client.ts b/packages/server/src/database_libs/Sqlite3Client.ts
similarity index 100%
rename from packages/server/database_libs/Sqlite3Client.ts
rename to packages/server/src/database_libs/Sqlite3Client.ts
diff --git a/packages/server/database_libs/getDatabaseClient.ts b/packages/server/src/database_libs/getDatabaseClient.ts
similarity index 90%
rename from packages/server/database_libs/getDatabaseClient.ts
rename to packages/server/src/database_libs/getDatabaseClient.ts
index 40b38013..bcfc5606 100644
--- a/packages/server/database_libs/getDatabaseClient.ts
+++ b/packages/server/src/database_libs/getDatabaseClient.ts
@@ -7,6 +7,7 @@ import Sqlite3Client from './Sqlite3Client'
export default function getDatabaseClient(settings: Settings): AbstractClient {
switch (settings.adapter) {
case 'mysql': return new MysqlClient(settings)
+ case 'postgres': return new PostgresClient(settings)
case 'postgresql': return new PostgresClient(settings)
case 'sqlite3': return new Sqlite3Client(settings)
default: throw new Error(`not support ${settings.adapter}`)
diff --git a/packages/server/index.ts b/packages/server/src/index.ts
similarity index 100%
rename from packages/server/index.ts
rename to packages/server/src/index.ts
diff --git a/packages/server/initializeLogging.ts b/packages/server/src/initializeLogging.ts
similarity index 100%
rename from packages/server/initializeLogging.ts
rename to packages/server/src/initializeLogging.ts
diff --git a/packages/server/tsconfig.cli.json b/packages/server/tsconfig.cli.json
new file mode 100644
index 00000000..20377ba5
--- /dev/null
+++ b/packages/server/tsconfig.cli.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "target": "es2017",
+ "module": "es6",
+ "lib": [ "es2018", "es2019" ],
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "outDir": "dist",
+ "declaration": true,
+ "baseUrl": ".",
+ },
+ "include": [
+ "bin/**/*",
+ "src/**/*",
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+ }
+
+
\ No newline at end of file
diff --git a/packages/server/tsconfig.index.json b/packages/server/tsconfig.index.json
deleted file mode 100644
index f34fdb90..00000000
--- a/packages/server/tsconfig.index.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "compilerOptions": {
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "strict": true,
- "target": "es2017",
- "module": "es6",
- "lib": [ "es2018", "es2019" ],
- "moduleResolution": "node",
- "sourceMap": true,
- "esModuleInterop": true,
- "outDir": "dist_index",
- "declaration": true
- },
- "exclude": [
- "node_modules",
- "example"
- ]
-}
diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json
index b5460c9a..ecd01f4e 100644
--- a/packages/server/tsconfig.json
+++ b/packages/server/tsconfig.json
@@ -1,19 +1,24 @@
{
- "compilerOptions": {
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "strict": true,
- "target": "es2017",
- "module": "es6",
- "lib": [ "es2018", "es2019" ],
- "moduleResolution": "node",
- "sourceMap": true,
- "esModuleInterop": true,
- "outDir": "dist",
- "declaration": true
- },
- "exclude": [
- "node_modules",
- "example"
- ]
-}
+ "compilerOptions": {
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "target": "es2017",
+ "module": "CommonJS",
+ "lib": [ "es2018", "es2019" ],
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "outDir": "dist",
+ "declaration": true,
+ "baseUrl": ".",
+ },
+ "include": [
+ "bin/**/*",
+ "src/**/*",
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+ }
+
+
\ No newline at end of file
diff --git a/packages/sqlint/bin/cli.js b/packages/sqlint/bin/cli.js
index a6e2cddb..cef80674 100755
--- a/packages/sqlint/bin/cli.js
+++ b/packages/sqlint/bin/cli.js
@@ -1,7 +1,7 @@
#!/usr/bin/env node
const yargs = require('yargs')
-const commands = require('../dist/index')
+const commands = require('../dist/src/index')
function readStdin() {
return new Promise((resolve, reject) => {
diff --git a/packages/sqlint/package.json b/packages/sqlint/package.json
index 6a1abff6..f2a1d3be 100644
--- a/packages/sqlint/package.json
+++ b/packages/sqlint/package.json
@@ -1,15 +1,15 @@
{
"name": "sqlint",
"version": "0.9.2",
- "main": "dist/index",
+ "main": "dist/src/index",
"bin": {
"sqlint": "bin/cli.js"
},
"author": "joe-re",
"license": "MIT",
"scripts": {
- "build": "rm -rf dist && rollup -c",
- "watch": "rollup -c -w",
+ "build": "tsc -p .",
+ "watch": "tsc -w",
"test": "jest",
"prepublish": "yarn run build"
},
@@ -27,14 +27,10 @@
"yargs": "^15.3.1"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^12.0.0",
- "@rollup/plugin-node-resolve": "^8.0.0",
- "@rollup/plugin-typescript": "^4.1.2",
"@types/ajv": "^1.0.0",
"@types/js-yaml": "^3.12.4",
"@types/node": "^14.0.5",
"@types/yargs": "^15.0.5",
- "rollup": "^2.12.0",
"ts-jest": "^26.0.0",
"typescript": "^3.9.3"
}
diff --git a/packages/sqlint/rollup.config.js b/packages/sqlint/rollup.config.js
deleted file mode 100644
index 05c23b52..00000000
--- a/packages/sqlint/rollup.config.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import typescript from '@rollup/plugin-typescript'
-import commonjs from "@rollup/plugin-commonjs"
-import json from "@rollup/plugin-json"
-import resolve from '@rollup/plugin-node-resolve'
-
-export default {
- input: 'src/index.ts',
- output: {
- dir: 'dist',
- format: 'cjs',
- sourcemap: true
- },
- plugins: [
- typescript(),
- json(),
- resolve({ preferBuiltins: false }),
- commonjs()
- ]
-}
\ No newline at end of file
diff --git a/packages/sqlint/tsconfig.json b/packages/sqlint/tsconfig.json
index ef50d9a1..be803cba 100644
--- a/packages/sqlint/tsconfig.json
+++ b/packages/sqlint/tsconfig.json
@@ -4,7 +4,7 @@
"noUnusedParameters": true,
"strict": true,
"target": "es2017",
- "module": "es6",
+ "module": "CommonJS",
"lib": [ "es2018", "es2019" ],
"moduleResolution": "node",
"sourceMap": true,
diff --git a/tsconfig.json b/tsconfig.json
index 7daf1dfd..589a764b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,13 +1,22 @@
{
"compilerOptions": {
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
"target": "es2017",
- "module": "commonjs",
- "lib": [ "dom", "es2018", "es2019" ],
- "strict": false,
+ "module": "es6",
+ "lib": [ "es2018", "es2019" ],
"moduleResolution": "node",
"esModuleInterop": true,
- "sourceMap": true,
- "outDir": "./out"
+ "baseUrl": ".",
+ "paths": {
+ "@sql-language-server/sqlint": ["packages/sqlint/dist"]
+ }
},
- "exclude": ["node_modules", "server", "test"]
+ "include": ["../sqlint"],
+ "exclude": [
+ "node_modules",
+ "example"
+ ]
}
+