abc-meta
v0.0.4
Published
meta
Readme
abc-meta
A comprehensive metadata and SEO management library for web applications, providing powerful tools for SEO optimization and dynamic content management.
📦 Installation
# If using within the monorepo
pnpm add abc-meta
# For external usage
pnpm install abc-meta🚀 Features
The abc-meta package provides specialized modules:
- API - API endpoints management for SEO
- Canonical - Canonical links and URL routing
- SEO - Fetch and process SEO data from APIs
- Template - Template management for different applications
- Keys - Standard SEO key definitions
- Utils - Utility functions for metadata generation
📖 Usage
Basic Import
// Import from main entry point
import {
getBaseSeo,
getSeoByPage,
getTemplate,
generateMetadataHelper,
} from "abc-meta";
// Import specific modules
import { getBaseSeo } from "abc-meta/api";
import { canonicalLink, genCanonicalLink } from "abc-meta/canonical";
import { getSeoByPage } from "abc-meta/seo";
import { getTemplate } from "abc-meta/template";
import { seoKeys } from "abc-meta/keys";
import { generateMetadataHelper } from "abc-meta/utils";Usage Examples
1. API Module - API endpoints management
import { getBaseSeo } from "abc-meta/api";
// Create SEO API URL
const seoUrl = getBaseSeo({
slug: "california-dmv-test",
app: "dmv",
state: "california",
});
// Result: "https://api.asvab-prep.com/wp-json/passemall/v1/get-info-state?stateSlug=california-dmv-test&app=dmv&state=california"2. SEO Module - Fetch SEO data
import { getSeoByPage } from "abc-meta/seo";
// Get SEO information for page
const seoData = await getSeoByPage({
app: "dmv",
state: "california",
slug: "dmv-test",
});
console.log(seoData);
// {
// title: "California DMV Practice Test 2024",
// description: "Free California DMV practice test with real questions...",
// content: "Detailed content about California DMV test..."
// }3. Template Module - Template management
import { getTemplate } from "abc-meta/template";
// Get template for DMV
const dmvTemplate = getTemplate({
template: "fines-limits",
stateName: "california",
app: "dmv",
type: "learn",
});
// Get template for Real Estate
const realEstateTemplate = getTemplate({
template: "property-law",
stateName: "texas",
app: "real-estate",
type: "test",
});
// Get template for CDL
const cdlTemplate = getTemplate({
template: "hazmat",
stateName: "florida",
app: "cdl",
type: "learn",
});4. Canonical Module - Create canonical links
import { canonicalLink, genCanonicalLink } from "abc-meta/canonical";
// Use predefined links
const aboutLink = canonicalLink.about; // "/about"
const practiceLink = canonicalLink.practiceTest; // "/practice-test"
// Create dynamic canonical links
const statePageLink = genCanonicalLink({
type: "practice-test",
appName: "dmv",
state: "california",
});
// Result: "dmv/california/practice-test"5. Utils Module - Generate metadata
import {
generateMetadataHelper,
generateMetadataWithApp,
} from "abc-meta/utils";
// Generate basic metadata
const metadata = await generateMetadataHelper({
slug: "california-dmv-test",
app: "dmv",
state: "california",
canonical: "https://example.com/dmv/california/practice-test",
fallbackTitle: "California DMV Practice Test",
fallbackDescription: "Free practice test for California DMV exam",
});
// Generate metadata with app info
const metadataWithApp = await generateMetadataWithApp({
appName: "dmv",
apps: [
{
appNameId: "dmv",
title: "DMV Practice Tests",
description: "Free DMV practice tests for all states",
},
],
slug: "california-dmv-test",
state: "california",
});6. Keys Module - Standard SEO keys
import { seoKeys } from "abc-meta/keys";
// Use predefined keys
const homeKey = seoKeys.home; // "home"
const practiceKey = seoKeys.practice; // "practice"
// Dynamic keys
const reviewKey = seoKeys.review("mobile"); // "review-mobile"
const resultKey = seoKeys.result("practice"); // "result-practice"🏗️ Project Structure
packages/meta/
├── src/
│ ├── api/ # API endpoints management
│ ├── canonical/ # Canonical links and URL routing
│ ├── seo/ # SEO data fetching
│ ├── template/ # Template management
│ ├── keys/ # SEO keys definitions
│ ├── utils/ # Metadata generation utilities
│ └── index.ts # Main exports
├── package.json
└── README.md🔧 Configuration
Environment Variables
# App name to determine API endpoint
NEXT_PUBLIC_APP_SHORT_NAME=dmv # or "asvab", "easyprep", "cdl"Supported Apps
- DMV - Driver's License tests
- Real Estate - Real Estate license tests
- CDL - Commercial Driver's License tests
- ASVAB - Military entrance exam
- EasyPrep - General test preparation
📦 Dependencies
Runtime Dependencies
abc-service- Service layer utilitiesabc-model- Data models and typesquery-string- URL query string parsing
Development Dependencies
@repo/eslint-config- Shared ESLint configuration- TypeScript type definitions
🚀 Development
Prerequisites
- Node.js 18+
- pnpm (recommended package manager)
Setup
# Install dependencies
pnpm install
# Build package
pnpm build
# Development mode with watch
pnpm dev
# Clean build artifacts
pnpm clean
# Lint code
pnpm lint
# Type checking
pnpm check-types📝 API Reference
getBaseSeo(props)
Create API URL for SEO data.
Parameters:
props.slug(string, optional) - Page slugprops.app(string, optional) - App identifierprops.state(string, optional) - State identifier
Returns: string - Formatted API URL
getSeoByPage(props)
Fetch SEO data from API.
Parameters:
props.app(string, optional) - App nameprops.state(string, optional) - State nameprops.slug(string, optional) - Page slug
Returns: Promise<{title: string, description: string, content: string}>
getTemplate(props)
Get template data for different apps.
Parameters:
props.template(string) - Template nameprops.stateName(string) - State nameprops.app("dmv" | "real-estate" | "cdl") - App typeprops.type("learn" | "test", optional) - Content type
Returns: {title: string, description: string, content: string}
generateMetadataHelper(options)
Generate Next.js metadata object.
Parameters:
options.slug(string, optional) - Page slugoptions.app(string, optional) - App identifieroptions.state(string, optional) - State identifieroptions.canonical(string, optional) - Canonical URLoptions.fallbackTitle(string, optional) - Fallback titleoptions.fallbackDescription(string, optional) - Fallback descriptionoptions.metadataBase(URL, optional) - Base URLoptions.icons(string, optional) - Icon URLoptions.images(string, optional) - Image URL
Returns: Promise<Metadata>
🤝 Contributing
- Fork repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add some amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
📄 License
This project is part of the monorepo and follows the same license terms.
🆘 Support
For support and questions:
- Create an issue in the repository
- Check existing documentation
- Contact the development team
Note: This is an internal package designed for use within the monorepo ecosystem. Some functions may depend on other packages in the workspace.
📊 Changelog
v0.0.2 (2025-01-11)
- ✅ Optimized API endpoints with object lookup
- ✅ Improved type safety
- ✅ Added comprehensive documentation
- ✅ Support for multiple apps (DMV, Real Estate, CDL, ASVAB, EasyPrep)
- ✅ Metadata generation utilities for Next.js
