Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@flatfile/plugin-record-hook
Advanced tools
A plugin for running custom logic on individual data records in Flatfile.
The @flatfile/plugin-record-hook
plugin offers a convenient way to execute
custom logic on individual data records within Flatfile. By setting up an event
listener for the commit:created
event, this plugin seamlessly integrates with
the data processing flow.
Event Type:
listener.on('commit:created')
sheetSlug
- string
The sheetSlug
parameter is the slug of the sheet you want to listen to.
callback
- function
The callback
parameter takes a function that will be run on the record or records.
options.chunkSize
- number
- default: 10_000
- (optional)The chunkSize
parameter allows you to specify the quantity of records to process in each chunk.
options.parallel
- number
- default: 1
- (optional)The parallel
parameter allows you to specify the number of chunks to process in parallel.
npm i @flatfile/plugin-record-hook @flatfile/hooks
import { FlatfileRecord, bulkRecordHook } from "@flatfile/plugin-record-hook";
import { FlatfileEvent, FlatfileListener } from "@flatfile/listener";
import { FlatfileRecord, recordHook } from "@flatfile/plugin-record-hook";
import { FlatfileEvent, FlatfileListener } from "@flatfile/listener";
Pass bulkRecordHook
or recordHook
to a Flatfile data listener and provide a function to run when data is added or updated.
Set up a listener to configure Flatfile and respond to data Events. Then use this plugin to set up a hook that responds to data changes.
bulkRecordHook.js
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
export default async function (listener) {
listener.use(
bulkRecordHook("my-sheet", (records) => {
return records.map((r) => {
//do your work here
return r;
});
})
);
}
recordHook.js
import { recordHook } from "@flatfile/plugin-record-hook";
export default async function (listener) {
listener.use(
recordHook("my-sheet", (record) => {
//do your work here
return record;
})
);
}
bulkRecordHook.ts
import { FlatfileRecord } from "@flatfile/hooks";
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
import { FlatfileListener } from "@flatfile/listener";
export default async function (listener: FlatfileListener) {
listener.use(
bulkRecordHook("my-sheet", (records: FlatfileRecord[]) => {
return records.map((r) => {
//do your work here
return r;
});
})
);
}
recordHook.ts
import { FlatfileRecord } from "@flatfile/hooks";
import { recordHook } from "@flatfile/plugin-record-hook";
import { FlatfileListener } from "@flatfile/listener";
export default async function (listener: FlatfileListener) {
listener.use(
recordHook("my-sheet", (record: FlatfileRecord) => {
//do your work here
return record;
})
);
}
bulkRecordHook
can accept additional properties. Props will be passed along to the transformer.
bulkRecordHook.js
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
export default async function (listener) {
listener.use(
bulkRecordHook("my-sheet", (records) => {
return records.map((r) => {
//do your work here
return r;
});
}),
{ chunkSize: 100, parallel: 2 }
);
}
bulkRecordHook.ts
import { FlatfileRecord } from "@flatfile/hooks";
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
import { FlatfileListener } from "@flatfile/listener";
export default async function (listener: FlatfileListener) {
listener.use(
bulkRecordHook(
"my-sheet",
(records: FlatfileRecord[]) => {
return records.map((r) => {
//do your work here
return r;
});
},
{ chunkSize: 100, parallel: 2 }
)
);
}
chunkSize
number default: 10_000 (optional)Define how many records you want to process in each batch. This allows you to balance efficiency and resource utilization based on your specific use case.
parallel
number default: 1 (optional)Choose whether the records should be processed in parallel. This enables you to optimize the execution time when dealing with large datasets.
This example sets up a record hook using listener.use
to modify records in the "my-sheet" sheet.
in the "my-sheet" sheet.
When a record is processed by the hook, it checks if an email address is missing, empty, or invalid, and if so, it logs corresponding error messages and adds them to a form validation context (if the r object is related to form validation). This helps ensure that only valid email addresses are accepted in the application.
In the bulkRecordHook
example, it passes a chunkSize
of 100 and asks the hooks to run 2 at a time via the parallel
property.
bulkRecordHook.js
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
export default async function (listener) {
listener.use(
bulkRecordHook(
"my-sheet",
(records) => {
return records.map((r) => {
const email = r.get("email") as string;
if (!email) {
console.log("Email is required");
r.addError("email", "Email is required");
}
const validEmailAddress = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (email !== null && !validEmailAddress.test(email)) {
console.log("Invalid email address");
r.addError("email", "Invalid email address");
}
return r;
});
},
{ chunkSize: 100, parallel: 2 }
)
);
}
recordHook.js
import { recordHook } from "@flatfile/plugin-record-hook";
export default async function (listener) {
listener.use(
recordHook(
"my-sheet",
(record) => {
const email = record.get("email") as string;
if (!email) {
console.log("Email is required");
record.addError("email", "Email is required");
}
const validEmailAddress = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (email !== null && !validEmailAddress.test(email)) {
console.log("Invalid email address");
record.addError("email", "Invalid email address");
}
return record;
}
)
);
}
bulkRecordHook.ts
import { FlatfileRecord } from "@flatfile/hooks";
import { bulkRecordHook } from "@flatfile/plugin-record-hook";
import { FlatfileListener } from "@flatfile/listener";
export default async function (listener: FlatfileListener) {
listener.use(
bulkRecordHook(
"contacts",
(records: FlatfileRecord[]) => {
return records.map((r) => {
const email = r.get("email") as string;
if (!email) {
console.log("Email is required");
r.addError("email", "Email is required");
}
const validEmailAddress = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (email !== null && !validEmailAddress.test(email)) {
console.log("Invalid email address");
r.addError("email", "Invalid email address");
}
return r;
});
},
{ chunkSize: 100, parallel: 2 }
)
);
}
recordHook.ts
import { FlatfileRecord } from "@flatfile/hooks";
import { recordHook } from "@flatfile/plugin-record-hook";
import { FlatfileListener } from "@flatfile/listener";
export default async function (listener: FlatfileListener) {
listener.use(
recordHook(
"contacts",
(record: FlatfileRecord) => {
const email = record.get("email") as string;
if (!email) {
console.log("Email is required");
record.addError("email", "Email is required");
}
const validEmailAddress = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (email !== null && !validEmailAddress.test(email)) {
console.log("Invalid email address");
record.addError("email", "Invalid email address");
}
return record;
}
)
);
}
FAQs
A plugin for running custom logic on individual data records in Flatfile.
The npm package @flatfile/plugin-record-hook receives a total of 33,956 weekly downloads. As such, @flatfile/plugin-record-hook popularity was classified as popular.
We found that @flatfile/plugin-record-hook demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 16 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.