
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
i45-sample-data
Advanced tools
A collection of sample datasets to be used for testing and development.
A library of sample datasets that can be used during testing and development. Fully typed with TypeScript definitions included.
npm i i45-sample-data --save-dev
The package is optimized for tree-shaking to minimize your production bundle:
// ⚠️ Full import - bundles all datasets (~40-50KB minified)
import { SampleData } from "i45-sample-data";
// ✅ Tree-shakeable - only bundles what you use (~2-10KB each)
import { Books } from "i45-sample-data/collections";
import { Astronomy } from "i45-sample-data/lists";
import { DataHelpers } from "i45-sample-data/helpers";
Tips for minimal bundle size:
/collections, /lists, etc.) instead of the main entry pointPackage marked with sideEffects: false for optimal tree-shaking with modern bundlers (webpack, Rollup, Vite, esbuild).
import { SampleData } from "i45-sample-data";
// Lists - Simple string arrays
console.log("Astronomy", SampleData.Lists.Astronomy);
console.log("States", SampleData.Lists.States);
// Dictionaries - Key-value pairs
console.log("States", SampleData.Dictionaries.States);
console.log("Countries", SampleData.Dictionaries.Countries);
// Collections - Arrays of objects
console.log("Books", SampleData.Collections.Books);
console.log("Students", SampleData.Collections.Students);
console.log("Countries", SampleData.Collections.Countries);
console.log("TriviaQuestions", SampleData.Collections.TriviaQuestions);
console.log("Albums", SampleData.Collections.Albums);
console.log("Songs", SampleData.Collections.Songs);
console.log("Players", SampleData.Collections.Players);
console.log("Recipes", SampleData.Collections.Recipes);
console.log("States", SampleData.Collections.States);
console.log("DailyWeather", SampleData.Collections.DailyWeather);
// Objects - Structured data
console.log("KeyCodes", SampleData.Objects.KeyCodes);
console.log("States", SampleData.Objects.States);
console.log("Movies", SampleData.Objects.Movies);
Import only the datasets you need to minimize your bundle size:
// Import specific collections
import { Books, TriviaQuestions, Students } from "i45-sample-data/collections";
// Import specific lists
import { Astronomy, States } from "i45-sample-data/lists";
// Import specific dictionaries
import { Countries } from "i45-sample-data/dictionaries";
// Import specific objects
import { KeyCodes, Movies } from "i45-sample-data/objects";
console.log("Books:", Books);
console.log("Astronomy:", Astronomy);
import { Books, type Book } from "i45-sample-data/collections";
import { Astronomy } from "i45-sample-data/lists";
// Type-safe access with minimal bundle size
const books: Book[] = Books;
const astronomyTerms: string[] = Astronomy;
console.log(books[0].title);
import { SampleData } from "i45-sample-data";
// Lists - Simple string arrays
console.log("Astronomy", SampleData.Lists.Astronomy);
console.log("States", SampleData.Lists.States);
// Dictionaries - Key-value pairs
console.log("States", SampleData.Dictionaries.States);
console.log("Countries", SampleData.Dictionaries.Countries);
// Collections - Arrays of objects
console.log("Books", SampleData.Collections.Books);
console.log("Students", SampleData.Collections.Students);
console.log("Countries", SampleData.Collections.Countries);
console.log("TriviaQuestions", SampleData.Collections.TriviaQuestions);
console.log("Albums", SampleData.Collections.Albums);
console.log("Songs", SampleData.Collections.Songs);
console.log("Players", SampleData.Collections.Players);
console.log("Recipes", SampleData.Collections.Recipes);
console.log("States", SampleData.Collections.States);
console.log("DailyWeather", SampleData.Collections.DailyWeather);
// Objects - Structured data
console.log("KeyCodes", SampleData.Objects.KeyCodes);
console.log("States", SampleData.Objects.States);
console.log("Movies", SampleData.Objects.Movies);
import {
SampleData,
type Book,
type TriviaQuestion,
type Student,
} from "i45-sample-data";
// Type-safe access to data
const books: Book[] = SampleData.Collections.Books;
const firstBook: Book = books[0];
// Intellisense works perfectly
console.log(firstBook.title, firstBook.author, firstBook.isbn);
// Type-safe function parameters
function displayQuestion(question: TriviaQuestion): void {
console.log(`${question.category}: ${question.question}`);
console.log(`Difficulty: ${question.difficulty}`);
}
// Generic fetch with type parameter
type ApiResponse = { data: Student[] };
const result = await SampleData.fetch<ApiResponse>(
"https://api.example.com/students"
);
Convenience methods for working with sample data:
import { SampleData } from "i45-sample-data";
// Get a random book
const randomBook = SampleData.random(SampleData.Collections.Books);
// Get 3 random trivia questions
const questions = SampleData.randomMultiple(
SampleData.Collections.TriviaQuestions,
3
);
// Shuffle the states list
const shuffledStates = SampleData.shuffle(SampleData.Lists.States);
Import DataHelpers for advanced data manipulation utilities:
import { TriviaQuestions } from "i45-sample-data/collections";
import { DataHelpers } from "i45-sample-data/helpers";
// Filter by difficulty
const easyQuestions = DataHelpers.filterBy(
TriviaQuestions,
"difficulty",
"easy"
);
// Search across multiple fields
const science = DataHelpers.search(TriviaQuestions, "science", [
"category",
"question",
]);
// Group by difficulty
const grouped = DataHelpers.groupBy(TriviaQuestions, "difficulty");
// { easy: [...], medium: [...], hard: [...] }
// Paginate results
const page1 = DataHelpers.paginate(TriviaQuestions, 1, 5);
// { data: [...5 items], page: 1, total: 10, hasNext: true, ... }
// Sort by property
const sorted = DataHelpers.sortBy(TriviaQuestions, "difficulty", "asc");
// Get unique values
const difficulties = DataHelpers.unique(TriviaQuestions, "difficulty");
// Extract specific fields
const simplified = DataHelpers.pluck(TriviaQuestions, "question", "difficulty");
Available DataHelper methods:
filterBy() - Filter by property valuesearch() - Search across string fieldsfilterWhere() - Filter with custom functiongroupBy() - Group by propertycountBy() - Count occurrencessortBy() - Sort by propertypaginate() - Paginate with metadataunique() - Get unique valuespluck() - Extract propertiesAll TypeScript interfaces are exported for use in your projects:
Book - ISBN, title, author, publisher detailsTriviaQuestion - Trivia questions with difficulty and categoryAlbum - Music album informationSong - Song metadata with audio featuresPlayer - Soccer player dataRecipe - Cooking recipes with ingredients and instructionsStudent - Student records with gradesState - US state informationCountry - Country data with currency and languageDailyWeather - Weather forecast dataKeyCodes - Keyboard key code mappingsMovie - Movie metadataconsole.log(SampleData.Collections.TriviaQuestions);
// output
[
{
type: "multiple",
difficulty: "easy",
category: "Science & Nature",
question:
"The element involved in making human blood red is which of the following?",
correct_answer: "Iron",
incorrect_answers: ["Copper", "Iridium", "Gold"],
},
{
type: "multiple",
difficulty: "easy",
category: "Entertainment: Video Games",
question:
"How many flagship monsters appear in Monster Hunter Gernerations?",
correct_answer: "4",
incorrect_answers: ["3", "5", "6"],
},
{
type: "multiple",
difficulty: "hard",
category: "Entertainment: Video Games",
question:
"'Gimmick!' is a Japanese Famicom game in the cartridge. What is it called?",
correct_answer: "FME-7",
incorrect_answers: ["VRC6", "VRC7", "MMC5"],
},
{
type: "boolean",
difficulty: "medium",
category: "Animals",
question: "Finnish Lapphund dogs were used for herding reindeer.",
correct_answer: "True",
incorrect_answers: ["False"],
},
];
import "./App.css";
import { SampleData, type TriviaQuestion } from "i45-sample-data";
function App() {
const questions: TriviaQuestion[] = SampleData.Collections.TriviaQuestions;
return (
<>
<div>
{questions.map((question, index) => (
<div id={`q-${index}`} key={index} className="question-div">
<h3>{question.question}</h3>
<p>Category: {question.category}</p>
<p>Difficulty: {question.difficulty}</p>
<p>Type: {question.type}</p>
<p>Correct Answer: {question.correct_answer}</p>
<p>Incorrect Answers: {question.incorrect_answers.join(", ")}</p>
</div>
))}
</div>
</>
);
}
export default App;
The from method makes a get request using the fetch api and returns the results in JSON format.
The apiKey parameter is optional - only provide it if your API requires authentication.
Signature: SampleData.from(uri: string, apiKey?: string): Promise<any>
NOTE: This method makes an HTTP Get request and, if an API key is provided, passes it in the x-api-key request header. To make an HTTP Post request, or to include other headers such as custom content types, see the section API Call with Custom Headers.
import { SampleData } from "i45-sample-data";
// Make an async API call to a public endpoint (no API key needed)
const data = await SampleData.from(
"https://jsonplaceholder.typicode.com/posts"
);
console.log(data);
// Or with an API key for authenticated endpoints
const protectedData = await SampleData.from(
"https://api.example.com/protected",
"YOUR_API_KEY"
);
console.log(protectedData);
options object, and returns a typed Response.
See the Fetch API MDN Web Docs for more information.
import { SampleData } from "i45-sample-data";
// With TypeScript, you can specify the response type
type Post = { id: number; title: string; body: string; userId: number };
const data = await SampleData.fetch<Post[]>(
"https://jsonplaceholder.typicode.com/posts",
{
headers: {
"Content-Type": "application/json",
"x-api-key": "YOUR_API_KEY",
},
}
);
// data is now typed as Post[]
console.log("Data from API", data);
The following deprecated properties are still available but not recommended:
// ⚠️ Deprecated - Use Collections instead
SampleData.JsonData.Books;
// ⚠️ Deprecated - Use Dictionaries instead
SampleData.KeyValueLists.States;
// ✅ Recommended
SampleData.Collections.Books;
SampleData.Dictionaries.States;
ISC
FAQs
A collection of sample datasets to be used for testing and development.
We found that i45-sample-data demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer 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
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.