From eaf93616aec9c5f7895359910bb232b36fb83aa7 Mon Sep 17 00:00:00 2001 From: Muhsin Shah C P Date: Tue, 15 Mar 2022 08:00:02 +0530 Subject: [PATCH] Feature/oracledb plugin (#2388) * oracledb initial commit - Added oracledb package * Implemented connection and operations * Working on oracle db integration * Implemented query & bulk operations * Fixed initial client reintialization problem * Added custom client library path option * Added oracle client library installation steps to dev docker file * Testing changed docker setup on cloud * Testing heroku app.json * Removed unwanted scripts from dockerfiles * Updated field label * update oracledb client lib for ec2 * update package-lock * refactoring code * Updated docs * Resolved some lint errors Co-authored-by: Akshay Sasidharan --- Aptfile | 6 + app.json | 6 + deploy/ec2/setup_machine.sh | 14 + docker/production.Dockerfile | 15 + docker/server.Dockerfile | 14 + docker/server.Dockerfile.dev | 16 +- docs/docs/data-sources/oracledb.md | 47 ++ frontend/package-lock.json | 2 + plugins/package-lock.json | 37 ++ plugins/package.json | 1 + plugins/packages/oracledb/.gitignore | 4 + plugins/packages/oracledb/README.md | 4 + plugins/packages/oracledb/__tests_/index.js | 7 + plugins/packages/oracledb/lib/icon.svg | 1 + plugins/packages/oracledb/lib/index.ts | 154 ++++++ plugins/packages/oracledb/lib/manifest.json | 133 +++++ plugins/packages/oracledb/lib/operations.json | 81 +++ plugins/packages/oracledb/lib/types.ts | 16 + plugins/packages/oracledb/package-lock.json | 516 ++++++++++++++++++ plugins/packages/oracledb/package.json | 28 + plugins/packages/oracledb/tsconfig.json | 11 + server/package-lock.json | 2 + 22 files changed, 1114 insertions(+), 1 deletion(-) create mode 100644 Aptfile create mode 100644 docs/docs/data-sources/oracledb.md create mode 100644 plugins/packages/oracledb/.gitignore create mode 100644 plugins/packages/oracledb/README.md create mode 100644 plugins/packages/oracledb/__tests_/index.js create mode 100644 plugins/packages/oracledb/lib/icon.svg create mode 100644 plugins/packages/oracledb/lib/index.ts create mode 100644 plugins/packages/oracledb/lib/manifest.json create mode 100644 plugins/packages/oracledb/lib/operations.json create mode 100644 plugins/packages/oracledb/lib/types.ts create mode 100644 plugins/packages/oracledb/package-lock.json create mode 100644 plugins/packages/oracledb/package.json create mode 100644 plugins/packages/oracledb/tsconfig.json diff --git a/Aptfile b/Aptfile new file mode 100644 index 0000000000..f683b697d1 --- /dev/null +++ b/Aptfile @@ -0,0 +1,6 @@ +# you can list packages +libaio1 + +# or include links to specific .deb files + +# or add custom apt repos (only required if using packages outside of the standard Ubuntu APT repositories) \ No newline at end of file diff --git a/app.json b/app.json index 25eaed98cb..33c450b943 100644 --- a/app.json +++ b/app.json @@ -46,6 +46,12 @@ "buildpacks": [ { "url": "heroku/nodejs" + }, + { + "url": "heroku-community/apt" + }, + { + "url": "https://github.com/featurist/oracle-client-buildpack.git" } ], "environments": { diff --git a/deploy/ec2/setup_machine.sh b/deploy/ec2/setup_machine.sh index 5635c0dfa6..a98c40e21f 100644 --- a/deploy/ec2/setup_machine.sh +++ b/deploy/ec2/setup_machine.sh @@ -25,6 +25,19 @@ sudo luarocks install lua-resty-auto-ssl sudo mkdir /etc/resty-auto-ssl /var/log/openresty /etc/fallback-certs sudo chown -R www-data:www-data /etc/resty-auto-ssl +# Oracle db client library setup +sudo apt install -y libaio1 +curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \ + unzip instantclient-basiclite.zip && \ + sudo mv instantclient*/ /usr/lib/instantclient && \ + rm instantclient-basiclite.zip && \ + sudo ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \ + sudo ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \ + sudo ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \ + sudo ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2 +export LD_LIBRARY_PATH="/usr/lib/instantclient" + + # Gen fallback certs sudo openssl rand -out /home/ubuntu/.rnd -hex 256 sudo chown www-data:www-data /home/ubuntu/.rnd @@ -52,6 +65,7 @@ mv /tmp/setup_app ~/app/setup_app sudo chmod +x ~/app/setup_app sudo npm install -g npm@7.20.0 +sudo chown -R 1000:1000 "/home/ubuntu/.npm" # Building ToolJet app sudo npm install -g @nestjs/cli diff --git a/docker/production.Dockerfile b/docker/production.Dockerfile index 7c8e695887..5a6f132222 100644 --- a/docker/production.Dockerfile +++ b/docker/production.Dockerfile @@ -37,6 +37,21 @@ FROM node:14.17.3-alpine ENV NODE_ENV=production ENV NODE_OPTIONS="--max-old-space-size=4096" RUN apk add postgresql-client freetds + +# Install Instantclient Basic Light Oracle and Dependencies +RUN apk --no-cache add libaio libnsl libc6-compat curl && \ + cd /tmp && \ + curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \ + unzip instantclient-basiclite.zip && \ + mv instantclient*/ /usr/lib/instantclient && \ + rm instantclient-basiclite.zip && \ + ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \ + ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \ + ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \ + ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2 + +ENV LD_LIBRARY_PATH /usr/lib/instantclient + RUN mkdir -p /app # copy npm scripts diff --git a/docker/server.Dockerfile b/docker/server.Dockerfile index e26dfcaa2b..6302c91fb3 100644 --- a/docker/server.Dockerfile +++ b/docker/server.Dockerfile @@ -30,6 +30,20 @@ ENV NODE_ENV=production ENV NODE_OPTIONS="--max-old-space-size=4096" RUN apk add postgresql-client freetds +# Install Instantclient Basic Light Oracle and Dependencies +RUN apk --no-cache add libaio libnsl libc6-compat curl && \ + cd /tmp && \ + curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \ + unzip instantclient-basiclite.zip && \ + mv instantclient*/ /usr/lib/instantclient && \ + rm instantclient-basiclite.zip && \ + ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \ + ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \ + ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \ + ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2 + +ENV LD_LIBRARY_PATH /usr/lib/instantclient + RUN mkdir -p /app # copy npm scripts diff --git a/docker/server.Dockerfile.dev b/docker/server.Dockerfile.dev index dfdf50d57a..9e67cfc923 100644 --- a/docker/server.Dockerfile.dev +++ b/docker/server.Dockerfile.dev @@ -1,6 +1,20 @@ # pull official base image FROM node:14.17.3-alpine -RUN apk add postgresql-client freetds +RUN apk add postgresql-client + +# Install Instantclient Basic Light Oracle and Dependencies +RUN apk --no-cache add libaio libnsl libc6-compat curl && \ + cd /tmp && \ + curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \ + unzip instantclient-basiclite.zip && \ + mv instantclient*/ /usr/lib/instantclient && \ + rm instantclient-basiclite.zip && \ + ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \ + ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \ + ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \ + ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2 + +ENV LD_LIBRARY_PATH /usr/lib/instantclient ENV NODE_ENV=development ENV NODE_OPTIONS="--max-old-space-size=4096" diff --git a/docs/docs/data-sources/oracledb.md b/docs/docs/data-sources/oracledb.md new file mode 100644 index 0000000000..25657693ae --- /dev/null +++ b/docs/docs/data-sources/oracledb.md @@ -0,0 +1,47 @@ + +# Oracle DB + +ToolJet can connect to Oracle databases to read and write data. + +## Connection + +A Oracle DB can be connected with the following credentails: +- **Host** +- **Port** +- **SID / Service Name** ( Database name must be a SID / Service Name ) +- **Database Name** +- **SSL** +- **Username** +- **Password** +- **Client Library Path** ( Only need for local setup ) + +:::info +You can also test your connection before saving the configuration by clicking on `Test Connection` button. +::: + +Click on **Test connection** button to verify if the credentials are correct and that the database is accessible to ToolJet server. Click on **Save** button to save the data source. + +## Querying Oracle DB + +Once you have added a Oracle DB data source, click on `+` button of the query manager to create a new query. There are two modes by which you can query SQL: + + 1. **[SQL mode](/docs/data-sources/oracledb#sql-mode)** + 2. **[GUI mode](/docs/data-sources/oracledb#gui-mode)** + +#### SQL mode + +SQL mode can be used to write raw SQL queries. Select SQL mode from the dropdown and enter the SQL query in the editor. Click on the `run` button to run the query. + +**NOTE**: Query should be saved before running. + +#### GUI mode + +GUI mode can be used to query Oracle database without writing queries. Select GUI mode from the dropdown and then choose the operation **Bulk update using primary key**. Enter the **Table** name and **Primary key column** name. Now, in the editor enter the records in the form of an array of objects. + +**Example**: `{{ [ {id: 1, channel: 33}, {id:2, channel:24} ] }}` + +Click on the **run** button to run the query. **NOTE**: Query should be saved before running. + +:::tip +Query results can be transformed using transformations. Read our transformations documentation to see how: **[link](/docs/tutorial/transformations)** +::: \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 495e154d12..122af4d21a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -124,6 +124,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi", @@ -22627,6 +22628,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi", diff --git a/plugins/package-lock.json b/plugins/package-lock.json index 57d6e895a4..f67dc30e8b 100644 --- a/plugins/package-lock.json +++ b/plugins/package-lock.json @@ -24,6 +24,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi", @@ -4551,6 +4552,10 @@ "resolved": "packages/n8n", "link": true }, + "node_modules/@tooljet-plugins/oracledb": { + "resolved": "packages/oracledb", + "link": true + }, "node_modules/@tooljet-plugins/postgresql": { "resolved": "packages/postgresql", "link": true @@ -12812,6 +12817,15 @@ "node": ">= 0.8.0" } }, + "node_modules/oracledb": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-5.3.0.tgz", + "integrity": "sha512-HMJzQ6lCf287ztvvehTEmjCWA21FQ3RMvM+mgoqd4i8pkREuqFWO+y3ovsGR9moJUg4T0xjcwS8rl4mggWPxmg==", + "hasInstallScript": true, + "engines": { + "node": ">=10.16" + } + }, "node_modules/os-homedir": { "version": "1.0.2", "dev": true, @@ -16588,6 +16602,15 @@ "react": "^17.0.2" } }, + "packages/oracledb": { + "version": "1.0.0", + "dependencies": { + "@tooljet-plugins/common": "file:../common", + "knex": "^0.95.14", + "oracledb": "^5.3.0", + "react": "^17.0.2" + } + }, "packages/postgresql": { "name": "@tooljet-plugins/postgresql", "version": "1.0.0", @@ -20291,6 +20314,15 @@ "react": "^17.0.2" } }, + "@tooljet-plugins/oracledb": { + "version": "file:packages/oracledb", + "requires": { + "@tooljet-plugins/common": "file:../common", + "knex": "^0.95.14", + "oracledb": "^5.3.0", + "react": "^17.0.2" + } + }, "@tooljet-plugins/postgresql": { "version": "file:packages/postgresql", "requires": { @@ -26033,6 +26065,11 @@ "word-wrap": "~1.2.3" } }, + "oracledb": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-5.3.0.tgz", + "integrity": "sha512-HMJzQ6lCf287ztvvehTEmjCWA21FQ3RMvM+mgoqd4i8pkREuqFWO+y3ovsGR9moJUg4T0xjcwS8rl4mggWPxmg==" + }, "os-homedir": { "version": "1.0.2", "dev": true diff --git a/plugins/package.json b/plugins/package.json index 014fa1f557..0b933f4e98 100644 --- a/plugins/package.json +++ b/plugins/package.json @@ -34,6 +34,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi", diff --git a/plugins/packages/oracledb/.gitignore b/plugins/packages/oracledb/.gitignore new file mode 100644 index 0000000000..4c5f09d7c4 --- /dev/null +++ b/plugins/packages/oracledb/.gitignore @@ -0,0 +1,4 @@ +node_modules +lib/*.d.* +lib/*.js +lib/*.js.map \ No newline at end of file diff --git a/plugins/packages/oracledb/README.md b/plugins/packages/oracledb/README.md new file mode 100644 index 0000000000..a7a7e02cf1 --- /dev/null +++ b/plugins/packages/oracledb/README.md @@ -0,0 +1,4 @@ + +# Oracle DB + +Documentation on: https://docs.tooljet.com/docs/data-sources/oracledb \ No newline at end of file diff --git a/plugins/packages/oracledb/__tests_/index.js b/plugins/packages/oracledb/__tests_/index.js new file mode 100644 index 0000000000..56baacb89b --- /dev/null +++ b/plugins/packages/oracledb/__tests_/index.js @@ -0,0 +1,7 @@ +'use strict'; + +// const oracledb = require('../lib'); + +describe('oracledb', () => { + it.todo('needs tests'); +}); diff --git a/plugins/packages/oracledb/lib/icon.svg b/plugins/packages/oracledb/lib/icon.svg new file mode 100644 index 0000000000..0981dfcff2 --- /dev/null +++ b/plugins/packages/oracledb/lib/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/packages/oracledb/lib/index.ts b/plugins/packages/oracledb/lib/index.ts new file mode 100644 index 0000000000..508aad7b7f --- /dev/null +++ b/plugins/packages/oracledb/lib/index.ts @@ -0,0 +1,154 @@ +import { Knex, knex } from 'knex'; +import oracledb from 'oracledb'; +import { + cacheConnection, + getCachedConnection, + ConnectionTestResult, + QueryService, + QueryResult, +} from '@tooljet-plugins/common'; +import { SourceOptions, QueryOptions } from './types'; + +export default class OracledbQueryService implements QueryService { + private static _instance: OracledbQueryService; + + constructor() { + if (OracledbQueryService._instance) { + return OracledbQueryService._instance; + } + + OracledbQueryService._instance = this; + return OracledbQueryService._instance; + } + + async run( + sourceOptions: SourceOptions, + queryOptions: QueryOptions, + dataSourceId: string, + dataSourceUpdatedAt: string + ): Promise { + let result = { + rows: [], + }; + let query = ''; + + if (queryOptions.mode === 'gui') { + if (queryOptions.operation === 'bulk_update_pkey') { + query = await this.buildBulkUpdateQuery(queryOptions); + } + } else { + query = queryOptions.query; + } + + const knexInstance = await this.getConnection(sourceOptions, {}, true, dataSourceId, dataSourceUpdatedAt); + + // eslint-disable-next-line no-useless-catch + try { + result = await knexInstance.raw(query); + + return { + status: 'ok', + data: result, + }; + } catch (err) { + throw err; + } + } + + async testConnection(sourceOptions: SourceOptions): Promise { + const knexInstance = await this.getConnection(sourceOptions, {}, false); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const result = await knexInstance.raw('SELECT * FROM v$version'); + + return { + status: 'ok', + }; + } + + initOracleClient(clientPathType: string, customPath: string) { + try { + if (clientPathType === 'custom') { + if (process.platform === 'darwin') { + oracledb.initOracleClient({ libDir: process.env.HOME + customPath }); + } else if (process.platform === 'win32') { + oracledb.initOracleClient({ + libDir: customPath, + }); // note the double backslashes + } + } else { + oracledb.initOracleClient(); + } + } catch (err) { + console.error(err); + throw err; + } + } + + async buildConnection(sourceOptions: SourceOptions) { + // we should add this to our datasource documentation + try { + oracledb.oracleClientVersion; + } catch (err) { + console.log('Oracle client is not initailized'); + this.initOracleClient(sourceOptions.client_path_type, sourceOptions.path); + } + + const config: Knex.Config = { + client: 'oracledb', + connection: { + user: sourceOptions.username, + password: sourceOptions.password, + connectString: `(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${sourceOptions.host})(PORT=${sourceOptions.port}))(CONNECT_DATA=(SERVER=DEDICATED)(${sourceOptions.database_type}=${sourceOptions.database})))`, + multipleStatements: true, + ssl: sourceOptions.ssl_enabled, // Disabling by default for backward compatibility + }, + }; + + return knex(config); + } + + async getConnection( + sourceOptions: SourceOptions, + options: any, + checkCache: boolean, + dataSourceId?: string, + dataSourceUpdatedAt?: string + ): Promise { + if (checkCache) { + let connection = await getCachedConnection(dataSourceId, dataSourceUpdatedAt); + + if (connection) { + return connection; + } else { + connection = await this.buildConnection(sourceOptions); + dataSourceId && cacheConnection(dataSourceId, connection); + return connection; + } + } else { + return await this.buildConnection(sourceOptions); + } + } + + async buildBulkUpdateQuery(queryOptions: any): Promise { + let queryText = ''; + + const tableName = queryOptions['table']; + const primaryKey = queryOptions['primary_key_column']; + const records = queryOptions['records']; + + for (const record of records) { + queryText = `${queryText} UPDATE ${tableName} SET`; + + for (const key of Object.keys(record)) { + if (key !== primaryKey) { + queryText = ` ${queryText} ${key} = '${record[key]}',`; + } + } + + queryText = queryText.slice(0, -1); + queryText = `begin ${queryText} WHERE ${primaryKey} = ${record[primaryKey]}; end;`; + } + + return queryText.trim(); + } +} diff --git a/plugins/packages/oracledb/lib/manifest.json b/plugins/packages/oracledb/lib/manifest.json new file mode 100644 index 0000000000..49fb77eccb --- /dev/null +++ b/plugins/packages/oracledb/lib/manifest.json @@ -0,0 +1,133 @@ + +{ + "$schema": "https://raw.githubusercontent.com/ToolJet/ToolJet/develop/plugins/schemas/manifest.schema.json", + "title": "Oracle DB datasource", + "description": "A schema defining Oracle DB datasource", + "type": "database", + "source": { + "name": "Oracle DB", + "kind": "oracledb", + "exposedVariables": { + "isLoading": false, + "data": {}, + "rawData": {} + }, + "options": { + "password": { + "encrypted": true + } + } + }, + "defaults": { + "host": { + "value": "localhost" + }, + "port": { + "value": 1521 + }, + "database": { + "value": "" + }, + "database_type": { + "value": "SID" + }, + "username": { + "value": "" + }, + "password": { + "value": "" + }, + "ssl_enabled": { + "value": true + }, + "client_path_type":{ + "value": "default" + } + }, + "properties": { + "client_path_type": { + "label": "Client Library Location", + "key": "client_path_type", + "type": "dropdown-component-flip", + "description": "Single select dropdown for client library", + "list": [ + { + "value": "default", + "name": "Default" + }, + { + "value": "custom", + "name": "Custom" + } + ], + "commonFields":{ + "host": { + "label": "Host", + "key": "host", + "type": "text", + "description": "Enter host" + }, + "port": { + "label": "Port", + "key": "port", + "type": "text", + "description": "Enter port" + }, + "database_type": { + "label": "SID / Service Name", + "key": "database_type", + "type": "dropdown", + "description": "Type of the database", + "list": [ + { + "name": "SID", + "value": "SID" + }, + { + "name": "Service name", + "value": "SERVICE_NAME" + } + ] + }, + "database": { + "label": "Database Name", + "key": "database", + "type": "text", + "description": "Name of the database" + }, + "ssl_enabled": { + "label": "SSL", + "key": "ssl_enabled", + "type": "toggle", + "description": "Toggle for ssl_enabled" + }, + "username": { + "label": "Username", + "key": "username", + "type": "text", + "description": "Enter username" + }, + "password": { + "label": "Password", + "key": "password", + "type": "password", + "description": "Enter password" + } + } + }, + "custom":{ + "path": { + "label": "Path", + "key": "path", + "type": "text", + "description": "Enter path" + } + } + }, + "required": [ + "host", + "port", + "username", + "password" + ] +} \ No newline at end of file diff --git a/plugins/packages/oracledb/lib/operations.json b/plugins/packages/oracledb/lib/operations.json new file mode 100644 index 0000000000..4ea9e5460b --- /dev/null +++ b/plugins/packages/oracledb/lib/operations.json @@ -0,0 +1,81 @@ + +{ + "$schema": "https://raw.githubusercontent.com/ToolJet/ToolJet/develop/plugins/schemas/operations.schema.json", + "title": "Oracle DB datasource", + "description": "A schema defining Oracle DB datasource", + "type": "database", + "defaults": {}, + "properties": { + "mode": { + "label": "", + "key": "mode", + "type": "dropdown-component-flip", + "description": "Single select dropdown for mode", + "list": [ + { + "name": "SQL mode", + "value": "sql" + }, + { + "name": "GUI mode", + "value": "gui" + } + ] + }, + "sql": { + "query": { + "key": "query", + "type": "codehinter", + "description": "Enter query", + "placeholder": "SELECT * FROM customers", + "height": "150px" + } + }, + "gui": { + "operation": { + "label": "Operation", + "key": "operation", + "type": "dropdown-component-flip", + "description": "Single select dropdown for mode", + "list": [ + { + "name": "Bulk update using primary key", + "value": "bulk_update_pkey" + } + ] + }, + "bulk_update_pkey": { + "table": { + "label": "Table", + "key": "table", + "type": "codehinter", + "lineNumbers": false, + "description": "Enter table", + "width": "320px", + "height": "36px", + "className": "codehinter-plugins", + "placeholder": "Enter table" + + }, + "primary_key_column": { + "label": "Primary key column", + "key": "primary_key_column", + "type": "codehinter", + "lineNumbers": false, + "description": "Enter primary key column", + "width": "320px", + "height": "36px", + "className": "codehinter-plugins", + "placeholder": "Enter primary key column" + }, + "records": { + "label": "Records", + "key": "records", + "type": "codehinter", + "description": "Enter records", + "height": "150px" + } + } + } + } +} \ No newline at end of file diff --git a/plugins/packages/oracledb/lib/types.ts b/plugins/packages/oracledb/lib/types.ts new file mode 100644 index 0000000000..006e47d1ca --- /dev/null +++ b/plugins/packages/oracledb/lib/types.ts @@ -0,0 +1,16 @@ +export type SourceOptions = { + database: string; + database_type: string; + host: string; + port: string; + username: string; + password: string; + ssl_enabled: boolean; + client_path_type: string; + path: string; +}; +export type QueryOptions = { + operation: string; + query: string; + mode: string; +}; diff --git a/plugins/packages/oracledb/package-lock.json b/plugins/packages/oracledb/package-lock.json new file mode 100644 index 0000000000..e477ea7caf --- /dev/null +++ b/plugins/packages/oracledb/package-lock.json @@ -0,0 +1,516 @@ +{ + "name": "@tooljet-plugins/oracledb", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@tooljet-plugins/oracledb", + "version": "1.0.0", + "dependencies": { + "@tooljet-plugins/common": "file:../common", + "knex": "^0.95.14", + "oracledb": "^5.3.0", + "react": "^17.0.2" + }, + "devDependencies": { + "@types/oracledb": "^5.2.2" + } + }, + "../common": { + "name": "@tooljet-plugins/common", + "version": "1.0.0", + "dependencies": { + "react": "^17.0.2", + "rimraf": "^3.0.2" + } + }, + "node_modules/@tooljet-plugins/common": { + "resolved": "../common", + "link": true + }, + "node_modules/@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "node_modules/@types/oracledb": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-5.2.2.tgz", + "integrity": "sha512-aYb2DdZOQVIgSCSXjXNikQuyiHAY09SkRA4cjwoj+F/mhLJDahdjNeBmvQvfFojyChCKLuupSJHqoAXPExgV5w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "dotenv": "^8.2.0" + } + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/getopts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", + "integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/knex": { + "version": "0.95.15", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.15.tgz", + "integrity": "sha512-Loq6WgHaWlmL2bfZGWPsy4l8xw4pOE+tmLGkPG0auBppxpI0UcK+GYCycJcqz9W54f2LiGewkCVLBm3Wq4ur/w==", + "dependencies": { + "colorette": "2.0.16", + "commander": "^7.1.0", + "debug": "4.3.2", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "getopts": "2.2.5", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.5.0", + "rechoir": "0.7.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.1", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=10" + }, + "peerDependenciesMeta": { + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oracledb": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-5.3.0.tgz", + "integrity": "sha512-HMJzQ6lCf287ztvvehTEmjCWA21FQ3RMvM+mgoqd4i8pkREuqFWO+y3ovsGR9moJUg4T0xjcwS8rl4mggWPxmg==", + "hasInstallScript": true, + "engines": { + "node": ">=10.16" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "engines": { + "node": ">=8" + } + } + }, + "dependencies": { + "@tooljet-plugins/common": { + "version": "file:../common", + "requires": { + "react": "^17.0.2", + "rimraf": "^3.0.2" + } + }, + "@types/node": { + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "dev": true + }, + "@types/oracledb": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/oracledb/-/oracledb-5.2.2.tgz", + "integrity": "sha512-aYb2DdZOQVIgSCSXjXNikQuyiHAY09SkRA4cjwoj+F/mhLJDahdjNeBmvQvfFojyChCKLuupSJHqoAXPExgV5w==", + "dev": true, + "requires": { + "@types/node": "*", + "dotenv": "^8.2.0" + } + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "getopts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", + "integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "requires": { + "has": "^1.0.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "knex": { + "version": "0.95.15", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.15.tgz", + "integrity": "sha512-Loq6WgHaWlmL2bfZGWPsy4l8xw4pOE+tmLGkPG0auBppxpI0UcK+GYCycJcqz9W54f2LiGewkCVLBm3Wq4ur/w==", + "requires": { + "colorette": "2.0.16", + "commander": "^7.1.0", + "debug": "4.3.2", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "getopts": "2.2.5", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.5.0", + "rechoir": "0.7.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.1", + "tildify": "2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "oracledb": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-5.3.0.tgz", + "integrity": "sha512-HMJzQ6lCf287ztvvehTEmjCWA21FQ3RMvM+mgoqd4i8pkREuqFWO+y3ovsGR9moJUg4T0xjcwS8rl4mggWPxmg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "requires": { + "resolve": "^1.9.0" + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" + }, + "tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==" + } + } +} diff --git a/plugins/packages/oracledb/package.json b/plugins/packages/oracledb/package.json new file mode 100644 index 0000000000..0cc4cfe655 --- /dev/null +++ b/plugins/packages/oracledb/package.json @@ -0,0 +1,28 @@ +{ + "name": "@tooljet-plugins/oracledb", + "version": "1.0.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "build": "tsc -b", + "clean": "rimraf ./dist && rimraf tsconfig.tsbuildinfo" + }, + "homepage": "https://github.com/tooljet/tooljet#readme", + "dependencies": { + "@tooljet-plugins/common": "file:../common", + "knex": "^0.95.14", + "oracledb": "^5.3.0", + "react": "^17.0.2" + }, + "devDependencies": { + "@types/oracledb": "^5.2.2" + } +} diff --git a/plugins/packages/oracledb/tsconfig.json b/plugins/packages/oracledb/tsconfig.json new file mode 100644 index 0000000000..a18a801b14 --- /dev/null +++ b/plugins/packages/oracledb/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "lib" + }, + "exclude": [ + "node_modules", + "dist" + ] +} \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index 37dab2b838..32012a8b96 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -105,6 +105,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi", @@ -14313,6 +14314,7 @@ "@tooljet-plugins/mssql": "file:packages/mssql", "@tooljet-plugins/mysql": "file:packages/mysql", "@tooljet-plugins/n8n": "file:packages/n8n", + "@tooljet-plugins/oracledb": "file:packages/oracledb", "@tooljet-plugins/postgresql": "file:packages/postgresql", "@tooljet-plugins/redis": "file:packages/redis", "@tooljet-plugins/restapi": "file:packages/restapi",