From 2b36bde712f61cbef657304923d7a88c4cc7a41a Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Thu, 14 Nov 2024 14:06:46 -0500 Subject: [PATCH 1/2] batch-insert-rows --- .../batch-insert-rows/batch-insert-rows.mjs | 83 +++++++++++++++++++ components/supabase/package.json | 7 +- 2 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 components/supabase/actions/batch-insert-rows/batch-insert-rows.mjs diff --git a/components/supabase/actions/batch-insert-rows/batch-insert-rows.mjs b/components/supabase/actions/batch-insert-rows/batch-insert-rows.mjs new file mode 100644 index 0000000000000..ce51b6bc8a795 --- /dev/null +++ b/components/supabase/actions/batch-insert-rows/batch-insert-rows.mjs @@ -0,0 +1,83 @@ +import supabase from "../../supabase.app.mjs"; +import fs from "fs"; +import { parse } from "csv-parse/sync"; + +export default { + key: "supabase-batch-insert-rows", + name: "Batch Insert Rows", + description: "Inserts new rows into a database. [See the documentation](https://supabase.com/docs/reference/javascript/insert)", + version: "0.0.1", + type: "action", + props: { + supabase, + table: { + propDefinition: [ + supabase, + "table", + ], + description: "Name of the table to insert rows into", + }, + source: { + type: "string", + label: "Source of data", + description: "Whether to enter the row data as an array of objects or to import from a CSV file", + options: [ + "Array", + "CSV File", + ], + reloadProps: true, + }, + }, + async additionalProps() { + const props = {}; + if (this.source === "Array") { + props.data = { + type: "string[]", + label: "Row Data", + description: "An array of objects, each object representing a row. Enter column names and values as key/value pairs", + }; + } + if (this.source === "CSV File") { + props.filePath = { + type: "string", + label: "File Path", + description: "The path to a csv file in the `/tmp` directory. [See the documentation on working with files](https://pipedream.com/docs/code/nodejs/working-with-files/#writing-a-file-to-tmp)", + }; + } + return props; + }, + methods: { + parseArray(arr) { + if (Array.isArray(arr)) { + return arr.map((item) => { + return typeof item === "string" + ? JSON.parse(item) + : item; + }); + } + if (typeof arr === "string") { + return JSON.parse(arr); + } + }, + getRowsFromCSV(filePath) { + const fileContent = fs.readFileSync(filePath.includes("tmp/") + ? filePath + : `/tmp/${filePath}`, "utf-8"); + const rows = parse(fileContent, { + columns: true, + skip_empty_lines: true, + }); + return rows; + }, + }, + async run({ $ }) { + const data = this.source === "CSV File" + ? this.getRowsFromCSV(this.filePath) + : this.parseArray(this.data); + + const response = await this.supabase.insertRow(this.table, data); + + $.export("$summary", `Successfully inserted rows into table ${this.table}`); + return response; + }, +}; diff --git a/components/supabase/package.json b/components/supabase/package.json index 96792f41447f8..9b476a137385e 100644 --- a/components/supabase/package.json +++ b/components/supabase/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/supabase", - "version": "0.2.2", + "version": "0.3.0", "description": "Pipedream Supabase Components", "main": "supabase.app.mjs", "keywords": [ @@ -13,7 +13,8 @@ "access": "public" }, "dependencies": { - "@pipedream/platform": "^1.2.1", - "@supabase/supabase-js": "^2.45.6" + "@pipedream/platform": "^3.0.3", + "@supabase/supabase-js": "^2.45.6", + "csv-parse": "^5.5.6" } } From 753aea2323f47ca37ecc50fec3349ce0fa947321 Mon Sep 17 00:00:00 2001 From: michelle0927 Date: Thu, 14 Nov 2024 14:07:39 -0500 Subject: [PATCH 2/2] pnpm-lock.yaml --- pnpm-lock.yaml | 108 +++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1bb40f3699cb3..a0fdf1dbf27a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10000,11 +10000,13 @@ importers: components/supabase: specifiers: - '@pipedream/platform': ^1.2.1 + '@pipedream/platform': ^3.0.3 '@supabase/supabase-js': ^2.45.6 + csv-parse: ^5.5.6 dependencies: - '@pipedream/platform': 1.5.1 + '@pipedream/platform': 3.0.3 '@supabase/supabase-js': 2.46.1 + csv-parse: 5.5.6 components/supabase_management_api: specifiers: @@ -13414,55 +13416,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sso-oidc/3.600.0_tdq3komn4zwyd65w7klbptsu34: - resolution: {integrity: sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.600.0 - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.3 - '@smithy/core': 2.2.3 - '@smithy/fetch-http-handler': 3.2.1 - '@smithy/hash-node': 3.0.2 - '@smithy/invalid-dependency': 3.0.2 - '@smithy/middleware-content-length': 3.0.2 - '@smithy/middleware-endpoint': 3.0.4 - '@smithy/middleware-retry': 3.0.6 - '@smithy/middleware-serde': 3.0.3 - '@smithy/middleware-stack': 3.0.3 - '@smithy/node-config-provider': 3.1.3 - '@smithy/node-http-handler': 3.1.2 - '@smithy/protocol-http': 4.0.3 - '@smithy/smithy-client': 3.1.6 - '@smithy/types': 3.3.0 - '@smithy/url-parser': 3.0.3 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.6 - '@smithy/util-defaults-mode-node': 3.0.6 - '@smithy/util-endpoints': 2.0.3 - '@smithy/util-middleware': 3.0.3 - '@smithy/util-retry': 3.0.2 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sts' - - aws-crt - dev: false - /@aws-sdk/client-sso/3.423.0: resolution: {integrity: sha512-znIufHkwhCIePgaYciIs3x/+BpzR57CZzbCKHR9+oOvGyufEPPpUT5bFLvbwTgfiVkTjuk6sG/ES3U5Bc+xtrA==} engines: {node: '>=14.0.0'} @@ -13698,7 +13651,55 @@ packages: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0_tdq3komn4zwyd65w7klbptsu34 + '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 + '@smithy/config-resolver': 3.0.3 + '@smithy/core': 2.2.3 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.2 + '@smithy/invalid-dependency': 3.0.2 + '@smithy/middleware-content-length': 3.0.2 + '@smithy/middleware-endpoint': 3.0.4 + '@smithy/middleware-retry': 3.0.6 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.3 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.6 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.6 + '@smithy/util-defaults-mode-node': 3.0.6 + '@smithy/util-endpoints': 2.0.3 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.2 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sts/3.600.0_dseaa2p5u2yk67qiepewcq3hkq: + resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.600.0 '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 '@aws-sdk/middleware-host-header': 3.598.0 @@ -13737,6 +13738,7 @@ packages: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt dev: false @@ -18083,7 +18085,7 @@ packages: '@aws-sdk/client-sns': 3.423.0 '@aws-sdk/client-sqs': 3.423.0 '@aws-sdk/client-ssm': 3.423.0 - '@aws-sdk/client-sts': 3.600.0 + '@aws-sdk/client-sts': 3.600.0_dseaa2p5u2yk67qiepewcq3hkq '@aws-sdk/s3-request-presigner': 3.609.0 '@pipedream/helper_functions': 0.3.12 '@pipedream/platform': 1.6.6