From f7bb4ae2b4b5edbe09fc94007c9bf44ed6d34473 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Tue, 22 Oct 2024 21:37:19 -0500 Subject: [PATCH 01/13] feat: export delimited zip --- export/delimited-zip/README.MD | 61 ++ export/delimited-zip/jest.config.js | 16 + export/delimited-zip/package.json | 73 ++ export/delimited-zip/rollup.config.mjs | 5 + .../src/export.delimited.zip.plugin.ts | 202 +++++ export/delimited-zip/src/index.ts | 1 + export/pivot-table/jest.config.js | 16 + flatfilers/sandbox/src/index.ts | 215 ++--- package-lock.json | 824 ++++++++---------- 9 files changed, 844 insertions(+), 569 deletions(-) create mode 100644 export/delimited-zip/README.MD create mode 100644 export/delimited-zip/jest.config.js create mode 100644 export/delimited-zip/package.json create mode 100644 export/delimited-zip/rollup.config.mjs create mode 100644 export/delimited-zip/src/export.delimited.zip.plugin.ts create mode 100644 export/delimited-zip/src/index.ts create mode 100644 export/pivot-table/jest.config.js diff --git a/export/delimited-zip/README.MD b/export/delimited-zip/README.MD new file mode 100644 index 000000000..e4680671f --- /dev/null +++ b/export/delimited-zip/README.MD @@ -0,0 +1,61 @@ + + +The `@flatfile/plugin-export-delimited-zip` plugin exports data from Flatfile sheets to delimited files (e.g., CSV) and compresses them into a ZIP file. This plugin provides an efficient way to download and package your data from Flatfile workbooks. + +**Event Type:** +`job:ready` + + + + +> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/docs/orchestration/listeners#listener-types) + + + +## Parameters + +#### `job` - `string` +The job name to trigger the export. Default: 'downloadDelimited' + +#### `delimiter` - `string` +The delimiter to use in the exported files. Default: ',' + +#### `fileExtension` - `string` +The file extension for the exported files. Default: 'csv' + +#### `debug` - `boolean` - (optional) +Enable debug logging. Default: false + + + +## API Calls + +- `api.jobs.ack` +- `api.jobs.complete` +- `api.jobs.fail` +- `api.sheets.list` +- `api.records.get` +- `api.files.upload` + + + +## Usage + +**install** +```bash +npm install @flatfile/plugin-export-delimited-zip +``` + +**listener.ts** +```typescript +import type { FlatfileListener } from '@flatfile/listener' +import exportDelimitedZip from '@flatfile/plugin-export-delimited-zip' + +export default function (listener: FlatfileListener) { + listener.use(exportDelimitedZip({ + job: 'export-delimited-zip', + delimiter: ',', + fileExtension: 'csv', + })) +} +``` diff --git a/export/delimited-zip/jest.config.js b/export/delimited-zip/jest.config.js new file mode 100644 index 000000000..e6d7ca40b --- /dev/null +++ b/export/delimited-zip/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + testEnvironment: 'node', + + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + setupFiles: ['../../test/dotenv-config.js'], + setupFilesAfterEnv: [ + '../../test/betterConsoleLog.js', + '../../test/unit.cleanup.js', + ], + testTimeout: 60_000, + globalSetup: '../../test/setup-global.js', + forceExit: true, + passWithNoTests: true, +} diff --git a/export/delimited-zip/package.json b/export/delimited-zip/package.json new file mode 100644 index 000000000..9c536322c --- /dev/null +++ b/export/delimited-zip/package.json @@ -0,0 +1,73 @@ +{ + "name": "@flatfile/plugin-export-delimited-zip", + "version": "0.0.0", + "url": "https://github.com/FlatFilers/flatfile-plugins/tree/main/export/delimited-zip", + "description": "A Flatfile plugin for exporting Workbooks to delimited files and zipping them together", + "registryMetadata": { + "category": "export" + }, + "engines": { + "node": ">= 16" + }, + "browserslist": [ + "> 0.5%", + "last 2 versions", + "not dead" + ], + "browser": { + "./dist/index.js": "./dist/index.browser.js", + "./dist/index.mjs": "./dist/index.browser.mjs" + }, + "exports": { + "types": "./dist/index.d.ts", + "node": { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "browser": { + "require": "./dist/index.browser.js", + "import": "./dist/index.browser.mjs" + }, + "default": "./dist/index.mjs" + }, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "source": "./src/index.ts", + "files": [ + "dist/**" + ], + "scripts": { + "build": "rollup -c", + "build:watch": "rollup -c --watch", + "build:prod": "NODE_ENV=production rollup -c", + "check": "tsc ./**/*.ts --noEmit --esModuleInterop", + "test": "jest src/*.spec.ts --detectOpenHandles", + "test:unit": "jest src/*.spec.ts --testPathIgnorePatterns=.*\\.e2e\\.spec\\.ts$ --detectOpenHandles", + "test:e2e": "jest src/*.e2e.spec.ts --detectOpenHandles" + }, + "keywords": [ + "flatfile-plugins", + "category-export" + ], + "author": "Flatfile, Inc.", + "repository": { + "type": "git", + "url": "https://github.com/FlatFilers/flatfile-plugins.git", + "directory": "export/delimited-zip" + }, + "license": "ISC", + "dependencies": { + "@flatfile/plugin-job-handler": "^0.6.1", + "@flatfile/util-common": "^1.4.1", + "adm-zip": "^0.5.16", + "csv-stringify": "^6.5.1" + }, + "peerDependencies": { + "@flatfile/api": "^1.9.15", + "@flatfile/listener": "^1.0.5" + }, + "devDependencies": { + "@flatfile/bundler-config-rollup": "^0.2.0" + } +} diff --git a/export/delimited-zip/rollup.config.mjs b/export/delimited-zip/rollup.config.mjs new file mode 100644 index 000000000..0a8398c60 --- /dev/null +++ b/export/delimited-zip/rollup.config.mjs @@ -0,0 +1,5 @@ +import { buildConfig } from '@flatfile/bundler-config-rollup' + +const config = buildConfig({}) + +export default config diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts new file mode 100644 index 000000000..d1377936d --- /dev/null +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -0,0 +1,202 @@ +import { FlatfileClient } from '@flatfile/api' +import type { FlatfileListener } from '@flatfile/listener' +import { jobHandler } from '@flatfile/plugin-job-handler' +import { processRecords } from '@flatfile/util-common' +import AdmZip from 'adm-zip' +import { stringify } from 'csv-stringify/sync' +import fs from 'fs' +import os from 'os' +import path from 'path' + +const api = new FlatfileClient() + +export interface PluginOptions { + job: string + delimiter: string + fileExtension: string + debug?: boolean +} + +export function exportDelimitedZip(options: PluginOptions) { + return (listener: FlatfileListener) => { + listener.use( + jobHandler(`workbook:${options.job}`, async (event, tick) => { + const { workbookId, spaceId, environmentId } = event.context + + try { + const { data: workbook } = await api.workbooks.get(workbookId) + + await tick(1, `Starting ${workbook.name} export`) + + const { data: sheets } = await api.sheets.list({ workbookId }) + if (options.debug) { + console.log('Sheets retrieved:', sheets) + } + + // Get current date-time + const dateTime = new Date().toISOString().replace(/[:.]/g, '-') + + // Get the path to the system's temporary directory + const tempDir = os.tmpdir() + + // Create a new directory in the system's temporary directory for the delimited files + const dir = path.join(tempDir, `${workbook.name}_${dateTime}`) + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir) + } + + if (options.debug) { + console.log(`Creating zip file in ${dir}`) + } + + const zipFile = new AdmZip() + + // For each sheet, create a delimited file and populate it with data + const totalSheets = sheets.length + for (const [index, sheet] of sheets.entries()) { + // Limit sheet name to 31 characters + const trimmedSheetName = sheet.name.substring(0, 31) + + if (options.debug) { + console.log(`Processing sheet ${trimmedSheetName}`) + } + + const { + data: { records: records }, + } = await api.records.get(sheet.id, { + pageSize: 1, + }) + + const header = Object.keys(records[0].values) + + const fileName = `${trimmedSheetName}.${options.fileExtension}` + const filePath = `${dir}/${fileName}` + + // Write header only once before processing records + const headerContent = stringify([header], { + delimiter: options.delimiter, + }) + fs.writeFileSync(filePath, headerContent) + + if (options.debug) { + console.log(`Writing header to ${filePath}`) + } + + await processRecords( + sheet.id, + async (records, pageNumber, totalPageCount) => { + const rows = records.map((record) => + header.map((key) => record.values[key].value) + ) + + const csvContent = stringify(rows, { + delimiter: options.delimiter, + }) + + // Append the new records to the existing file + fs.appendFileSync(filePath, csvContent) + + if (options.debug) { + console.log( + `Writing ${records.length} records to ${filePath} (page ${pageNumber} of ${totalPageCount})` + ) + } + + // Calculate progress percentage + const sheetProgress = (pageNumber + 1) / totalPageCount + const sheetWeight = 1 / totalSheets + const progress = Math.round( + (index / totalSheets + sheetProgress * sheetWeight) * 80 + 10 + ) + + // Acknowledge job progress + await tick( + progress, + `Processed page ${pageNumber + 1} of ${trimmedSheetName}.${options.fileExtension}` + ) + }, + { + pageSize: 5, + } + ) + + zipFile.addFile(fileName, fs.readFileSync(filePath)) + } + + if (options.debug) { + console.log( + `Data written to ${options.fileExtension.toUpperCase()} files` + ) + } + + const zipFileName = `${workbook.name}_${dateTime}.zip` + const zipFilePath = path.join(tempDir, zipFileName) + + zipFile.writeZip(zipFilePath) + + if (options.debug) { + console.log(`Zipped file: ${zipFilePath}`) + } + + const { data: file } = await api.files.upload( + fs.createReadStream(zipFilePath), + { + spaceId, + environmentId, + mode: 'export', + } + ) + + // Cleanup temporary files + for (const sheet of workbook.sheets) { + const trimmedSheetName = sheet.name.substring(0, 31) + const fileName = `${trimmedSheetName}.${options.fileExtension}` + const filePath = path.join(dir, fileName) + + try { + await fs.promises.unlink(filePath) + if (options.debug) { + console.log(`Deleted temporary file: ${filePath}`) + } + } catch (error) { + console.warn( + `Failed to delete temporary file: ${filePath}`, + error + ) + } + } + + try { + await fs.promises.unlink(zipFilePath) + if (options.debug) { + console.log(`Deleted temporary ZIP file: ${zipFilePath}`) + } + } catch (error) { + console.warn( + `Failed to delete temporary ZIP file: ${zipFilePath}`, + error + ) + } + + return { + outcome: { + message: `Data was exported to ${zipFileName}.`, + next: { + type: 'files', + files: [{ fileId: file.id }], + }, + }, + } + } catch (error) { + if (options.debug) { + console.error(error) + } + + throw new Error( + `This job failed probably because it couldn't write to the ${options.fileExtension.toUpperCase()} files, compress them into a ZIP file, or upload it.` + ) + } + }) + ) + } +} diff --git a/export/delimited-zip/src/index.ts b/export/delimited-zip/src/index.ts new file mode 100644 index 000000000..44c109619 --- /dev/null +++ b/export/delimited-zip/src/index.ts @@ -0,0 +1 @@ +export * from './export.delimited.zip.plugin' diff --git a/export/pivot-table/jest.config.js b/export/pivot-table/jest.config.js new file mode 100644 index 000000000..e6d7ca40b --- /dev/null +++ b/export/pivot-table/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + testEnvironment: 'node', + + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + setupFiles: ['../../test/dotenv-config.js'], + setupFilesAfterEnv: [ + '../../test/betterConsoleLog.js', + '../../test/unit.cleanup.js', + ], + testTimeout: 60_000, + globalSetup: '../../test/setup-global.js', + forceExit: true, + passWithNoTests: true, +} diff --git a/flatfilers/sandbox/src/index.ts b/flatfilers/sandbox/src/index.ts index 77b3de4e8..4d66a14cb 100644 --- a/flatfilers/sandbox/src/index.ts +++ b/flatfilers/sandbox/src/index.ts @@ -1,113 +1,114 @@ -import api, { type Flatfile } from '@flatfile/api' import type { FlatfileListener } from '@flatfile/listener' -import { - type PartialSheetConfig, - type PartialWorkbookConfig, - configureSpaceWithJsonSchema, - fetchExternalReference, -} from '@flatfile/plugin-convert-json-schema' +import { exportDelimitedZip } from '@flatfile/plugin-export-delimited-zip' +import { configureSpace } from '@flatfile/plugin-space-configure' -export default function (listener: FlatfileListener) { - const workbookActions: Flatfile.Action[] = [ - { - operation: 'submitAction', - mode: 'foreground', - label: 'Submit data', - type: 'string', - description: 'Submit this data to a webhook.', - primary: true, - }, - ] - - const sheetActions: Flatfile.Action[] = [ - { - operation: 'duplicateSheet', - mode: 'foreground', - label: 'Duplicate', - description: 'Duplicate this sheet.', - primary: true, - }, - ] - - const personModel: PartialSheetConfig = { - source: { - $id: 'https://raw.githubusercontent.com/FlatFilers/flatfile-docs-kitchen-sink/main/typescript/dynamic-configurations-json-schema/example-schemas/person.json', - $schema: 'https://json-schema.org/draft/2020-12/schema', - title: 'Person', - type: 'object', - properties: { - firstName: { - type: 'string', - description: "The person's first name.", - }, - lastName: { - type: 'string', - description: "The person's last name.", - }, - age: { - description: - 'Age in years which must be equal to or greater than zero.', - type: 'integer', - minimum: 0, - }, - }, - }, - slug: 'person', - name: 'Person', - actions: sheetActions, - } - - const customerModel: PartialSheetConfig = { - source: - 'https://raw.githubusercontent.com/FlatFilers/flatfile-docs-kitchen-sink/main/typescript/dynamic-configurations-json-schema/example-schemas/customer.json', - slug: 'customer', - name: 'Customer', - actions: sheetActions, - } - - const productModel: PartialSheetConfig = { - source: () => - fetchExternalReference( - 'https://raw.githubusercontent.com/FlatFilers/flatfile-docs-kitchen-sink/main/typescript/dynamic-configurations-json-schema/example-schemas/product.json' - ), - slug: 'product', - name: 'Product', - actions: sheetActions, - } - - const workbookOne: PartialWorkbookConfig = { - name: 'Store Workbook', - sheets: [customerModel, productModel], - actions: workbookActions, - } - - const workbookTwo: PartialWorkbookConfig = { - name: 'Person Workbook', - sheets: [personModel], - actions: workbookActions, - } - - const callback = async (event, workbookIds, tick) => { - const { spaceId } = event.context - await api.documents.create(spaceId, { - title: 'Welcome', - body: `
-

Welcome!

-

To get started, follow these steps:

-

1. Step One

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

-

Remember, if you need any assistance, you can always refer back to this page by clicking "Welcome" in the left-hand sidebar!

-
`, +export default async function (listener: FlatfileListener) { + listener.use( + exportDelimitedZip({ + job: 'export-delimited-zip', + delimiter: '\t', + fileExtension: 'tsv', + debug: true, }) - await tick(80, 'Document created') - } - + ) listener.use( - configureSpaceWithJsonSchema( - { - workbooks: [workbookOne, workbookTwo], - }, - callback - ) + configureSpace({ + workbooks: [ + { + name: 'Sandbox', + sheets: [ + { + name: 'Sales', + slug: 'sales', + fields: [ + { + key: 'date', + type: 'string', + label: 'Date', + }, + { + key: 'product', + type: 'string', + label: 'Product', + }, + { + key: 'category', + type: 'string', + label: 'Category', + }, + { + key: 'region', + type: 'string', + label: 'Region', + }, + { + key: 'salesAmount', + type: 'number', + label: 'Sales Amount', + }, + ], + actions: [ + { + operation: 'generateExampleRecords', + label: 'Generate Example Records', + description: + 'This custom action code generates example records using Anthropic.', + primary: false, + mode: 'foreground', + }, + ], + }, + { + name: 'Sales 2', + slug: 'sales-2', + fields: [ + { + key: 'date', + type: 'string', + label: 'Date', + }, + { + key: 'product', + type: 'string', + label: 'Product', + }, + { + key: 'category', + type: 'string', + label: 'Category', + }, + { + key: 'region', + type: 'string', + label: 'Region', + }, + { + key: 'salesAmount', + type: 'number', + label: 'Sales Amount', + }, + ], + actions: [ + { + operation: 'export-external-api', + label: 'Export to External API', + description: + 'This custom action code exports the records in the Sales sheet to an external API.', + primary: false, + mode: 'foreground', + }, + ], + }, + ], + actions: [ + { + operation: 'export-delimited-zip', + label: 'Export to Delimited ZIP', + mode: 'foreground', + }, + ], + }, + ], + }) ) } diff --git a/package-lock.json b/package-lock.json index 9c0135c06..258cb38c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ }, "bundlers/rollup-config": { "name": "@flatfile/bundler-config-rollup", - "version": "0.1.1", + "version": "0.2.0", "license": "ISC", "dependencies": { "@rollup/plugin-commonjs": "^25.0.7", @@ -64,7 +64,7 @@ }, "bundlers/tsup-config": { "name": "@flatfile/bundler-config-tsup", - "version": "0.0.0", + "version": "0.1.0", "license": "ISC", "dependencies": { "tsup": "^8.3.0" @@ -72,14 +72,14 @@ }, "convert/currency": { "name": "@flatfile/plugin-convert-currency", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0", + "@flatfile/plugin-record-hook": "^1.8.0", "cross-fetch": "^3.1.5" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -91,22 +91,21 @@ }, "convert/currency/node_modules/cross-fetch": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "convert/translate": { "name": "@flatfile/plugin-convert-translate", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.1", + "@flatfile/plugin-record-hook": "^1.8.0", "@google-cloud/translate": "^8.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -117,15 +116,15 @@ }, "convert/what3words": { "name": "@flatfile/plugin-convert-what3words", - "version": "0.2.1", + "version": "0.3.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0", + "@flatfile/plugin-record-hook": "^1.8.0", "cross-fetch": "^4.0.0", "modern-async": "^2.0.4" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -136,14 +135,14 @@ }, "enrich/geocode": { "name": "@flatfile/plugin-enrich-geocode", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.6.1", + "@flatfile/plugin-record-hook": "^1.8.0", "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -154,14 +153,14 @@ }, "enrich/gpx": { "name": "@flatfile/plugin-enrich-gpx", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.6.1", + "@flatfile/plugin-record-hook": "^1.8.0", "xml2js": "^0.6.2" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -172,14 +171,14 @@ }, "enrich/sentiment": { "name": "@flatfile/plugin-enrich-sentiment", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.6.1", + "@flatfile/plugin-record-hook": "^1.8.0", "sentiment": "^5.0.2" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", + "@flatfile/bundler-config-tsup": "^0.1.0", "@types/sentiment": "^5.0.4" }, "engines": { @@ -191,14 +190,14 @@ }, "enrich/summarize": { "name": "@flatfile/plugin-enrich-summarize", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0", + "@flatfile/plugin-record-hook": "^1.8.0", "compromise": "^14.14.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -208,15 +207,51 @@ "@flatfile/listener": "^1.1.0" } }, + "export/delimited-zip": { + "name": "@flatfile/plugin-export-delimited-zip", + "version": "0.0.0", + "license": "ISC", + "dependencies": { + "@flatfile/plugin-job-handler": "^0.6.1", + "@flatfile/util-common": "^1.4.1", + "adm-zip": "^0.5.16", + "csv-stringify": "^6.5.1" + }, + "devDependencies": { + "@flatfile/bundler-config-rollup": "^0.2.0" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "@flatfile/api": "^1.9.15", + "@flatfile/listener": "^1.0.5" + } + }, + "export/delimited-zip/node_modules/@flatfile/plugin-job-handler": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@flatfile/plugin-job-handler/-/plugin-job-handler-0.6.1.tgz", + "integrity": "sha512-zV04ytHudau/nLjm0oNC4v9LQmSsx5ZcxAKyrpsDQtQ1CFeiv5gUp67WmEvLNBne8vQ+D7ISCnuz4nD8dRgIhw==", + "dependencies": { + "@flatfile/util-common": "^1.4.1" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "@flatfile/api": "^1.9.19", + "@flatfile/listener": "^1.1.0" + } + }, "export/pivot-table": { "name": "@flatfile/plugin-export-pivot-table", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { "@flatfile/api": "^1.9.15" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -227,14 +262,14 @@ }, "extract/html-table": { "name": "@flatfile/plugin-extract-html-table", - "version": "1.1.0", + "version": "1.2.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.5", + "@flatfile/util-extractor": "^2.2.0", "node-html-parser": "^6.1.13" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -242,13 +277,13 @@ }, "extract/markdown": { "name": "@flatfile/plugin-extract-markdown", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.2" + "@flatfile/util-extractor": "^2.2.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -282,14 +317,14 @@ }, "import/faker": { "name": "@flatfile/plugin-import-faker", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { "@faker-js/faker": "^9.0.2", - "@flatfile/util-common": "^1.4.1" + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -300,14 +335,13 @@ }, "import/faker/node_modules/@faker-js/faker": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", - "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/fakerjs" } ], + "license": "MIT", "engines": { "node": ">=18.0.0", "npm": ">=9.0.0" @@ -315,14 +349,14 @@ }, "import/llm-records": { "name": "@flatfile/plugin-import-llm-records", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.0" + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -338,15 +372,15 @@ }, "import/rss": { "name": "@flatfile/plugin-import-rss", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { "@flatfile/api": "^1.9.19", - "@flatfile/util-common": "^1.4.1", + "@flatfile/util-common": "^1.5.0", "rss-parser": "^3.13.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -372,8 +406,7 @@ }, "node_modules/@anthropic-ai/sdk": { "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.27.3.tgz", - "integrity": "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==", + "license": "MIT", "peer": true, "dependencies": { "@types/node": "^18.11.18", @@ -387,8 +420,7 @@ }, "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { "version": "18.19.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.59.tgz", - "integrity": "sha512-vizm2EqwV/7Zay+A6J3tGl9Lhr7CjZe2HmWS988sefiEmsyP9CeXEleho6i4hJk/8UtZAo0bWN4QPZZr83RxvQ==", + "license": "MIT", "peer": true, "dependencies": { "undici-types": "~5.26.4" @@ -396,8 +428,7 @@ }, "node_modules/@anthropic-ai/sdk/node_modules/agentkeepalive": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", "peer": true, "dependencies": { "humanize-ms": "^1.2.1" @@ -408,8 +439,7 @@ }, "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", "peer": true }, "node_modules/@apidevtools/json-schema-ref-parser": { @@ -3436,8 +3466,6 @@ }, "node_modules/@flatfile/api": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@flatfile/api/-/api-1.10.0.tgz", - "integrity": "sha512-MOj0KG0/u09pSNINhnfLZlskbuLF4V0Aij4Et9HNCnHSXa/NP4LreT0JbyGq3A0FD7MOSuJlKLbUZPyq+pAh7Q==", "dependencies": { "@flatfile/cross-env-config": "0.0.4", "@types/pako": "2.0.1", @@ -3470,8 +3498,6 @@ }, "node_modules/@flatfile/changelog": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@flatfile/changelog/-/changelog-1.0.4.tgz", - "integrity": "sha512-aNfJcpe+HA9buWtdHIq5gCnt6DFiK3l30tJaAKkfKqBKI1MmpqyI1UKnLfY98EAR4JH3B/Uiuz/Go2hqgnWNwg==", "optional": true, "dependencies": { "chalk": "^4.1.2", @@ -3487,14 +3513,12 @@ }, "node_modules/@flatfile/changelog/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0", "optional": true }, "node_modules/@flatfile/changelog/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", "optional": true, "engines": { "node": "^12.20.0 || >=14" @@ -3502,8 +3526,7 @@ }, "node_modules/@flatfile/changelog/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "optional": true, "dependencies": { "argparse": "^2.0.1" @@ -3538,8 +3561,7 @@ }, "node_modules/@flatfile/listener": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@flatfile/listener/-/listener-1.1.0.tgz", - "integrity": "sha512-LEzq0ucXmDy/tCM23dg9MTjtZtd8eGSzHLdaKwzeQWrwjN+XnZE/5wrpU+0vXxfDxTpuKFv8TGA/Bvxh/e+4yg==", + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "cross-fetch": "^4.0.0", @@ -3638,6 +3660,10 @@ "resolved": "enrich/summarize", "link": true }, + "node_modules/@flatfile/plugin-export-delimited-zip": { + "resolved": "export/delimited-zip", + "link": true + }, "node_modules/@flatfile/plugin-export-pivot-table": { "resolved": "export/pivot-table", "link": true @@ -3798,8 +3824,7 @@ }, "node_modules/@google-cloud/common": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", - "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/projectify": "^4.0.0", "@google-cloud/promisify": "^4.0.0", @@ -3817,24 +3842,21 @@ }, "node_modules/@google-cloud/projectify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "license": "Apache-2.0", "engines": { "node": ">=14.0.0" } }, "node_modules/@google-cloud/promisify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", - "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@google-cloud/translate": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@google-cloud/translate/-/translate-8.5.0.tgz", - "integrity": "sha512-avQa3WLkO3PSk2fiV6Af/PmeDnM6XWGDgO+Z+hZ/FZpBRMjCW1Px9MNLbM1sBKGjt/uM8aOGHqow/AAR7lLsUA==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/common": "^5.0.0", "@google-cloud/promisify": "^4.0.0", @@ -3849,8 +3871,7 @@ }, "node_modules/@grpc/grpc-js": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.2.tgz", - "integrity": "sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==", + "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" @@ -3861,8 +3882,7 @@ }, "node_modules/@grpc/proto-loader": { "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -4391,8 +4411,7 @@ }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -4405,8 +4424,7 @@ }, "node_modules/@langchain/anthropic": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.5.tgz", - "integrity": "sha512-AWlF8mSTcxlDdLD+FD9TYFnVaQSCp4foblCDzUR/Xnhn8IvZSzK+3nbxkdVM4a8LS+7GnxP9ED88ZAUvZSQmQg==", + "license": "MIT", "peer": true, "dependencies": { "@anthropic-ai/sdk": "^0.27.3", @@ -4423,8 +4441,7 @@ }, "node_modules/@langchain/core": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.13.tgz", - "integrity": "sha512-sHDlwyHhgeaYC+wfORrWO7sXxD6/GDtZZ5mqjY48YMwB58cVv8hTs8goR/9EwXapYt8fQi2uXTGUV87bHzvdZQ==", + "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^5.0.0", @@ -4445,8 +4462,7 @@ }, "node_modules/@langchain/core/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -4457,8 +4473,7 @@ }, "node_modules/@langchain/core/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -4469,12 +4484,11 @@ }, "node_modules/@langchain/core/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "peer": true, "bin": { "uuid": "dist/bin/uuid" @@ -4482,8 +4496,7 @@ }, "node_modules/@langchain/mistralai": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-0.1.1.tgz", - "integrity": "sha512-gnHdQRfn+iBReKD0u1nydGqHgVOjnKHpd0Q2qEN61ZuxiqFOOauWYkrbyml7tzcOdMv2vUAr5+pjpXip+ez59w==", + "license": "MIT", "peer": true, "dependencies": { "@mistralai/mistralai": "^0.4.0", @@ -4500,12 +4513,11 @@ }, "node_modules/@langchain/mistralai/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "peer": true, "bin": { "uuid": "dist/bin/uuid" @@ -4513,8 +4525,7 @@ }, "node_modules/@langchain/openai": { "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.11.tgz", - "integrity": "sha512-mEFbpJ8w8NPArsquUlCwxvZTKNkXxqwzvTEYzv6Jb7gUoBDOZtwLg6AdcngTJ+w5VFh3wxgPy0g3zb9Aw0Qbpw==", + "license": "MIT", "peer": true, "dependencies": { "js-tiktoken": "^1.0.12", @@ -4601,8 +4612,7 @@ }, "node_modules/@mistralai/mistralai": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-0.4.0.tgz", - "integrity": "sha512-KmFzNro1RKxIFh19J3osmUQhucefBBauMXN5fa9doG6dT9OHR/moBvvn+riVlR7c0AVfuxO8Dfa03AyLYYzbyg==", + "license": "ISC", "peer": true, "dependencies": { "node-fetch": "^2.6.7" @@ -4826,28 +4836,23 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -4855,28 +4860,23 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "license": "BSD-3-Clause" }, "node_modules/@react-native-community/cli": { "version": "14.0.0", @@ -5980,9 +5980,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", + "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", "cpu": [ "x64" ], @@ -6169,8 +6169,7 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -6226,8 +6225,7 @@ }, "node_modules/@types/caseless": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" + "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.5", @@ -6274,9 +6272,8 @@ }, "node_modules/@types/jest": { "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -6297,8 +6294,7 @@ }, "node_modules/@types/long": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + "license": "MIT" }, "node_modules/@types/mute-stream": { "version": "0.0.4", @@ -6357,8 +6353,7 @@ }, "node_modules/@types/request": { "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "license": "MIT", "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -6368,8 +6363,7 @@ }, "node_modules/@types/request/node_modules/form-data": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", - "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -6386,8 +6380,7 @@ }, "node_modules/@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT", "peer": true }, "node_modules/@types/semver": { @@ -6397,9 +6390,8 @@ }, "node_modules/@types/sentiment": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/sentiment/-/sentiment-5.0.4.tgz", - "integrity": "sha512-6FL0CYijhnrR3gHbu7boAJn8zRCekJXBPfIHLkIgWbkY+hz5Dwfsq79FM7l/tLZKuEgQWktnzf6JqV2UCWKrbg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", @@ -6407,8 +6399,7 @@ }, "node_modules/@types/tough-cookie": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + "license": "MIT" }, "node_modules/@types/triple-beam": { "version": "1.3.5", @@ -6417,8 +6408,7 @@ }, "node_modules/@types/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT", "peer": true }, "node_modules/@types/wrap-ansi": { @@ -6477,8 +6467,9 @@ } }, "node_modules/adm-zip": { - "version": "0.5.15", - "license": "MIT", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "engines": { "node": ">=12.0" } @@ -6723,8 +6714,7 @@ }, "node_modules/arrify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", "engines": { "node": ">=8" } @@ -7010,8 +7000,7 @@ }, "node_modules/bignumber.js": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", "engines": { "node": "*" } @@ -7431,8 +7420,7 @@ }, "node_modules/chrono-node": { "version": "2.7.7", - "resolved": "https://registry.npmjs.org/chrono-node/-/chrono-node-2.7.7.tgz", - "integrity": "sha512-p3S7gotuTPu5oqhRL2p1fLwQXGgdQaRTtWR3e8Di9P1Pa9mzkK5DWR5AWBieMUh2ZdOnPgrK+zCrbbtyuA+D/Q==", + "license": "MIT", "dependencies": { "dayjs": "^1.10.0" }, @@ -7722,8 +7710,7 @@ }, "node_modules/compromise": { "version": "14.14.2", - "resolved": "https://registry.npmjs.org/compromise/-/compromise-14.14.2.tgz", - "integrity": "sha512-g2Qe4zn8TmL7xQFR5Tx7i1txTUnzTPxhE7hDCQM+LDIfvYcriKzqH7eD2J/apUr/hRxvfKbRJ/yYXtN1cgD+Ug==", + "license": "MIT", "dependencies": { "efrt": "2.7.0", "grad-school": "0.0.5", @@ -8030,6 +8017,11 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/csv-stringify": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.1.tgz", + "integrity": "sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==" + }, "node_modules/cuint": { "version": "0.2.2", "dev": true, @@ -8382,8 +8374,7 @@ }, "node_modules/duplexify": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", - "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", @@ -8421,8 +8412,7 @@ }, "node_modules/efrt": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/efrt/-/efrt-2.7.0.tgz", - "integrity": "sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==", + "license": "MIT", "engines": { "node": ">=12.0.0" } @@ -8479,8 +8469,7 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -8804,8 +8793,7 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT", "peer": true }, "node_modules/events": { @@ -9704,14 +9692,12 @@ }, "node_modules/form-data-encoder": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT", "peer": true }, "node_modules/formdata-node": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "peer": true, "dependencies": { "node-domexception": "1.0.0", @@ -9796,8 +9782,7 @@ }, "node_modules/gaxios": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", - "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -9811,8 +9796,7 @@ }, "node_modules/gcp-metadata": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", - "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "license": "Apache-2.0", "dependencies": { "gaxios": "^6.0.0", "json-bigint": "^1.0.0" @@ -10015,8 +9999,7 @@ }, "node_modules/google-auth-library": { "version": "9.14.2", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.2.tgz", - "integrity": "sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==", + "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", @@ -10031,8 +10014,7 @@ }, "node_modules/google-gax": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", - "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.10.9", "@grpc/proto-loader": "^0.7.13", @@ -10067,8 +10049,7 @@ }, "node_modules/grad-school": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/grad-school/-/grad-school-0.0.5.tgz", - "integrity": "sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -10116,8 +10097,7 @@ }, "node_modules/gtoken": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", - "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "license": "MIT", "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" @@ -10215,8 +10195,7 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", "bin": { "he": "bin/he" } @@ -10263,8 +10242,6 @@ }, "node_modules/html-entities": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "funding": [ { "type": "github", @@ -10274,7 +10251,8 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ] + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -10283,8 +10261,7 @@ }, "node_modules/html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -10424,9 +10401,8 @@ }, "node_modules/ignore-walk": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^5.0.1" }, @@ -10436,18 +10412,16 @@ }, "node_modules/ignore-walk/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10788,8 +10762,7 @@ }, "node_modules/is-html": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-html/-/is-html-2.0.0.tgz", - "integrity": "sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==", + "license": "MIT", "dependencies": { "html-tags": "^3.0.0" }, @@ -10995,8 +10968,7 @@ }, "node_modules/isbn3": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/isbn3/-/isbn3-1.2.2.tgz", - "integrity": "sha512-cBZ09bmEKYjWkc05GjXVnRFfyE3pVtmWMl9oCRjjq8l0QiyGrrbyhlOL8e++pXv+s/r8SqLPBRmV85kA4WM1Qg==", + "license": "MIT", "bin": { "isbn": "bin/isbn", "isbn-audit": "bin/isbn-audit", @@ -11730,8 +11702,7 @@ }, "node_modules/js-tiktoken": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.15.tgz", - "integrity": "sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ==", + "license": "MIT", "peer": true, "dependencies": { "base64-js": "^1.5.1" @@ -11824,8 +11795,7 @@ }, "node_modules/json-bigint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } @@ -11961,8 +11931,7 @@ }, "node_modules/langsmith": { "version": "0.1.66", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.1.66.tgz", - "integrity": "sha512-ZhZ9g8t/qjj0oUWpvKLtUe3qxDL/N0wG0m+Ctkxf0keopYJkcMJg4/71jl6ZYyiSU8xlC27aixXOT0uvLhqcFA==", + "license": "MIT", "peer": true, "dependencies": { "@types/uuid": "^10.0.0", @@ -11983,12 +11952,11 @@ }, "node_modules/langsmith/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "peer": true, "bin": { "uuid": "dist/bin/uuid" @@ -12003,8 +11971,7 @@ }, "node_modules/libphonenumber-js": { "version": "1.11.12", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.12.tgz", - "integrity": "sha512-QkJn9/D7zZ1ucvT++TQSvZuSA2xAWeUytU+DiEQwbPKLyrDpvbul2AFs1CGbRAPpSCCk47aRAb5DX5mmcayp4g==" + "license": "MIT" }, "node_modules/lighthouse-logger": { "version": "1.4.2", @@ -12074,8 +12041,7 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -12253,8 +12219,7 @@ }, "node_modules/long": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "license": "Apache-2.0" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -12869,8 +12834,7 @@ }, "node_modules/modern-async": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/modern-async/-/modern-async-2.0.4.tgz", - "integrity": "sha512-89Ig+D/NQAFi39/oRUphkwdLb4qo/3Vl21TCMPZY3oCWGQQ+HqNJ1kyWknyAJ2rsiewL9OGBmpKA5bQ0PikkMg==", + "license": "MIT", "dependencies": { "core-js-pure": "^3.19.1", "nanoassert": "^2.0.0" @@ -12942,8 +12906,7 @@ }, "node_modules/mustache": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", "peer": true, "bin": { "mustache": "bin/mustache" @@ -13045,8 +13008,6 @@ }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "funding": [ { "type": "github", @@ -13057,6 +13018,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "peer": true, "engines": { "node": ">=10.5.0" @@ -13104,8 +13066,7 @@ }, "node_modules/node-html-parser": { "version": "6.1.13", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", - "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "license": "MIT", "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" @@ -13154,9 +13115,8 @@ }, "node_modules/npm-bundled": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^2.0.0" }, @@ -13166,9 +13126,8 @@ }, "node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -13183,9 +13142,8 @@ }, "node_modules/npm-packlist": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", @@ -13201,19 +13159,16 @@ }, "node_modules/npm-packlist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/npm-packlist/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13230,9 +13185,8 @@ }, "node_modules/npm-packlist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -13242,9 +13196,8 @@ }, "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -13294,8 +13247,7 @@ }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -13404,8 +13356,7 @@ }, "node_modules/openai": { "version": "4.68.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.68.2.tgz", - "integrity": "sha512-Ys3Jl9vkBUFtrFj4pgrF7rMte4JNekZoMgI6dWkkpOIwNUKGkc4I8jTqv86LB+TcoqkTPzV6DS269dPR9ILWsQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@types/node": "^18.11.18", @@ -13430,8 +13381,7 @@ }, "node_modules/openai/node_modules/@types/node": { "version": "18.19.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.59.tgz", - "integrity": "sha512-vizm2EqwV/7Zay+A6J3tGl9Lhr7CjZe2HmWS988sefiEmsyP9CeXEleho6i4hJk/8UtZAo0bWN4QPZZr83RxvQ==", + "license": "MIT", "peer": true, "dependencies": { "undici-types": "~5.26.4" @@ -13439,8 +13389,7 @@ }, "node_modules/openai/node_modules/agentkeepalive": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", "peer": true, "dependencies": { "humanize-ms": "^1.2.1" @@ -13451,8 +13400,7 @@ }, "node_modules/openai/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", "peer": true }, "node_modules/openapi-typescript-codegen": { @@ -13568,8 +13516,7 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -13608,8 +13555,7 @@ }, "node_modules/p-queue": { "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", "peer": true, "dependencies": { "eventemitter3": "^4.0.4", @@ -13624,8 +13570,7 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", "peer": true, "dependencies": { "@types/retry": "0.12.0", @@ -13637,8 +13582,7 @@ }, "node_modules/p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", "peer": true, "dependencies": { "p-finally": "^1.0.0" @@ -13823,8 +13767,7 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -14106,8 +14049,7 @@ }, "node_modules/proto3-json-serializer": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", - "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", + "license": "Apache-2.0", "dependencies": { "protobufjs": "^7.2.5" }, @@ -14117,9 +14059,8 @@ }, "node_modules/protobufjs": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -14204,9 +14145,8 @@ }, "node_modules/publint": { "version": "0.2.12", - "resolved": "https://registry.npmjs.org/publint/-/publint-0.2.12.tgz", - "integrity": "sha512-YNeUtCVeM4j9nDiTT2OPczmlyzOkIXNtdDZnSuajAxS/nZ6j3t7Vs9SUB4euQNddiltIwu7Tdd3s+hr08fAsMw==", "dev": true, + "license": "MIT", "dependencies": { "npm-packlist": "^5.1.3", "picocolors": "^1.1.1", @@ -14863,8 +14803,7 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", "peer": true, "engines": { "node": ">= 4" @@ -14872,8 +14811,7 @@ }, "node_modules/retry-request": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", - "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "license": "MIT", "dependencies": { "@types/request": "^2.48.8", "extend": "^3.0.2", @@ -14999,8 +14937,7 @@ }, "node_modules/rss-parser": { "version": "3.13.0", - "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz", - "integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==", + "license": "MIT", "dependencies": { "entities": "^2.0.3", "xml2js": "^0.5.0" @@ -15008,16 +14945,14 @@ }, "node_modules/rss-parser/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/rss-parser/node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -15057,9 +14992,8 @@ }, "node_modules/sade": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, + "license": "MIT", "dependencies": { "mri": "^1.1.0" }, @@ -15190,8 +15124,7 @@ }, "node_modules/sentiment": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/sentiment/-/sentiment-5.0.2.tgz", - "integrity": "sha512-ZeC3y0JsOYTdwujt5uOd7ILJNilbgFzUtg/LEG4wUv43LayFNLZ28ec8+Su+h3saHlJmIwYxBzfDHHZuiMA15g==", + "license": "MIT", "engines": { "node": ">=8.0" } @@ -15644,16 +15577,14 @@ }, "node_modules/stream-events": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "license": "MIT", "dependencies": { "stubs": "^3.0.0" } }, "node_modules/stream-shift": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -15796,8 +15727,7 @@ }, "node_modules/stubs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" + "license": "MIT" }, "node_modules/sucrase": { "version": "3.35.0", @@ -15871,8 +15801,7 @@ }, "node_modules/suffix-thumb": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/suffix-thumb/-/suffix-thumb-5.0.2.tgz", - "integrity": "sha512-I5PWXAFKx3FYnI9a+dQMWNqTxoRt6vdBdb0O+BJ1sxXCWtSoQCusc13E58f+9p4MYx/qCnEMkD5jac6K2j3dgA==" + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -16037,8 +15966,7 @@ }, "node_modules/teeny-request": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", - "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "license": "Apache-2.0", "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -16052,8 +15980,7 @@ }, "node_modules/teeny-request/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -16063,8 +15990,7 @@ }, "node_modules/teeny-request/node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -16079,8 +16005,7 @@ }, "node_modules/teeny-request/node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -16092,8 +16017,7 @@ }, "node_modules/teeny-request/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -16104,8 +16028,7 @@ }, "node_modules/teeny-request/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/temp": { "version": "0.8.4", @@ -16626,8 +16549,7 @@ }, "node_modules/typescript": { "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16863,8 +16785,7 @@ }, "node_modules/web-streams-polyfill": { "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "peer": true, "engines": { "node": ">= 14" @@ -17102,8 +17023,7 @@ }, "node_modules/xml2js": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -17114,8 +17034,7 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } @@ -17200,8 +17119,7 @@ }, "node_modules/zod-to-json-schema": { "version": "3.23.3", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.3.tgz", - "integrity": "sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==", + "license": "ISC", "peer": true, "peerDependencies": { "zod": "^3.23.3" @@ -17209,15 +17127,15 @@ }, "plugins/autocast": { "name": "@flatfile/plugin-autocast", - "version": "2.0.1", + "version": "3.0.0", "license": "ISC", "dependencies": { "@flatfile/hooks": "^1.4.1", - "@flatfile/util-common": "^1.4.1" + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/plugin-record-hook": "^1.7.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/plugin-record-hook": "^1.8.0" }, "engines": { "node": ">= 16" @@ -17225,20 +17143,20 @@ "peerDependencies": { "@flatfile/api": "^1.9.19", "@flatfile/listener": "^1.1.0", - "@flatfile/plugin-record-hook": "^1.7.1" + "@flatfile/plugin-record-hook": "^1.8.0" } }, "plugins/automap": { "name": "@flatfile/plugin-automap", - "version": "0.6.0", + "version": "0.7.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1", + "@flatfile/util-common": "^1.5.0", "modern-async": "^2.0.4" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0" }, "engines": { "node": ">= 16" @@ -17250,11 +17168,11 @@ }, "plugins/constraints": { "name": "@flatfile/plugin-constraints", - "version": "3.0.1", + "version": "4.0.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/plugin-record-hook": "^1.7.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/plugin-record-hook": "^1.8.0" }, "engines": { "node": ">= 16" @@ -17262,20 +17180,20 @@ "peerDependencies": { "@flatfile/api": "^1.9.19", "@flatfile/listener": "^1.1.0", - "@flatfile/plugin-record-hook": "^1.7.1" + "@flatfile/plugin-record-hook": "^1.8.0" } }, "plugins/dedupe": { "name": "@flatfile/plugin-dedupe", - "version": "1.2.1", + "version": "1.3.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1" + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { "@faker-js/faker": "^7.6.0", - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17287,15 +17205,15 @@ }, "plugins/delimiter-extractor": { "name": "@flatfile/plugin-delimiter-extractor", - "version": "2.2.3", + "version": "2.3.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.7", + "@flatfile/util-extractor": "^2.2.0", "papaparse": "^5.4.1", "remeda": "^1.14.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", + "@flatfile/bundler-config-tsup": "^0.1.0", "@types/flat": "^5.0.2", "@types/papaparse": "^5.3.7" }, @@ -17308,10 +17226,10 @@ }, "plugins/dxp-configure": { "name": "@flatfile/plugin-dxp-configure", - "version": "1.2.1", + "version": "1.3.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", + "@flatfile/bundler-config-tsup": "^0.1.0", "@flatfile/configure": "^1.0.1" }, "engines": { @@ -17324,12 +17242,12 @@ }, "plugins/export-workbook": { "name": "@flatfile/plugin-export-workbook", - "version": "1.0.1", + "version": "2.0.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0" }, "engines": { "node": ">= 16" @@ -17337,22 +17255,22 @@ "peerDependencies": { "@flatfile/api": "^1.9.19", "@flatfile/listener": "^1.1.0", - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", "remeda": "^1.14.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" } }, "plugins/foreign-db-extractor": { "name": "@flatfile/plugin-foreign-db-extractor", - "version": "0.2.1", + "version": "0.3.0", "license": "ISC", "dependencies": { "cross-fetch": "^4.0.0", "mssql": "^10.0.1" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 18" @@ -17364,16 +17282,16 @@ }, "plugins/graphql-schema": { "name": "@flatfile/plugin-graphql-schema", - "version": "1.3.1", + "version": "1.4.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-space-configure": "^0.6.1", + "@flatfile/plugin-space-configure": "^0.7.0", "change-case": "^5.4.3", "cross-fetch": "^4.0.0", "graphql": "^16.8.1" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17384,14 +17302,14 @@ }, "plugins/job-handler": { "name": "@flatfile/plugin-job-handler", - "version": "0.6.1", + "version": "0.7.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1" + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0" }, "engines": { "node": ">= 16" @@ -17403,13 +17321,13 @@ }, "plugins/json-extractor": { "name": "@flatfile/plugin-json-extractor", - "version": "0.8.2", + "version": "0.9.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.2" + "@flatfile/util-extractor": "^2.2.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17417,14 +17335,14 @@ }, "plugins/json-schema": { "name": "@flatfile/plugin-convert-json-schema", - "version": "0.4.2", + "version": "0.5.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-space-configure": "^0.6.1", + "@flatfile/plugin-space-configure": "^0.7.0", "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17436,16 +17354,16 @@ }, "plugins/merge-connection": { "name": "@flatfile/plugin-connect-via-merge", - "version": "0.4.2", + "version": "0.5.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-convert-openapi-schema": "^0.3.2", - "@flatfile/plugin-job-handler": "^0.6.1", + "@flatfile/plugin-convert-openapi-schema": "^0.4.0", + "@flatfile/plugin-job-handler": "^0.7.0", "@mergeapi/merge-node-client": "^1.0.4" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/plugin-space-configure": "^0.6.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/plugin-space-configure": "^0.7.0" }, "engines": { "node": ">= 16" @@ -17457,14 +17375,14 @@ }, "plugins/openapi-schema": { "name": "@flatfile/plugin-convert-openapi-schema", - "version": "0.3.2", + "version": "0.4.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-space-configure": "^0.6.1", + "@flatfile/plugin-space-configure": "^0.7.0", "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17476,18 +17394,18 @@ }, "plugins/pdf-extractor": { "name": "@flatfile/plugin-pdf-extractor", - "version": "0.3.1", + "version": "0.4.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1", - "@flatfile/util-file-buffer": "^0.4.1", + "@flatfile/util-common": "^1.5.0", + "@flatfile/util-file-buffer": "^0.5.0", "cross-fetch": "^4.0.0", "form-data": "^4.0.0", "fs-extra": "^11.1.1", "remeda": "^1.14.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", + "@flatfile/bundler-config-tsup": "^0.1.0", "@types/fs-extra": "^11.0.1" }, "engines": { @@ -17529,10 +17447,10 @@ }, "plugins/psv-extractor": { "name": "@flatfile/plugin-psv-extractor", - "version": "1.9.1", + "version": "1.10.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17544,13 +17462,13 @@ }, "plugins/record-hook": { "name": "@flatfile/plugin-record-hook", - "version": "1.7.1", + "version": "1.8.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1" + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17563,16 +17481,16 @@ }, "plugins/rollout": { "name": "@flatfile/plugin-rollout", - "version": "1.1.1", + "version": "1.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", "async": "^3.2.5", "modern-async": "^2.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17584,15 +17502,15 @@ }, "plugins/space-configure": { "name": "@flatfile/plugin-space-configure", - "version": "0.6.1", + "version": "0.7.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1" + "@flatfile/plugin-job-handler": "^0.7.0" }, "devDependencies": { "@flatfile/api": "^1.8.9", - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.2.0" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0" }, "engines": { "node": ">= 16" @@ -17602,33 +17520,17 @@ "@flatfile/listener": "^1.1.0" } }, - "plugins/space-configure/node_modules/@flatfile/utils-testing": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@flatfile/utils-testing/-/utils-testing-0.2.1.tgz", - "integrity": "sha512-Zq/i/dXBgN4CeKaVgu8jOMKO/5+kw4XvzCpDTuU8Od1dXHhrNvrgx5T7OYUHcIhksSiJS5EwmBW5vkyQW0vLFw==", - "dev": true, - "dependencies": { - "@flatfile/api": "^1.9.13", - "@flatfile/listener": "^1.0.1", - "@flatfile/listener-driver-pubsub": "^2.0.0", - "@jest/globals": "^29.6.4", - "cross-fetch": "^4.0.0" - }, - "engines": { - "node": ">= 16" - } - }, "plugins/sql-ddl-converter": { "name": "@flatfile/plugin-convert-sql-ddl", - "version": "0.2.2", + "version": "0.3.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-convert-json-schema": "^0.4.2", - "@flatfile/plugin-space-configure": "^0.6.1", + "@flatfile/plugin-convert-json-schema": "^0.5.0", + "@flatfile/plugin-space-configure": "^0.7.0", "sql-ddl-to-json-schema": "^4.1.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17640,10 +17542,10 @@ }, "plugins/tsv-extractor": { "name": "@flatfile/plugin-tsv-extractor", - "version": "1.8.1", + "version": "1.9.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17655,17 +17557,17 @@ }, "plugins/view-mapped": { "name": "@flatfile/plugin-view-mapped", - "version": "1.0.4", + "version": "1.1.0", "license": "ISC", "dependencies": { "@flatfile/api": "^1.9.19", "@flatfile/listener": "^1.1.0", - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1" + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0" }, "engines": { "node": ">= 16" @@ -17673,17 +17575,17 @@ }, "plugins/webhook-egress": { "name": "@flatfile/plugin-webhook-egress", - "version": "1.4.1", + "version": "1.5.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", - "@flatfile/util-response-rejection": "^1.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", + "@flatfile/util-response-rejection": "^1.5.0", "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1", + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0", "jest-fetch-mock": "^3.0.3" }, "engines": { @@ -17696,13 +17598,13 @@ }, "plugins/webhook-event-forwarder": { "name": "@flatfile/plugin-webhook-event-forwarder", - "version": "0.4.1", + "version": "0.5.0", "license": "ISC", "dependencies": { "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", + "@flatfile/bundler-config-tsup": "^0.1.0", "jest-fetch-mock": "^3.0.3" }, "engines": { @@ -17715,15 +17617,15 @@ }, "plugins/xlsx-extractor": { "name": "@flatfile/plugin-xlsx-extractor", - "version": "3.2.2", + "version": "3.3.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.7", + "@flatfile/util-extractor": "^2.2.0", "remeda": "^1.14.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17734,15 +17636,15 @@ }, "plugins/xml-extractor": { "name": "@flatfile/plugin-xml-extractor", - "version": "0.7.1", + "version": "0.8.0", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.1.7", + "@flatfile/util-extractor": "^2.2.0", "remeda": "^1.24.0", "xml-json-format": "^1.0.8" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17753,17 +17655,17 @@ }, "plugins/yaml-schema": { "name": "@flatfile/plugin-convert-yaml-schema", - "version": "0.3.2", + "version": "0.4.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-convert-json-schema": "^0.4.2", - "@flatfile/plugin-space-configure": "^0.6.1", + "@flatfile/plugin-convert-json-schema": "^0.5.0", + "@flatfile/plugin-space-configure": "^0.7.0", "cross-fetch": "^4.0.0", "js-yaml": "^4.1.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1", + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0", "express": "^4.18.2", "jest-fetch-mock": "^3.0.3" }, @@ -17791,18 +17693,18 @@ }, "plugins/zip-extractor": { "name": "@flatfile/plugin-zip-extractor", - "version": "0.6.1", + "version": "0.7.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", - "@flatfile/util-file-buffer": "^0.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", + "@flatfile/util-file-buffer": "^0.5.0", "adm-zip": "^0.5.10", "modern-async": "^2.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1", + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0", "@types/adm-zip": "^0.4.3" }, "engines": { @@ -17815,10 +17717,10 @@ }, "support/common-utils": { "name": "@flatfile/common-plugin-utils", - "version": "1.0.2", + "version": "1.1.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17826,14 +17728,14 @@ }, "utils/common": { "name": "@flatfile/util-common", - "version": "1.4.1", + "version": "1.5.0", "license": "ISC", "dependencies": { "@flatfile/cross-env-config": "^0.0.6", "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17845,19 +17747,18 @@ }, "utils/common/node_modules/@flatfile/cross-env-config": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@flatfile/cross-env-config/-/cross-env-config-0.0.6.tgz", - "integrity": "sha512-/8GpBVxjzTlAmFni08ELQfIrfuwZ+yIsAsTcYOzazbIAMp1ShKNB/1RfaIzRGhOF5OTWbj37mAL/z/tu6+rvpQ==" + "license": "ISC" }, "utils/extractor": { "name": "@flatfile/util-extractor", - "version": "2.1.7", + "version": "2.2.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1", - "@flatfile/util-file-buffer": "^0.4.1" + "@flatfile/util-common": "^1.5.0", + "@flatfile/util-file-buffer": "^0.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17869,13 +17770,13 @@ }, "utils/fetch-schema": { "name": "@flatfile/util-fetch-schema", - "version": "0.2.4", + "version": "0.3.0", "license": "ISC", "dependencies": { "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17886,10 +17787,10 @@ }, "utils/file-buffer": { "name": "@flatfile/util-file-buffer", - "version": "0.4.1", + "version": "0.5.0", "license": "ISC", "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17901,13 +17802,13 @@ }, "utils/response-rejection": { "name": "@flatfile/util-response-rejection", - "version": "1.4.1", + "version": "1.5.0", "license": "ISC", "dependencies": { - "@flatfile/util-common": "^1.4.1" + "@flatfile/util-common": "^1.5.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17918,7 +17819,7 @@ }, "utils/testing": { "name": "@flatfile/utils-testing", - "version": "0.3.1", + "version": "0.4.0", "license": "ISC", "dependencies": { "@flatfile/api": "^1.9.19", @@ -17928,7 +17829,7 @@ "cross-fetch": "^4.0.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17936,13 +17837,13 @@ }, "validate/boolean": { "name": "@flatfile/plugin-validate-boolean", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0" + "@flatfile/plugin-record-hook": "^1.8.0" }, "devDependencies": { - "@flatfile/bundler-config-rollup": "^0.1.1" + "@flatfile/bundler-config-rollup": "^0.2.0" }, "engines": { "node": ">= 16" @@ -17953,15 +17854,15 @@ }, "validate/date": { "name": "@flatfile/plugin-validate-date", - "version": "0.1.1", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.1", + "@flatfile/plugin-record-hook": "^1.8.0", "chrono-node": "^2.7.7", "date-fns": "^4.1.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17972,8 +17873,7 @@ }, "validate/date/node_modules/date-fns": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -17981,13 +17881,13 @@ }, "validate/email": { "name": "@flatfile/plugin-validate-email", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0" + "@flatfile/plugin-record-hook": "^1.8.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -17998,15 +17898,15 @@ }, "validate/isbn": { "name": "@flatfile/plugin-validate-isbn", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0", + "@flatfile/plugin-record-hook": "^1.8.0", "isbn3": "^1.2.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0", - "@flatfile/utils-testing": "^0.3.1" + "@flatfile/bundler-config-tsup": "^0.1.0", + "@flatfile/utils-testing": "^0.4.0" }, "engines": { "node": ">= 16" @@ -18017,13 +17917,13 @@ }, "validate/number": { "name": "@flatfile/plugin-validate-number", - "version": "0.1.1", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0" + "@flatfile/plugin-record-hook": "^1.8.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -18034,14 +17934,14 @@ }, "validate/phone": { "name": "@flatfile/plugin-validate-phone", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0", + "@flatfile/plugin-record-hook": "^1.8.0", "libphonenumber-js": "^1.11.10" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" @@ -18052,13 +17952,13 @@ }, "validate/string": { "name": "@flatfile/plugin-validate-string", - "version": "0.1.0", + "version": "0.2.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-record-hook": "^1.7.0" + "@flatfile/plugin-record-hook": "^1.8.0" }, "devDependencies": { - "@flatfile/bundler-config-tsup": "^0.0.0" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" From 3c3b674ae38d972f30460e461b5f2c199bc35bcf Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Wed, 30 Oct 2024 12:08:21 -0500 Subject: [PATCH 02/13] rollup -> tsup --- export/delimited-zip/package.json | 58 +++++++++++++++----------- export/delimited-zip/rollup.config.mjs | 5 --- export/delimited-zip/tsup.config.mjs | 3 ++ package-lock.json | 21 ++-------- 4 files changed, 39 insertions(+), 48 deletions(-) delete mode 100644 export/delimited-zip/rollup.config.mjs create mode 100644 export/delimited-zip/tsup.config.mjs diff --git a/export/delimited-zip/package.json b/export/delimited-zip/package.json index 9c536322c..c404f7407 100644 --- a/export/delimited-zip/package.json +++ b/export/delimited-zip/package.json @@ -6,6 +6,7 @@ "registryMetadata": { "category": "export" }, + "type": "module", "engines": { "node": ">= 16" }, @@ -14,34 +15,41 @@ "last 2 versions", "not dead" ], - "browser": { - "./dist/index.js": "./dist/index.browser.js", - "./dist/index.mjs": "./dist/index.browser.mjs" - }, "exports": { - "types": "./dist/index.d.ts", - "node": { - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "browser": { - "require": "./dist/index.browser.js", - "import": "./dist/index.browser.mjs" + ".": { + "node": { + "types": { + "import": "./dist/index.d.ts", + "require": "./dist/index.d.cts" + }, + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "browser": { + "types": { + "import": "./dist/index.d.ts", + "require": "./dist/index.d.cts" + }, + "import": "./dist/index.browser.js", + "require": "./dist/index.browser.cjs" + }, + "default": "./dist/index.js" }, - "default": "./dist/index.mjs" + "./package.json": "./package.json" }, - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", "source": "./src/index.ts", + "types": "./dist/index.d.ts", "files": [ "dist/**" ], "scripts": { - "build": "rollup -c", - "build:watch": "rollup -c --watch", - "build:prod": "NODE_ENV=production rollup -c", - "check": "tsc ./**/*.ts --noEmit --esModuleInterop", + "build": "tsup", + "build:watch": "tsup --watch", + "build:prod": "NODE_ENV=production tsup", + "checks": "tsc --noEmit && attw --pack . && publint .", + "lint": "tsc --noEmit", "test": "jest src/*.spec.ts --detectOpenHandles", "test:unit": "jest src/*.spec.ts --testPathIgnorePatterns=.*\\.e2e\\.spec\\.ts$ --detectOpenHandles", "test:e2e": "jest src/*.e2e.spec.ts --detectOpenHandles" @@ -58,16 +66,16 @@ }, "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", "adm-zip": "^0.5.16", "csv-stringify": "^6.5.1" }, "peerDependencies": { - "@flatfile/api": "^1.9.15", - "@flatfile/listener": "^1.0.5" + "@flatfile/api": "^1.9.19", + "@flatfile/listener": "^1.1.0" }, "devDependencies": { - "@flatfile/bundler-config-rollup": "^0.2.0" + "@flatfile/bundler-config-tsup": "^0.1.0" } } diff --git a/export/delimited-zip/rollup.config.mjs b/export/delimited-zip/rollup.config.mjs deleted file mode 100644 index 0a8398c60..000000000 --- a/export/delimited-zip/rollup.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { buildConfig } from '@flatfile/bundler-config-rollup' - -const config = buildConfig({}) - -export default config diff --git a/export/delimited-zip/tsup.config.mjs b/export/delimited-zip/tsup.config.mjs new file mode 100644 index 000000000..bd6420831 --- /dev/null +++ b/export/delimited-zip/tsup.config.mjs @@ -0,0 +1,3 @@ +import { defineConfig } from '@flatfile/bundler-config-tsup' + +export default defineConfig({}) diff --git a/package-lock.json b/package-lock.json index 258cb38c2..e3556a92e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -212,28 +212,13 @@ "version": "0.0.0", "license": "ISC", "dependencies": { - "@flatfile/plugin-job-handler": "^0.6.1", - "@flatfile/util-common": "^1.4.1", + "@flatfile/plugin-job-handler": "^0.7.0", + "@flatfile/util-common": "^1.5.0", "adm-zip": "^0.5.16", "csv-stringify": "^6.5.1" }, "devDependencies": { - "@flatfile/bundler-config-rollup": "^0.2.0" - }, - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "@flatfile/api": "^1.9.15", - "@flatfile/listener": "^1.0.5" - } - }, - "export/delimited-zip/node_modules/@flatfile/plugin-job-handler": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@flatfile/plugin-job-handler/-/plugin-job-handler-0.6.1.tgz", - "integrity": "sha512-zV04ytHudau/nLjm0oNC4v9LQmSsx5ZcxAKyrpsDQtQ1CFeiv5gUp67WmEvLNBne8vQ+D7ISCnuz4nD8dRgIhw==", - "dependencies": { - "@flatfile/util-common": "^1.4.1" + "@flatfile/bundler-config-tsup": "^0.1.0" }, "engines": { "node": ">= 16" From 20d73b03b1804d046418820f57ad60598d0b28ee Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Wed, 30 Oct 2024 12:16:14 -0500 Subject: [PATCH 03/13] exclude browser build --- export/delimited-zip/src/export.delimited.zip.plugin.ts | 4 ++-- export/delimited-zip/tsup.config.mjs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts index d1377936d..6c70c1750 100644 --- a/export/delimited-zip/src/export.delimited.zip.plugin.ts +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -5,7 +5,7 @@ import { processRecords } from '@flatfile/util-common' import AdmZip from 'adm-zip' import { stringify } from 'csv-stringify/sync' import fs from 'fs' -import os from 'os' +import { tmpdir } from 'os' import path from 'path' const api = new FlatfileClient() @@ -37,7 +37,7 @@ export function exportDelimitedZip(options: PluginOptions) { const dateTime = new Date().toISOString().replace(/[:.]/g, '-') // Get the path to the system's temporary directory - const tempDir = os.tmpdir() + const tempDir = tmpdir() // Create a new directory in the system's temporary directory for the delimited files const dir = path.join(tempDir, `${workbook.name}_${dateTime}`) diff --git a/export/delimited-zip/tsup.config.mjs b/export/delimited-zip/tsup.config.mjs index bd6420831..2070a0891 100644 --- a/export/delimited-zip/tsup.config.mjs +++ b/export/delimited-zip/tsup.config.mjs @@ -1,3 +1,3 @@ import { defineConfig } from '@flatfile/bundler-config-tsup' -export default defineConfig({}) +export default defineConfig({ includeBrowser: false }) From ee4aeb9002a70888f8f811818c7c7e549c370e55 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Wed, 30 Oct 2024 12:42:40 -0500 Subject: [PATCH 04/13] guardrail for empty sheets --- .../src/export.delimited.zip.plugin.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts index 6c70c1750..2cf7988b6 100644 --- a/export/delimited-zip/src/export.delimited.zip.plugin.ts +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -62,18 +62,19 @@ export function exportDelimitedZip(options: PluginOptions) { } const { - data: { records: records }, - } = await api.records.get(sheet.id, { - pageSize: 1, - }) + data: { + config: { fields }, + }, + } = await api.sheets.get(sheet.id) - const header = Object.keys(records[0].values) + const header = fields.map((field) => field.key) + const headerLabels = fields.map((field) => field.label) const fileName = `${trimmedSheetName}.${options.fileExtension}` const filePath = `${dir}/${fileName}` // Write header only once before processing records - const headerContent = stringify([header], { + const headerContent = stringify([headerLabels], { delimiter: options.delimiter, }) fs.writeFileSync(filePath, headerContent) From 168d43aac1216338a7295610a4dc36152e0fde11 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Wed, 30 Oct 2024 12:49:18 -0500 Subject: [PATCH 05/13] simplify --- .../src/export.delimited.zip.plugin.ts | 290 +++++++++--------- 1 file changed, 141 insertions(+), 149 deletions(-) diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts index 2cf7988b6..61592408d 100644 --- a/export/delimited-zip/src/export.delimited.zip.plugin.ts +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -1,5 +1,4 @@ import { FlatfileClient } from '@flatfile/api' -import type { FlatfileListener } from '@flatfile/listener' import { jobHandler } from '@flatfile/plugin-job-handler' import { processRecords } from '@flatfile/util-common' import AdmZip from 'adm-zip' @@ -18,186 +17,179 @@ export interface PluginOptions { } export function exportDelimitedZip(options: PluginOptions) { - return (listener: FlatfileListener) => { - listener.use( - jobHandler(`workbook:${options.job}`, async (event, tick) => { - const { workbookId, spaceId, environmentId } = event.context + return jobHandler(`workbook:${options.job}`, async (event, tick) => { + const { workbookId, spaceId, environmentId } = event.context - try { - const { data: workbook } = await api.workbooks.get(workbookId) + try { + const { data: workbook } = await api.workbooks.get(workbookId) - await tick(1, `Starting ${workbook.name} export`) + await tick(1, `Starting ${workbook.name} export`) - const { data: sheets } = await api.sheets.list({ workbookId }) - if (options.debug) { - console.log('Sheets retrieved:', sheets) - } + const { data: sheets } = await api.sheets.list({ workbookId }) + if (options.debug) { + console.log('Sheets retrieved:', sheets) + } - // Get current date-time - const dateTime = new Date().toISOString().replace(/[:.]/g, '-') + // Get current date-time + const dateTime = new Date().toISOString().replace(/[:.]/g, '-') - // Get the path to the system's temporary directory - const tempDir = tmpdir() + // Get the path to the system's temporary directory + const tempDir = tmpdir() - // Create a new directory in the system's temporary directory for the delimited files - const dir = path.join(tempDir, `${workbook.name}_${dateTime}`) - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir) - } + // Create a new directory in the system's temporary directory for the delimited files + const dir = path.join(tempDir, `${workbook.name}_${dateTime}`) + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir) + } - if (options.debug) { - console.log(`Creating zip file in ${dir}`) - } + if (options.debug) { + console.log(`Creating zip file in ${dir}`) + } - const zipFile = new AdmZip() + const zipFile = new AdmZip() - // For each sheet, create a delimited file and populate it with data - const totalSheets = sheets.length - for (const [index, sheet] of sheets.entries()) { - // Limit sheet name to 31 characters - const trimmedSheetName = sheet.name.substring(0, 31) + // For each sheet, create a delimited file and populate it with data + const totalSheets = sheets.length + for (const [index, sheet] of sheets.entries()) { + // Limit sheet name to 31 characters + const trimmedSheetName = sheet.name.substring(0, 31) - if (options.debug) { - console.log(`Processing sheet ${trimmedSheetName}`) - } + if (options.debug) { + console.log(`Processing sheet ${trimmedSheetName}`) + } + + const { + data: { + config: { fields }, + }, + } = await api.sheets.get(sheet.id) - const { - data: { - config: { fields }, - }, - } = await api.sheets.get(sheet.id) + const header = fields.map((field) => field.key) + const headerLabels = fields.map((field) => field.label) - const header = fields.map((field) => field.key) - const headerLabels = fields.map((field) => field.label) + const fileName = `${trimmedSheetName}.${options.fileExtension}` + const filePath = `${dir}/${fileName}` - const fileName = `${trimmedSheetName}.${options.fileExtension}` - const filePath = `${dir}/${fileName}` + // Write header only once before processing records + const headerContent = stringify([headerLabels], { + delimiter: options.delimiter, + }) + fs.writeFileSync(filePath, headerContent) - // Write header only once before processing records - const headerContent = stringify([headerLabels], { + if (options.debug) { + console.log(`Writing header to ${filePath}`) + } + + await processRecords( + sheet.id, + async (records, pageNumber, totalPageCount) => { + const rows = records.map((record) => + header.map((key) => record.values[key].value) + ) + + const csvContent = stringify(rows, { delimiter: options.delimiter, }) - fs.writeFileSync(filePath, headerContent) + + // Append the new records to the existing file + fs.appendFileSync(filePath, csvContent) if (options.debug) { - console.log(`Writing header to ${filePath}`) + console.log( + `Writing ${records.length} records to ${filePath} (page ${pageNumber} of ${totalPageCount})` + ) } - await processRecords( - sheet.id, - async (records, pageNumber, totalPageCount) => { - const rows = records.map((record) => - header.map((key) => record.values[key].value) - ) - - const csvContent = stringify(rows, { - delimiter: options.delimiter, - }) - - // Append the new records to the existing file - fs.appendFileSync(filePath, csvContent) - - if (options.debug) { - console.log( - `Writing ${records.length} records to ${filePath} (page ${pageNumber} of ${totalPageCount})` - ) - } - - // Calculate progress percentage - const sheetProgress = (pageNumber + 1) / totalPageCount - const sheetWeight = 1 / totalSheets - const progress = Math.round( - (index / totalSheets + sheetProgress * sheetWeight) * 80 + 10 - ) - - // Acknowledge job progress - await tick( - progress, - `Processed page ${pageNumber + 1} of ${trimmedSheetName}.${options.fileExtension}` - ) - }, - { - pageSize: 5, - } + // Calculate progress percentage + const sheetProgress = (pageNumber + 1) / totalPageCount + const sheetWeight = 1 / totalSheets + const progress = Math.round( + (index / totalSheets + sheetProgress * sheetWeight) * 80 + 10 ) - zipFile.addFile(fileName, fs.readFileSync(filePath)) - } - - if (options.debug) { - console.log( - `Data written to ${options.fileExtension.toUpperCase()} files` + // Acknowledge job progress + await tick( + progress, + `Processed page ${pageNumber + 1} of ${trimmedSheetName}.${options.fileExtension}` ) + }, + { + pageSize: 5, } + ) - const zipFileName = `${workbook.name}_${dateTime}.zip` - const zipFilePath = path.join(tempDir, zipFileName) + zipFile.addFile(fileName, fs.readFileSync(filePath)) + } - zipFile.writeZip(zipFilePath) + if (options.debug) { + console.log( + `Data written to ${options.fileExtension.toUpperCase()} files` + ) + } - if (options.debug) { - console.log(`Zipped file: ${zipFilePath}`) - } + const zipFileName = `${workbook.name}_${dateTime}.zip` + const zipFilePath = path.join(tempDir, zipFileName) - const { data: file } = await api.files.upload( - fs.createReadStream(zipFilePath), - { - spaceId, - environmentId, - mode: 'export', - } - ) - - // Cleanup temporary files - for (const sheet of workbook.sheets) { - const trimmedSheetName = sheet.name.substring(0, 31) - const fileName = `${trimmedSheetName}.${options.fileExtension}` - const filePath = path.join(dir, fileName) - - try { - await fs.promises.unlink(filePath) - if (options.debug) { - console.log(`Deleted temporary file: ${filePath}`) - } - } catch (error) { - console.warn( - `Failed to delete temporary file: ${filePath}`, - error - ) - } - } + zipFile.writeZip(zipFilePath) - try { - await fs.promises.unlink(zipFilePath) - if (options.debug) { - console.log(`Deleted temporary ZIP file: ${zipFilePath}`) - } - } catch (error) { - console.warn( - `Failed to delete temporary ZIP file: ${zipFilePath}`, - error - ) - } + if (options.debug) { + console.log(`Zipped file: ${zipFilePath}`) + } - return { - outcome: { - message: `Data was exported to ${zipFileName}.`, - next: { - type: 'files', - files: [{ fileId: file.id }], - }, - }, - } - } catch (error) { + const { data: file } = await api.files.upload( + fs.createReadStream(zipFilePath), + { + spaceId, + environmentId, + mode: 'export', + } + ) + + // Cleanup temporary files + for (const sheet of workbook.sheets) { + const trimmedSheetName = sheet.name.substring(0, 31) + const fileName = `${trimmedSheetName}.${options.fileExtension}` + const filePath = path.join(dir, fileName) + + try { + await fs.promises.unlink(filePath) if (options.debug) { - console.error(error) + console.log(`Deleted temporary file: ${filePath}`) } + } catch (error) { + console.warn(`Failed to delete temporary file: ${filePath}`, error) + } + } - throw new Error( - `This job failed probably because it couldn't write to the ${options.fileExtension.toUpperCase()} files, compress them into a ZIP file, or upload it.` - ) + try { + await fs.promises.unlink(zipFilePath) + if (options.debug) { + console.log(`Deleted temporary ZIP file: ${zipFilePath}`) } - }) - ) - } + } catch (error) { + console.warn( + `Failed to delete temporary ZIP file: ${zipFilePath}`, + error + ) + } + + return { + outcome: { + message: `Data was exported to ${zipFileName}.`, + next: { + type: 'files', + files: [{ fileId: file.id }], + }, + }, + } + } catch (error) { + if (options.debug) { + console.error(error) + } + + throw new Error( + `This job failed probably because it couldn't write to the ${options.fileExtension.toUpperCase()} files, compress them into a ZIP file, or upload it.` + ) + } + }) } From fb0ab32bcd73ceff16c0c670f734cc67a7cfe502 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 10:37:11 -0500 Subject: [PATCH 06/13] add server-side note --- plugins/rollout/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/rollout/README.md b/plugins/rollout/README.md index 4737e69b2..522f25e3b 100644 --- a/plugins/rollout/README.md +++ b/plugins/rollout/README.md @@ -14,6 +14,8 @@ This plugin listens for new agent deployments and automatically applies schema c +> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/docs/orchestration/listeners#listener-types) + ## Parameters From d8c4b4cf5b54dcdc79e59410f66d69c79b055f2e Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 10:37:37 -0500 Subject: [PATCH 07/13] update rollup config to be UMD-first --- bundlers/rollup-config/index.mjs | 12 ++++++++---- plugins/record-hook/rollup.config.mjs | 4 ---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bundlers/rollup-config/index.mjs b/bundlers/rollup-config/index.mjs index 1e7ef2682..a5789812f 100644 --- a/bundlers/rollup-config/index.mjs +++ b/bundlers/rollup-config/index.mjs @@ -35,12 +35,16 @@ function commonPlugins(browser, umd = false) { export function buildConfig({ external = [], - includeNode = true, - includeBrowser = true, - includeDefinition = true, - includeUmd = false, + includeNode = false, + includeBrowser = false, + includeDefinition = false, + includeUmd = true, umdConfig = { name: undefined, external: [] }, }) { + if (includeUmd && !umdConfig.name) { + throw new Error('umdConfig.name is required when includeUmd is true') + } + return [ // Node.js build ...(includeNode diff --git a/plugins/record-hook/rollup.config.mjs b/plugins/record-hook/rollup.config.mjs index 6752abbae..fad46f24d 100644 --- a/plugins/record-hook/rollup.config.mjs +++ b/plugins/record-hook/rollup.config.mjs @@ -8,10 +8,6 @@ const umdExternals = [ ] const config = buildConfig({ - includeNode: false, - includeBrowser: false, - includeDefinitions: false, - includeUmd: true, umdConfig: { name: 'PluginRecordHook', external: umdExternals }, }) From 86fd03c829b4d4e20fc000cdc55a60b85515b838 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 10:44:15 -0500 Subject: [PATCH 08/13] Add changeset --- .changeset/lemon-bears-drive.md | 11 +++++++++++ package-lock.json | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 .changeset/lemon-bears-drive.md diff --git a/.changeset/lemon-bears-drive.md b/.changeset/lemon-bears-drive.md new file mode 100644 index 000000000..7283b47f0 --- /dev/null +++ b/.changeset/lemon-bears-drive.md @@ -0,0 +1,11 @@ +--- +'@flatfile/bundler-config-rollup': minor +'@flatfile/plugin-export-delimited-zip': minor +'@flatfile/plugin-record-hook': minor +'@flatfile/plugin-export-pivot-table': minor +'@flatfile/plugin-rollout': minor +--- + +This release introduces the @flatfile/plugin-export-delimited-zip plugin. This plugin runs on a Workbook-level action to export the Workbook's Sheets as CSV files in a Zip file and uploaded back to Flatfile. + +Additionally, this PR updates some documentation. diff --git a/package-lock.json b/package-lock.json index e3556a92e..0962cd029 100644 --- a/package-lock.json +++ b/package-lock.json @@ -230,7 +230,7 @@ }, "export/pivot-table": { "name": "@flatfile/plugin-export-pivot-table", - "version": "0.2.0", + "version": "0.2.1", "license": "ISC", "dependencies": { "@flatfile/api": "^1.9.15" @@ -17190,10 +17190,10 @@ }, "plugins/delimiter-extractor": { "name": "@flatfile/plugin-delimiter-extractor", - "version": "2.3.0", + "version": "2.3.1", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.2.0", + "@flatfile/util-extractor": "^2.2.1", "papaparse": "^5.4.1", "remeda": "^1.14.0" }, @@ -17320,7 +17320,7 @@ }, "plugins/json-schema": { "name": "@flatfile/plugin-convert-json-schema", - "version": "0.5.0", + "version": "0.5.1", "license": "ISC", "dependencies": { "@flatfile/plugin-space-configure": "^0.7.0", @@ -17466,7 +17466,7 @@ }, "plugins/rollout": { "name": "@flatfile/plugin-rollout", - "version": "1.2.0", + "version": "1.2.1", "license": "ISC", "dependencies": { "@flatfile/plugin-job-handler": "^0.7.0", @@ -17602,10 +17602,10 @@ }, "plugins/xlsx-extractor": { "name": "@flatfile/plugin-xlsx-extractor", - "version": "3.3.0", + "version": "3.3.1", "license": "ISC", "dependencies": { - "@flatfile/util-extractor": "^2.2.0", + "@flatfile/util-extractor": "^2.2.1", "remeda": "^1.14.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" }, @@ -17736,7 +17736,7 @@ }, "utils/extractor": { "name": "@flatfile/util-extractor", - "version": "2.2.0", + "version": "2.2.1", "license": "ISC", "dependencies": { "@flatfile/util-common": "^1.5.0", From b4c5b7e32c6f64912d5e1f31e8b34ffe9bb1a139 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 10:47:05 -0500 Subject: [PATCH 09/13] Update export/delimited-zip/README.MD Co-authored-by: Alex Rock --- export/delimited-zip/README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/export/delimited-zip/README.MD b/export/delimited-zip/README.MD index e4680671f..f9cf502eb 100644 --- a/export/delimited-zip/README.MD +++ b/export/delimited-zip/README.MD @@ -49,7 +49,7 @@ npm install @flatfile/plugin-export-delimited-zip **listener.ts** ```typescript import type { FlatfileListener } from '@flatfile/listener' -import exportDelimitedZip from '@flatfile/plugin-export-delimited-zip' +import { exportDelimitedZip } from '@flatfile/plugin-export-delimited-zip' export default function (listener: FlatfileListener) { listener.use(exportDelimitedZip({ From f835bd33b75ea4ed1feb7a56c05c13298cc72307 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 11:05:28 -0500 Subject: [PATCH 10/13] add name sanitation --- .../src/export.delimited.zip.plugin.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts index 61592408d..c42cc0c9a 100644 --- a/export/delimited-zip/src/export.delimited.zip.plugin.ts +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -36,8 +36,14 @@ export function exportDelimitedZip(options: PluginOptions) { // Get the path to the system's temporary directory const tempDir = tmpdir() + const sanitizeFileName = (name: string) => + path.basename( + name.replace(/[<>:"/\\|?*\x00-\x1F]/g, '').replace(/\s+/g, '_') + ) + const sanitizedWorkbookName = sanitizeFileName(workbook.name) + // Create a new directory in the system's temporary directory for the delimited files - const dir = path.join(tempDir, `${workbook.name}_${dateTime}`) + const dir = path.join(tempDir, `${sanitizedWorkbookName}_${dateTime}`) if (!fs.existsSync(dir)) { fs.mkdirSync(dir) } @@ -52,7 +58,7 @@ export function exportDelimitedZip(options: PluginOptions) { const totalSheets = sheets.length for (const [index, sheet] of sheets.entries()) { // Limit sheet name to 31 characters - const trimmedSheetName = sheet.name.substring(0, 31) + const trimmedSheetName = sanitizeFileName(sheet.name).substring(0, 31) if (options.debug) { console.log(`Processing sheet ${trimmedSheetName}`) @@ -127,7 +133,7 @@ export function exportDelimitedZip(options: PluginOptions) { ) } - const zipFileName = `${workbook.name}_${dateTime}.zip` + const zipFileName = `${sanitizedWorkbookName}_${dateTime}.zip` const zipFilePath = path.join(tempDir, zipFileName) zipFile.writeZip(zipFilePath) @@ -147,7 +153,7 @@ export function exportDelimitedZip(options: PluginOptions) { // Cleanup temporary files for (const sheet of workbook.sheets) { - const trimmedSheetName = sheet.name.substring(0, 31) + const trimmedSheetName = sanitizeFileName(sheet.name).substring(0, 31) const fileName = `${trimmedSheetName}.${options.fileExtension}` const filePath = path.join(dir, fileName) From 0a48ce4979a5b5c4e0053e55c3ea7670d325ae50 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 11:07:23 -0500 Subject: [PATCH 11/13] update orchestration url --- plugins/dedupe/README.md | 2 +- plugins/delimiter-extractor/README.md | 2 +- plugins/export-workbook/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/dedupe/README.md b/plugins/dedupe/README.md index b6654f779..9e859bcfe 100644 --- a/plugins/dedupe/README.md +++ b/plugins/dedupe/README.md @@ -8,7 +8,7 @@ This plugin dedupes records in a Sheet via a Sheet-level action. -> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/orchestration/listeners#listener-types) +> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/docs/orchestration/listeners#listener-types) ## Parameters diff --git a/plugins/delimiter-extractor/README.md b/plugins/delimiter-extractor/README.md index 3cfd26e75..3e704953c 100644 --- a/plugins/delimiter-extractor/README.md +++ b/plugins/delimiter-extractor/README.md @@ -12,7 +12,7 @@ The `@flatfile/plugin-delimiter-extractor` package is a plugin for parsing delim -> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/deocs/orchestration/listeners#listener-types) +> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/docs/orchestration/listeners#listener-types) ## Parameters diff --git a/plugins/export-workbook/README.md b/plugins/export-workbook/README.md index ba6ebc9df..455fe3c7c 100644 --- a/plugins/export-workbook/README.md +++ b/plugins/export-workbook/README.md @@ -11,7 +11,7 @@ The `@flatfile/plugin-export-workbook` plugin exports data in a Flatfile Workboo -> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](https://flatfile.com/docs/orchestration/listeners#listener-types) +> When embedding Flatfile, this plugin should be deployed in a server-side listener. [Learn more](/docs/orchestration/listeners#listener-types) ## Parameters From 0b8553535d3f760b76461905f71c96a6c5e868fe Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 11:08:42 -0500 Subject: [PATCH 12/13] Update lemon-bears-drive.md --- .changeset/lemon-bears-drive.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.changeset/lemon-bears-drive.md b/.changeset/lemon-bears-drive.md index 7283b47f0..8bcf2936a 100644 --- a/.changeset/lemon-bears-drive.md +++ b/.changeset/lemon-bears-drive.md @@ -1,9 +1,12 @@ --- +'@flatfile/plugin-delimiter-extractor': minor +'@flatfile/plugin-export-workbook': minor '@flatfile/bundler-config-rollup': minor '@flatfile/plugin-export-delimited-zip': minor '@flatfile/plugin-record-hook': minor '@flatfile/plugin-export-pivot-table': minor '@flatfile/plugin-rollout': minor +'@flatfile/plugin-dedupe': minor --- This release introduces the @flatfile/plugin-export-delimited-zip plugin. This plugin runs on a Workbook-level action to export the Workbook's Sheets as CSV files in a Zip file and uploaded back to Flatfile. From 7c3604e1c3b803a0921eda1c18d0278d63ce06cb Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Thu, 31 Oct 2024 11:35:31 -0500 Subject: [PATCH 13/13] Update export.delimited.zip.plugin.ts --- export/delimited-zip/src/export.delimited.zip.plugin.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/export/delimited-zip/src/export.delimited.zip.plugin.ts b/export/delimited-zip/src/export.delimited.zip.plugin.ts index c42cc0c9a..ee086acc1 100644 --- a/export/delimited-zip/src/export.delimited.zip.plugin.ts +++ b/export/delimited-zip/src/export.delimited.zip.plugin.ts @@ -37,9 +37,7 @@ export function exportDelimitedZip(options: PluginOptions) { const tempDir = tmpdir() const sanitizeFileName = (name: string) => - path.basename( - name.replace(/[<>:"/\\|?*\x00-\x1F]/g, '').replace(/\s+/g, '_') - ) + path.basename(name.replace(/[<>:"/\\|?*]/g, '').replace(/\s+/g, '_')) const sanitizedWorkbookName = sanitizeFileName(workbook.name) // Create a new directory in the system's temporary directory for the delimited files