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 🙏

© 2024 – Pkg Stats / Ryan Hefner

string-objects

v1.3.0

Published

Simple function that resolves object property accessors found in a given string. Accepts a string and refernce object as arguments.

Downloads

12

Readme

string-objects

Simple function that resolves object property accessors found in a given string. Accepts a string and refernce object as arguments.

Installing

npm install string-objects

Importing

CommonJS

const stringObject = require("string-objects");

ESM

import stringObject from "string-objects";

TypeScript

import stringObject, { type Schema } from "string-objects";

Usage

The stringObject function will attempt to resolve object property accessors found within the provided String that resolve to a String, Number or BigInt, using the provided object as a reference.

const oldString =
  "Hello {user.username}! This package is {package.name}, version {package.version.current}";

const object: Schema = {
  user: {
    username: "user",
  },
  package: {
    name: "string-objects",
    version: {
      current: "1.3.0",
    },
  },
};

const newString = stringObject(oldString, object);

console.log(newString);
// Will output 'Hello user! This package is string-objects, version 1.3.0'

string-objects is also capable of resolving both arrays and maps.

const oldString = "It can index an {array.0} and a {map.key} as well";

const map = new Map().set("key", "map");

const object: Schema = {
  array: ["array"],
  map: map,
};

const newString = stringObject(oldString, object);

console.log(newString);
// Will output 'It can index an array and a map as well'

It can also call functions and resolve the string using the function's return value.

You can declare a function property as callable by appending a colon ":" to the property name. You may also declare parameters which will be pased to the function when called.

Functions

"funcName:" - Represents a function with no parameters

"subtract:first:second" - Represents a function with two parameters

"add:first:rest*" - Represents a function with two or more parameters

By appending an asterisk "*" to the end of the last parameter, your function can accept any number of arguments, as long as it is more than the minimum declared. All arguments passed to a function will be of type String

If an invalid number of arguments are found (too few or too many), the function will not be called, and the string will not be resolved.

const oldString =
  "{noArgs:} | Add: {add:2:3}, {add:1}, {add:1:2:3} | Subtract: {subtract:10:3}, {subtract:1}, {subtract:10:4:2}";

const object: Schema = {
  "add:first:rest*": (...values) => {
    return values.reduce((a, b) => String(Number(a) + Number(b))) ?? 0;
  },
  "subtract:first:second": (first, second) => {
    return Number(first) - Number(second);
  },
  "noArgs:": () => {
    return "No Args";
  },
};

const newString = stringObject(oldString, object);

console.log(newString);
// Will output 'No Args | Add: 5, {add:1}, 6 | Subtract: 7, {subtract:1}, {subtract:10:4:2}'

string-objects can resolve as many nested objects as necessary, however the final property or return value in the chain must be a String, Number or Bigint. If any other type of value is returned at the end of the chain, it will not resolve.