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 🙏

© 2026 – Pkg Stats / Ryan Hefner

nextstring

v1.3.0

Published

nextstring is a powerful TypeScript library that extends the native `String` prototype with AI-driven capabilities. Perform advanced operations on strings — extract data, answer questions, summarize, translate, classify, score, mask sensitive data, and mo

Downloads

119

Readme

nextstring

nextstring is a powerful TypeScript library that extends the native String prototype with AI-driven capabilities. Perform advanced operations on strings — extract data, answer questions, summarize, translate, classify, score, mask sensitive data, and more — all powered by a configurable AI provider.

Features

| Method | Description | |--------|-------------| | extractData(items) | Extract structured data from text with optional type parsing | | question(q) | Answer questions using the string as context | | summarise(words) | Summarize text to a target word count | | checkIf(condition) | Evaluate a condition against the string's content | | translate(language) | Translate text to a target language | | rewrite(instructions) | Rewrite text following specific instructions | | classifyText(categories) | Classify text into predefined categories | | fill(context) | Fill {{placeholder}} templates using AI-inferred values | | generate(instructions?) | Use the string as a prompt to generate content | | score(rubrics) | Score text against rubrics, returns numeric scores | | mask(rules) | Partially mask sensitive data (emails, phones, SSNs, etc.) | | detectLanguage() | Detect the language of the given text |

All methods accept an optional { model: string } options object as the last parameter to override the default model per call.

Installation

npm install nextstring

Quick Start

1. Initialize with a provider

import { initialise, OpenaiProvider } from "nextstring";

// OpenAI
const provider = new OpenaiProvider({ apiKey: "sk-..." });
initialise(provider);

// or Gemini
import { GeminiProvider } from "nextstring";
const provider = new GeminiProvider({ apiKey: "AI..." });
initialise(provider);

// or Claude
import { ClaudeProvider } from "nextstring";
const provider = new ClaudeProvider({ apiKey: "sk-ant-..." });
initialise(provider);

2. Use AI methods on any string

const answer = await "The Eiffel Tower is in Paris.".question("Where is the Eiffel Tower?");
// "Paris"

Providers

| Provider | Default Model | Import | |----------|--------------|--------| | OpenAI | gpt-4o-mini | OpenaiProvider | | Google Gemini | gemini-2.5-flash | GeminiProvider | | Anthropic Claude | claude-sonnet-4-20250514 | ClaudeProvider |

Each provider accepts a globalPrompt parameter to prepend instructions to every request.

const provider = new OpenaiProvider(
  { apiKey: "sk-..." },
  "gpt-4o",           // model
  "Always be concise"  // globalPrompt
);

Examples

Extract Data

Extract structured fields with optional type parsing via parse:

const text = "John is 30, email: [email protected]";
const result = await text.extractData([
  { name: "email", description: "Email address" },
  { name: "age", description: "Age", parse: Number },
]);
// { email: "[email protected]", age: 30 }
// result.email → string, result.age → number (inferred from parse)

Summarize

const summary = await "A very long article about climate change...".summarise(20);

Check Conditions

const isSunny = await "The weather today is sunny and warm.".checkIf("Is it sunny?");
// true

Translate

const spanish = await "Hello, how are you?".translate("spanish");
// "Hola, ¿cómo estás?"

Rewrite

const formal = await "hey whats up".rewrite("Make it formal");
// "Hello, how are you doing?"

Classify Text

const category = await "My app keeps crashing".classifyText([
  { name: "support", description: "Technical support issues" },
  { name: "sales", description: "Sales inquiries" },
]);
// "support"

Fill Templates

const filled = await "Dear {{name}}, your order {{orderId}} is {{status}}.".fill({
  name: "Alice",
  order: { id: "ORD-123", shipped: true },
});
// "Dear Alice, your order ORD-123 is shipped."

Generate Content

const content = await "a product description for running shoes".generate();

const email = await "a professional email declining a meeting".generate(
  "Keep it under 50 words"
);

Score Text

Score text against custom rubrics (returns 0-10 for each):

const scores = await "The quick brown fox jumps over the lazy dog.".score([
  { id: "grammar", name: "Grammar", description: "Correct grammar and punctuation" },
  { id: "clarity", name: "Clarity", description: "Clear and easy to understand" },
]);
// { grammar: 9, clarity: 8 }

Mask Sensitive Data

Partially redact sensitive information while preserving format:

const masked = await "Contact [email protected] or call 555-123-4567".mask(["email", "phone"]);
// "Contact j***@e******.com or call ***-***-4567"

const masked2 = await "SSN: 123-45-6789".mask(["ssn"]);
// "SSN: ***-**-6789"

Detect Language

const lang = await "Bonjour le monde".detectLanguage();
// "French"

const lang2 = await "こんにちは世界".detectLanguage();
// "Japanese"

Per-Call Model Override

Any method accepts an optional model override as the last argument:

const answer = await "some text".question("What is this?", { model: "gpt-4o" });
const summary = await "long text".summarise(10, { model: "claude-sonnet-4-20250514" });

Full Scenario: AI-Powered Customer Support

const message = "Bonjour, je suis Alice. La commande #12345 doit être remboursée. Mon email est [email protected]";

// Detect language for routing
const language = await message.detectLanguage();
// "French"

// Extract structured data
const data = await message.extractData([
  { name: "name", description: "Customer name" },
  { name: "orderID", description: "Order ID" },
  { name: "email", description: "Email address" },
]);
// { name: "Alice", orderID: "12345", email: "[email protected]" }

// Translate to English for internal processing
const english = await message.translate("english");
// "Hello, I'm Alice. Order #12345 needs a refund. My email is [email protected]"

// Understand intent
const intent = await english.classifyText([
  { name: "refund", description: "Refund requests" },
  { name: "tracking", description: "Order tracking" },
  { name: "general", description: "General inquiries" },
]);
// "refund"

// Mask PII for logging
const safe = await english.mask(["email", "name"]);
// "Hello, I'm [NAME]. Order #12345 needs a refund. My email is a****@t***.com"

// Generate a reply and translate back to the customer's language
const reply = await "a polite refund confirmation for order #12345".generate();
const localizedReply = await reply.translate(language);

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the MIT License.