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

pptb-universal-search

v1.0.1

Published

A comprehensive search tool for finding records, metadata, and solution components across Dataverse environments using wildcards and specific values.

Readme

Universal Search for Power Platform ToolBox

A comprehensive search tool for Power Platform ToolBox (PPTB) that enables searching across records, metadata, and solution components in Dataverse environments using specific values and wildcard patterns.

License TypeScript React Tests

✨ Features

Core Search Capabilities

  • 🔍 Multi-mode search: Records, metadata, and solution components
  • 🎯 Wildcard support: Use * and ? for flexible pattern matching
  • 📊 Entity selection: Choose specific entities or search across all
  • 🏷️ Picklist integration: Search by option labels and values
  • 🔗 Lookup field support: Deep search across related records
  • ⚙️ Solution filtering: Scope searches to specific solutions

Search Options

  • Case sensitivity: Toggle case-sensitive/insensitive searches
  • Attribute filtering: Include/exclude specific attribute types
  • Relationship search: Navigate through entity relationships
  • Forms & Views: Search across custom forms and view definitions
  • Real-time results: Progressive search with live updates

User Experience

  • 📱 Responsive design: Optimized for different screen sizes
  • 🎨 Theme awareness: Automatic light/dark theme detection
  • ⌨️ Keyboard shortcuts: F11 or Ctrl+Enter for fullscreen
  • 📋 Results export: Copy results or open records directly
  • 🚀 Progress tracking: Real-time search progress with cancellation

🏗️ Architecture

universal-search/
├── src/
│   ├── components/          # React UI components
│   │   ├── EntitySelectionPanel.tsx    # Entity picker
│   │   ├── SearchControlsPanel.tsx     # Search options & controls
│   │   ├── SearchResults.tsx           # Results display with tabs
│   │   └── SearchProgressIndicator.tsx # Progress & cancellation
│   ├── services/            # Business logic
│   │   ├── UniversalSearchService.ts   # Core search engine
│   │   └── MetadataCache.ts            # Metadata caching
│   ├── hooks/               # React hooks
│   │   └── useToolboxAPI.ts            # PPTB API integration
│   ├── types/               # TypeScript definitions
│   │   └── search.ts                   # Search types & interfaces
│   └── test/                # Testing infrastructure
├── dist/                    # Production build output
├── TESTING.md              # Testing documentation
└── README.md               # This file

🚀 Quick Start

Prerequisites

  • Node.js ≥18.0.0
  • Power Platform ToolBox
  • Access to Dataverse environment

Installation

# Install dependencies
npm install

# Run tests
npm test

# Build for production
npm run build

Development

# Start development server with HMR
npm run dev

# Run tests in watch mode
npm run test:watch

# Generate coverage report
npm run test:coverage

🔧 Usage

Basic Search

  1. Connect to your Dataverse environment via PPTB
  2. Select entities to search (or leave blank for all)
  3. Choose search mode: Records, Metadata, or Solutions
  4. Enter search text with optional wildcards (*, ?)
  5. Configure options (case sensitivity, attribute types, etc.)
  6. Click Search to begin

Wildcard Patterns

  • *company* - Matches any text containing "company"
  • test* - Matches text starting with "test"
  • *Ltd - Matches text ending with "Ltd"
  • te?t - Matches "test", "text", "tent", etc.

Advanced Features

  • Fullscreen mode: Press F11 or Ctrl+Enter
  • Panel collapse: Click arrow buttons to hide/show panels
  • Result navigation: Use tabs to switch between entity results
  • Record opening: Click table rows to open records in Dataverse
  • Search cancellation: Use progress indicator to stop long searches

🧪 Testing

The project includes comprehensive unit tests with 100% pass rate (97/97 tests):

# Run all tests
npm test

# Watch mode for development
npm run test:watch

# Coverage report
npm run test:coverage

Test Coverage Areas:

  • ✅ Component rendering and interactions
  • ✅ Search service functionality
  • ✅ API integrations and error handling
  • ✅ Type safety and interface contracts
  • ✅ Metadata caching and performance

See TESTING.md for detailed testing documentation.

🔌 PPTB Integration

The tool integrates seamlessly with Power Platform ToolBox APIs:

Connection Management

const { connection, isLoading } = useConnection();
// Automatically handles PPTB connection state

Event Handling

useToolboxEvents((event, data) => {
  // Responds to connection changes, theme updates, etc.
});

Notifications

await window.toolboxAPI.utils.showNotification({
  title: 'Search Complete',
  body: `Found ${results.length} results`,
  type: 'success'
});

🛠️ Development

Key Components

  • UniversalSearchService: Core search logic with progressive results
  • MetadataCache: Efficient caching for entity and picklist metadata
  • SearchControlsPanel: Tabbed interface for search configuration
  • SearchResults: Tabular results with highlighting and pagination
  • EntitySelectionPanel: Multi-select entity picker with search

Contributing

  1. Follow TypeScript strict mode guidelines
  2. Maintain 100% test coverage for new features
  3. Use React hooks and functional components
  4. Follow existing code patterns and naming conventions

📄 License

MIT License - see LICENSE file for details.

👨‍💻 Author

Mike Ochs - [email protected]


Built for Power Platform ToolBox with ❤️ and TypeScript