# ArcGIS Living Atlas Content Validator

![npm](https://img.shields.io/npm/v/@vannizhang/living-atlas-content-validator) ![license](https://img.shields.io/npm/l/@vannizhang/living-atlas-content-validator) ![downloads](https://img.shields.io/npm/dt/@vannizhang/living-atlas-content-validator)

This package provides a comprehensive set of **validation and scoring rules** designed to assist in the curation of content for the ArcGIS Living Atlas. It plays a crucial role in ensuring that nominated items meet the high-quality standards required for inclusion in the [**Living Atlas of the World**](https://livingatlas.arcgis.com/en/home/). 

The package is utilized in two key applications:

- [**Living Atlas Nomination App**](https://livingatlas.arcgis.com/en/contributions/) – Enables item owners to validate their own content before submitting it for nomination.
- **Living Atlas Curation App** – Used by Living Atlas Curators to perform a detailed evaluation of nominated items.

The validation process evaluates whether an item meets all necessary criteria, such as metadata completeness and adherence to best practices. By enforcing these validation and scoring rules, the package helps to ensure that only high-quality, well-documented, and properly formatted content is nominated and included in the ArcGIS Living Atlas of the World.

To learn more about the guidelines and scoring details for each individual validation rule, please refer to the [**Resources page**](https://livingatlas.arcgis.com/en/resources/) of the Living Atlas website.

## Getting Started

Install the package using npm:

```sh
npm install @vannizhang/living-atlas-content-validator
```

Then import and use the validator in your project:
    
```ts   
import {
    validate,
} from '@vannizhang/living-atlas-content-validator';

/**
 * An ArcGIS Online item to validate. This is a mock item for demonstration purposes; 
 * in a real application, you would retrieve this data from the ArcGIS Online REST API or other sources.
 */
const item = {
    id: 'mock-item-id',
    owner: 'mock-owner',
    title: 'Mock Item Title',
    snippet: 'This is a short summary of the item.',
    description: 'This is a detailed description of the item.',
    type: 'Web Map',
    tags: ['tag1', 'tag2'],
    // Other properties...
}

/**
 * An item owner's user profile. This is a mock user profile for demonstration purposes; 
 * in a real application, you would retrieve this data from the ArcGIS Online REST API or other sources.
 */
const userProfile = {
    fullName: 'mock-owner',
    description: 'mocked user profile',
    thumbnail: 'thumbnail/avatar.png',
    // Other properties...
}

// Validate the item and user profile
const validationResults = validate(item, userProfile);
```

## Documentation

### Core Functions

The [`validate`](./docs/core-functions/validate.md) function is the primary entry point — it validates an item and its owner's profile against Living Atlas criteria and returns a detailed scoring result. 

For individual validation functions (e.g. `isValidTitle`, `isValidThumbnail`) that can be called independently, see the [Core Functions](./docs/core-functions/README.md) documentation.

### Configuration

Check out the [Configuration](./docs/core-functions/configuration.md) guide for details on how to customize the validator's behavior globally using the `configureSettings` function.

### Helper Functions

See the [Helper Functions](./docs/helper-functions/README.md) documentation for utility functions that support the core validation logic, such as pattern matching for title and snippet searchability.

### Types

See the [Types](./docs/types/README.md) documentation for type definitions for the various data structures used in the validator, such as `ValidationResult`, `ValidationInfo`, and `FeatureLayerJSON`.

### Weight-Based Scoring System
To learn more about how the scoring system works and the weights assigned to each validation rule, see the [Weight-Based Scoring System](./docs/weight-based-scoring-system.md) documentation.

## Issues
Find a bug or want to request a new feature? Please let us know by submitting an issue.

## License
Copyright &copy; 2025 Esri

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

> http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

A copy of the license is available in the repository's [LICENSE](./LICENSE) file.

