Skip to content

Commit

Permalink
feat: Bump dependencies and update Readme (#29)
Browse files Browse the repository at this point in the history
* chore: Upgrade node version

* feat: bump dependencies

* docs: Update readme

* feat: bump dependencies

* fix: update tsconfig

* fix: update test tsconfig
  • Loading branch information
cyaiox authored Dec 18, 2024
1 parent 906837c commit b4bab17
Show file tree
Hide file tree
Showing 6 changed files with 4,753 additions and 6,253 deletions.
14 changes: 8 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Use Node.js 16.x
- name: Use Node.js 20.x
uses: actions/setup-node@v1
with:
node-version: 16.x
node-version: 20.x
cache: npm
- name: install
run: npm install
- name: build
Expand All @@ -31,17 +32,18 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}

test-node-14:
test-node-20:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Use Node.js 14.x
- name: Use Node.js 20.x
uses: actions/setup-node@v1
with:
node-version: 14.x
node-version: 20.x
cache: npm
- name: install
run: npm install
- name: build
run: make build
- name: test
run: make test
run: make test
137 changes: 135 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,136 @@
# base-ts-project
# Features Component

Use this project as template for TypeScript libraries
A well-known component that integrates with [Unleash](https://www.getunleash.io/) to provide feature flag management. It enables runtime feature toggling and configuration through a simple interface.

## Quick Start

1. Install the package:
```bash
npm install @well-known-components/features-component
```

2. Set up environment variables:
```env
FF_URL=https://your-unleash-instance-url
SERVER_URL=https://your-api-url
```

3. Create and use the component:
```typescript
import { createFeaturesComponent } from '@well-known-components/features-component'

// Initialize the component
const features = await createFeaturesComponent(
{
config, // WKC configuration component
logs, // WKC logger component
fetch, // WKC fetch component
},
await config.requireString('SERVER_URL')
)

// Check if a feature is enabled
const isEnabled = await features.getIsFeatureEnabled(
'APPLICATION_NAME',
'FEATURE_NAME'
)
```

## Configuration

### Required Environment Variables

| Variable | Description |
|----------|-------------|
| `FF_URL` | URL of your Unleash instance |
| `SERVER_URL` | Your API URL (used as referrer for Unleash's applicationHostname strategy) |

### Component Dependencies

The features component requires three well-known components:
- `config`: For accessing environment variables
- `logs`: For logging and debugging
- `fetch`: For making HTTP requests to Unleash

## Usage Examples

### Basic Feature Check

```typescript
const isEnabled = await features.getIsFeatureEnabled(
'MY_APP',
'DARK_MODE'
)

if (isEnabled) {
// Enable dark mode
}
```

### Integration with Other Components

```typescript
export const validateFeature = async (components: AppComponents, data: any) => {
const { features, logs } = components

const isFeatureEnabled = await features.getIsFeatureEnabled(
'MY_APP',
'NEW_VALIDATION'
)

if (isFeatureEnabled) {
logs.log('Using new validation')
return newValidation(data)
}

return legacyValidation(data)
}
```

## API Reference

### createFeaturesComponent(options, serverUrl)

Creates a new instance of the features component.

**Parameters:**
- `options`: Configuration object containing:
- `config`: Configuration component instance
- `logs`: Logger component instance
- `fetch`: Fetch implementation for making HTTP requests
- `serverUrl`: URL used as referrer for Unleash's applicationHostname strategy

**Returns:** Promise<FeaturesComponent>

### FeaturesComponent Methods

#### getIsFeatureEnabled(applicationName, featureName)

Checks if a feature is enabled in Unleash.

**Parameters:**
- `applicationName`: Your application name
- `featureName`: Feature flag name

**Returns:** Promise<boolean>

**Note:** The actual feature flag in Unleash will be named: `FF_${applicationName}_${featureName}`

## Feature Flag Naming Convention

Feature flags in Unleash follow this naming pattern:
```
FF_<APPLICATION_NAME>_<FEATURE_NAME>
```

For example:
- `FF_MY_APP_DARK_MODE`
- `FF_MY_APP_NEW_VALIDATION`

## Contributing

Please read our contributing guidelines and code of conduct before submitting pull requests or issues.

## License

This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
Loading

0 comments on commit b4bab17

Please sign in to comment.