npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

n8n-nodes-dependency-tester

v1.0.0

Published

Test package for debugging n8n community node dependency resolution issues

Readme

 ____  _   _ ____  _____ ____     ____ ___  ____  _____
/ ___|| | | |  _ \| ____|  _ \   / ___/ _ \|  _ \| ____|
\___ \| | | | |_) |  _| | |_) | | |  | | | | | | |  _|
 ___) | |_| |  __/| |___|  _ <  | |__| |_| | |_| | |___
|____/ \___/|_|   |_____|_| \_\  \____\___/|____/|_____|

by Ken Kai

SuperCode for n8n

Look, I got tired of writing the same data transformation logic over and over again in different n8n workflows. So I built this thing.

What it does: Gives you JavaScript and Python execution directly in your n8n workflows, with 30+ libraries already loaded. No more "npm install this, pip install that" - it's all there.

What it's actually useful for: See below. Real examples from real workflows I've built.

Install

npm install @kenkaiii/n8n-nodes-supercode

Or just go to Settings > Community Nodes in your n8n and install @kenkaiii/n8n-nodes-supercode

Real World Use Cases (Why You'd Want This)

1. E-commerce Order Processing

The Problem: You get orders from Shopify/WooCommerce and need to:

  • Calculate complex shipping costs based on weight/dimensions
  • Apply business rules for discounts
  • Format data for your fulfillment system

Before SuperCode: Chain together 15+ nodes with Set nodes, IF nodes, math operations, etc.

With SuperCode:

// One node handles it all
const orders = $input.all();
const processed = orders.map((order) => {
	const items = order.json.line_items;
	const totalWeight = _.sumBy(items, 'weight');
	const shippingCost = calculateShipping(totalWeight, order.json.shipping_address);

	return {
		order_id: order.json.id,
		total_weight: totalWeight,
		shipping_cost: shippingCost,
		fulfillment_priority: totalWeight > 50 ? 'freight' : 'standard',
		formatted_address: formatAddress(order.json.shipping_address),
	};
});

return processed;

2. Customer Data Enrichment

The Problem: You have customer emails and need to:

  • Validate email formats
  • Extract company domains
  • Enrich with additional data
  • Score leads based on multiple factors

With SuperCode:

const customers = $input.all();
const enriched = customers.map((customer) => {
	const email = customer.json.email;
	const domain = email.split('@')[1];
	const isBusinessEmail = !['gmail.com', 'yahoo.com', 'hotmail.com'].includes(domain);

	// Lead scoring logic
	let score = 0;
	if (isBusinessEmail) score += 50;
	if (customer.json.company) score += 30;
	if (customer.json.phone) score += 20;

	return {
		...customer.json,
		domain: domain,
		is_business_email: isBusinessEmail,
		lead_score: score,
		segment: score > 70 ? 'hot' : score > 40 ? 'warm' : 'cold',
	};
});

return enriched;

3. Financial Report Generation

The Problem: You need to pull data from multiple sources (Stripe, QuickBooks, etc.) and create monthly reports with calculations that don't fit into simple n8n math operations.

With SuperCode:

const transactions = $input.all();
const monthlyReport = {
	total_revenue: _.sumBy(transactions, (t) => t.json.amount),
	transaction_count: transactions.length,
	average_transaction: _.meanBy(transactions, (t) => t.json.amount),
	top_customers: _(transactions)
		.groupBy('json.customer_id')
		.map((txns, customerId) => ({
			customer_id: customerId,
			total_spent: _.sumBy(txns, 'json.amount'),
		}))
		.orderBy(['total_spent'], ['desc'])
		.take(10)
		.value(),
	growth_rate: calculateGrowthRate(transactions),
};

return [{ json: monthlyReport }];

4. Inventory Management

The Problem: You need to sync inventory across multiple platforms and apply business rules for reordering.

With SuperCode:

const inventory = $input.all();
const updates = inventory.map((item) => {
	const currentStock = item.json.quantity;
	const salesVelocity = item.json.avg_daily_sales;
	const leadTime = item.json.supplier_lead_time;

	// Calculate reorder point using safety stock formula
	const safetyStock = Math.ceil(salesVelocity * leadTime * 1.5);
	const reorderPoint = safetyStock + salesVelocity * leadTime;

	return {
		sku: item.json.sku,
		current_stock: currentStock,
		reorder_point: reorderPoint,
		needs_reorder: currentStock <= reorderPoint,
		suggested_order_qty: currentStock <= reorderPoint ? Math.ceil(salesVelocity * 30) : 0, // 30 days worth
		stock_status: getStockStatus(currentStock, reorderPoint),
	};
});

return updates;

5. Content Processing & SEO

The Problem: You're managing content across multiple platforms and need to optimize titles, extract keywords, and format for different channels.

With SuperCode:

const articles = $input.all();
const processed = articles.map((article) => {
	const content = article.json.content;
	const title = article.json.title;

	// Extract keywords (simple version)
	const words = content.toLowerCase().split(/\s+/);
	const wordFreq = _.countBy(words.filter((w) => w.length > 4));
	const keywords = _.take(_.orderBy(_.toPairs(wordFreq), 1, 'desc').map(0), 10);

	return {
		id: article.json.id,
		title: title,
		seo_title: title.length > 60 ? title.substring(0, 57) + '...' : title,
		meta_description: content.substring(0, 157) + '...',
		keywords: keywords.join(', '),
		word_count: words.length,
		reading_time: Math.ceil(words.length / 200), // minutes
		twitter_text: truncateForTwitter(title, content),
	};
});

return processed;

What Makes This Different

Pre-loaded Libraries: No installation headaches. I've included the stuff you actually use:

  • lodash for data manipulation
  • dayjs for dates that don't suck
  • axios for HTTP requests
  • crypto for hashing/encryption
  • xlsx for Excel files
  • cheerio for HTML parsing
  • joi for validation
  • And 20+ more

Two Node Types:

  • SuperCode Node: For your regular workflows
  • SuperCode Tool: Optimized for AI agents (Claude, ChatGPT, etc.)

Python Support: Because sometimes JavaScript isn't the right tool:

import pandas as pd
import numpy as np

# Convert n8n data to DataFrame
df = pd.DataFrame([item for item in input_data])

# Do pandas magic
result = df.groupby('category').agg({
    'price': ['mean', 'sum', 'count'],
    'quantity': 'sum'
}).round(2)

return result.to_dict()

Performance & Safety

  • VM Sandboxed: Your code runs safely isolated
  • Lazy Loading: Libraries only load when you use them
  • Memory Efficient: Built-in monitoring and cleanup
  • Error Handling: Doesn't crash your workflows when code fails

Common Patterns

Data Validation:

const validItems = $input.all().filter((item) => {
	const data = item.json;
	return (
		joi
			.object({
				email: joi.string().email().required(),
				age: joi.number().min(18).max(120),
				phone: joi.string().pattern(/^\+?[1-9]\d{1,14}$/),
			})
			.validate(data).error === undefined
	);
});

Batch Processing:

const items = $input.all();
const chunks = _.chunk(items, 100); // Process in batches of 100

return chunks.map((chunk) => ({
	json: {
		batch_size: chunk.length,
		processed_at: dayjs().toISOString(),
		results: chunk.map(processItem),
	},
}));

File Processing:

// Parse CSV data
const csvData = $input.first().json.file_content;
const parsed = papa.parse(csvData, { header: true });

return parsed.data.map((row) => ({ json: row }));

When NOT to Use This

  • Simple transformations (use regular n8n nodes)
  • If you don't know JavaScript/Python
  • When you need real-time performance (this adds some overhead)
  • For workflows that barely process any data

AI Agent Integration

If you're using Claude, ChatGPT, or other AI agents with n8n, the SuperCode Tool node lets them write and execute code directly in your workflows. Pretty neat for dynamic data processing.

Support

Built this for myself, sharing it because others might find it useful. If you find bugs, let me know. If you want features, fork it and build them.

MIT License - do whatever you want with it.

Ken Kai
[email protected]


P.S. - Yeah, I could have built separate nodes for each use case, but where's the fun in that? Sometimes you just want to write some damn code and get on with your day.