open-index/open-npm huggingface dataset:
npm package: @serveside/cli
Description: CLI for installing serveside core and services
Author: Naftali Lubin
Latest version: 0.2.0

# ServeSide CLI

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->


- [ServeSide CLI](#serveside-cli)
  - [Installation](#installation)
  - [Configuration](#configuration)
  - [Help](#help)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## Installation
Can be installed globally

```bash
npm i -g @serveside/cli
# or
yarn global add @serveside/cli
```

Can can be used like so:

```bash
serveside [--service=service]
```

Can also be used via `npx` like so:

```bash
npx @serveside/cli [--service=service]
```

## Configuration

Can create a config file in the root of your project called `.servesiderc` or `.serveside.json`

Can contain the service that the cli will install

For example:
```json
{
  "service": "svelte"
}
```

By default if no service is set, it will install the `react` service.

## Help

Can view the help in the terminal by passing `--help` to the cli
npm package: @servezone/appjson
Description: create, read and interact with and from app.json format
Author: Lossless GmbH
Latest version: 1.0.27

# @servezone/appjson
create, read and interact with and from app.json format

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/appjson)
* [gitlab.com (source)](https://gitlab.com/servezone/appjson)
* [github.com (source mirror)](https://github.com/servezone/appjson)
* [docs (typedoc)](https://servezone.gitlab.io/appjson/)

## Status for master
[![build status](https://gitlab.com/servezone/appjson/badges/master/build.svg)](https://gitlab.com/servezone/appjson/commits/master)
[![coverage report](https://gitlab.com/servezone/appjson/badges/master/coverage.svg)](https://gitlab.com/servezone/appjson/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@servezone/appjson.svg)](https://www.npmjs.com/package/@servezone/appjson)
[![Known Vulnerabilities](https://snyk.io/test/npm/@servezone/appjson/badge.svg)](https://snyk.io/test/npm/@servezone/appjson)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)

## Usage

Use TypeScript for best in class instellisense.

```javascript
import * as smartapp from 'smartapp';
let testSmartApp = new smartapp.SmartApp();
testSmartApp.readFromJson('./myTestApp/app.json');
// do something with the app data here
testSmartApp.writeToDisk('./myTestAppAltered/app.json');
```

### The conecpt of env vars

env vars are specified a little different than you might be used to.

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)

[![repo-footer](https://servezone.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com)
npm package: @servezone/cloudly
Description: configure the cloud
Author: Lossless GmbH
Latest version: 1.0.75
Deprecated: @servezone/cloudly has been deprecated in favour of @servezone/api - please upgrade asap!!!

# @servezone/cloudly
container cloud manager

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/cloudly)
* [gitlab.com (source)](https://gitlab.com/servezone/cloudly)
* [github.com (source mirror)](https://github.com/servezone/cloudly)
* [docs (typedoc)](https://servezone.gitlab.io/cloudly/)

## Status for master
[![build status](https://gitlab.com/servezone/cloudly/badges/master/build.svg)](https://gitlab.com/servezone/cloudly/commits/master)
[![coverage report](https://gitlab.com/servezone/cloudly/badges/master/coverage.svg)](https://gitlab.com/servezone/cloudly/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@servezone/cloudly.svg)](https://www.npmjs.com/package/@servezone/cloudly)
[![Known Vulnerabilities](https://snyk.io/test/npm/@servezone/cloudly/badge.svg)](https://snyk.io/test/npm/@servezone/cloudly)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)

## Usage

Use TypeScript for best in class instellisense.

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)

[![repo-footer](https://servezone.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com)
npm package: @servezone/healthy
Description: a health checker for inside docker
Author: Lossless GmbH
Latest version: 1.0.14

# @servezone/healthy
a health checker for inside docker

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/healthy)
* [gitlab.com (source)](https://gitlab.com/servezone/healthy)
* [github.com (source mirror)](https://github.com/servezone/healthy)
* [docs (typedoc)](https://servezone.gitlab.io/healthy/)

## Status for master

Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/servezone/healthy/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/servezone/healthy/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@servezone/healthy)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/servezone/healthy)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@servezone/healthy)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@servezone/healthy)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@servezone/healthy)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)

## Usage

Use TypeScript for best in class Intellisense

healthy expects

## License


## Contribution

We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)

[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
npm package: @servezone/healthy-ipc
Description: provide health information to healthy via inter process communication
Author: Lossless GmbH
Latest version: 1.0.5

# @servezone/healthy-ipc
provide health information to healthy via inter process communication

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/healthy-ipc)
* [gitlab.com (source)](https://gitlab.com/servezone/healthy-ipc)
* [github.com (source mirror)](https://github.com/servezone/healthy-ipc)
* [docs (typedoc)](https://servezone.gitlab.io/healthy-ipc/)

## Status for master
[![build status](https://gitlab.com/servezone/healthy-ipc/badges/master/build.svg)](https://gitlab.com/servezone/healthy-ipc/commits/master)
[![coverage report](https://gitlab.com/servezone/healthy-ipc/badges/master/coverage.svg)](https://gitlab.com/servezone/healthy-ipc/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@servezone/healthy-ipc.svg)](https://www.npmjs.com/package/@servezone/healthy-ipc)
[![Known Vulnerabilities](https://snyk.io/test/npm/@servezone/healthy-ipc/badge.svg)](https://snyk.io/test/npm/@servezone/healthy-ipc)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)

## Usage

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)

[![repo-footer](https://servezone.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com)
npm package: @servezone/interfaces
Description: interfaces for working with containers
Author: Lossless GmbH
Latest version: 1.0.3

# @servezone/interfaces
interfaces for working with containers

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/interfaces)
* [gitlab.com (source)](https://gitlab.com/servezone/interfaces)
* [github.com (source mirror)](https://github.com/servezone/interfaces)
* [docs (typedoc)](https://servezone.gitlab.io/interfaces/)

## Status for master

Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/servezone/interfaces/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/servezone/interfaces/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@servezone/interfaces)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/servezone/interfaces)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@servezone/interfaces)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@servezone/interfaces)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@servezone/interfaces)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)

## Usage

Use TypeScript for best in class intellisense

## Contribution

We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)

[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
npm package: @servezone/servezone-interfaces
Description: TypeScript interfaces to interact with servezone.
Author: Lossless GmbH
Latest version: 2.0.51
Deprecated: @servezone/servezone-interfaces has been deprecated in favour of @servezone/interfaces - please upgrade asap!!!

# @servezone/servezone-interfaces
TypeScript interfaces to interact with servezone.

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/servezone-interfaces)
* [gitlab.com (source)](https://gitlab.com/servezone/servezone-interfaces)
* [github.com (source mirror)](https://github.com/servezone/servezone-interfaces)
* [docs (typedoc)](https://servezone.gitlab.io/servezone-interfaces/)

## Status for master
[![build status](https://gitlab.com/servezone/servezone-interfaces/badges/master/build.svg)](https://gitlab.com/servezone/servezone-interfaces/commits/master)
[![coverage report](https://gitlab.com/servezone/servezone-interfaces/badges/master/coverage.svg)](https://gitlab.com/servezone/servezone-interfaces/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@servezone/servezone-interfaces.svg)](https://www.npmjs.com/package/@servezone/servezone-interfaces)
[![Known Vulnerabilities](https://snyk.io/test/npm/@servezone/servezone-interfaces/badge.svg)](https://snyk.io/test/npm/@servezone/servezone-interfaces)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)

## Usage

Use TypeScript for best in class instellisense.

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)

[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
npm package: @servezone/staticly
Description: a server serving static builds in docker contexts
Author: Lossless GmbH
Latest version: 1.0.15

# @servezone/staticly
a server serving static builds in docker contexts

## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone/staticly)
* [gitlab.com (source)](https://gitlab.com/servezone/staticly)
* [github.com (source mirror)](https://github.com/servezone/staticly)
* [docs (typedoc)](https://servezone.gitlab.io/staticly/)

## Status for master
[![pipeline status](https://gitlab.com/servezone/staticly/badges/master/pipeline.svg)](https://gitlab.com/servezone/staticly/commits/master)
[![coverage report](https://gitlab.com/servezone/staticly/badges/master/coverage.svg)](https://gitlab.com/servezone/staticly/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@servezone/staticly.svg)](https://www.npmjs.com/package/@servezone/staticly)
[![Known Vulnerabilities](https://snyk.io/test/npm/@servezone/staticly/badge.svg)](https://snyk.io/test/npm/@servezone/staticly)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)

## Usage

Use TypeScript for best in class intellisense

## Contribution

We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)

For further information read the linked docs at the top of this readme.

> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)

[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)
npm package: @service-broker/service-broker-client
Description: Client library for interacting with a service broker
Author: Hai Phan
Latest version: 2.7.2

# service-broker-client
Client library for interacting with a service broker


### Connect
```typescript
const sb = new ServiceBroker("ws://sb.mydomain.com:8080", logger)
```


### Advertise
```typescript
sb.advertise(
  service: {name: string, capabilities?: string[], priority?: number},
  handler: (req: Message) => Message|Promise<Message>
)
```
A service provider calls this method to advertise to the broker the service(s) it provides.  For explanation of parameters, see [service broker](https://github.com/service-broker/service-broker).


### Request
```typescript
sb.request(
  service: {name: string, capabilities?: string[]},
  req: Message,
  timeout?: number
)
: Promise<Message>
```
A client calls this method to request some service.  The broker will select a qualified provider based on service `name` and `capabilities`.  The parameter `req` contains the actual message that'll be delivered to the service provider (see `handler` in Advertise).  The returned promise contains the response from the provider.


### RequestTo
```typescript
sb.requestTo(
  endpointId: string,
  serviceName: string,
  req: Message,
  timeout?: number
)
: Promise<Message>
```
Send a request directly to an endpoint.


### Notify
```typescript
sb.notify(
  service: {name: string, capabilities?: string[]},
  msg: Message
)
```
A notification is a request without an `id`, and thus no response will be generated.  Use a notification when you don't care about the result.


### NotifyTo
```typescript
sb.notifyTo(
  endpointId: string,
  serviceName: string,
  msg: Message
)
```
Send a notification directly to an endpoint.


### Publish/Subscribe
```typescript
sb.publish(
  topic: string,
  text: string
)

sb.subscribe(
  topic: string,
  handler: (text: string) => void
)
```


### SetServiceHandler
```typescript
sb.setServiceHandler(
  serviceName: string,
  handler: (req: Message) => Message|Promise<Message>
)
```
This installs a handler for a particular service without advertising the it to the broker.  This is for when the client knows the provider's endpointId and can send the request directly to it (see RequestTo).


### Status
```typescript
sb.status(): Promise<any>
```
Returns the service broker's status, which includes the list of services and service providers currently active.


### WaitEndpoint
```typescript
sb.waitEndpoint(endpointId: string): Promise<void>
```
Returns a promise that resolves when the specified endpoint disconnects.


### Shutdown
```typescript
sb.shutdown()
```
Close the connection to the service broker.
npm package: @service-broker/webclient
Description: Browser ESM client library for communicating with the service broker
Author: Hai Phan
Latest version: 2.1.0

## @service-broker/webclient
Browser ESM client library for communicating with a [Service Broker](https://github.com/service-broker/service-broker/wiki/specification)


### Install
```bash
npm install @service-broker/webclient
```


### Connect
Connect to the Service Broker at the specified WebSocket URL.

```javascript
import { ServiceBroker } from "@service-broker/webclient"

const sb = new ServiceBroker("wss://sb.mydomain.com")
```


### Request
Send a service request.  The broker will select a qualified provider based on service `name` and requested `capabilities`.  The parameter `request` contains the actual message that'll be delivered to the service provider.

```typescript
interface Message {
  header: {
    from: string      // the endpointId of the sender
    to: string        // the endpointId of the recipient
  },
  payload: string     // the message payload, usually JSON
}

sb.request(
  service: {
    name: string,
    capabilities?: string[]
  },
  request: Message,
  timeout?: number
): Promise<Message>
```


### Notify
A notification is like a request except no response will be sent back.

```typescript
sb.notify(
  service: {
    name: string,
    capabilities?: string[]
  },
  notification: Message
): Promise<void>
```


### RequestTo
Send a service request directly to an endpoint.

```typescript
sb.requestTo(
  endpointId: string,
  serviceName: string,
  request: Message,
  timeout?: number
): Promise<Message>
```


### NotifyTo
Send a notification directly to an endpoint.

```typescript
sb.notifyTo(
  endpointId: string,
  serviceName: string,
  notification: Message
): Promise<void>
```


### SetServiceHandler
The `requestTo` and `notifyTo` methods can be used to send direct messages to an endpoint. For example, a chat service provider may publish a client's endpointId to other clients and allow them to send direct messages to one another.

This method sets a handler for incoming requests and notifications.

```typescript
sb.setServiceHandler(
  serviceName: string,
  handler: (request: Message) => Message|void|Promise<Message|void>
): void
```


### Publish/Subscribe
```typescript
sb.publish(
  topic: string,
  text: string
): Promise<void>

sb.subscribe(
  topic: string,
  handler: (text: string) => void
): Promise<void>

sb.unsubscribe(
  topic: string
): Promise<void>
```
npm package: @service-broker/websocket
Description: A WebSocket connection wrapper that exposes events as RxJS observables, allowing for idiomatic management of connection lifecycle
Author: Hai Phan
Latest version: 1.1.0

# websocket
A WebSocket connection wrapper that exposes events as RxJS observables, allowing for idiomatic management of connection lifecycle.

## Usage (server)

```typescript
import { makeServer, Connection } from '@service-broker/websocket'

makeServer({ port: 8080 }).pipe(
  rxjs.exhaustMap(server =>
    rxjs.merge(
      server.connection$.pipe(
        rxjs.mergeMap(handleConnection)
      ),
      server.error$.pipe(
        rxjs.tap(event => console.error(event.error))
      )
    ).pipe(
      rxjs.finalize(() => server.close())
    )
  ),
  rxjs.takeUntil(shutdown$)
).subscribe()

function handleConnection(con: Connection) {
  return rxjs.merge(
    con.message$.pipe(
      rxjs.tap(event => handleMessage(event.data))
    ),
    con.error$.pipe(
      rxjs.tap(event => console.error(event.error))
    ),
    con.keepAlive(interval, pingTimeout).pipe(
      rxjs.catchError(err => {
        console.error('Ping timed out')
        con.terminate()
        return rxjs.EMPTY
      })
    )
  ).pipe(
    rxjs.takeUntil(con.close$),
    rxjs.finalize(() => con.close())
  )
}
```

## Usage (client)

```typescript
import { connect } from '@service-broker/websocket'

connect(wsUrl).pipe(
  rxjs.retry(),
  rxjs.exhaustMap(handleConnection),
  rxjs.repeat(),
  rxjs.takeUntil(shutdown$)
).subscribe()
```
npm package: @service-public-de-wallonie/string-utils-lib
Description: A simple string utility library
Latest version: 1.0.0

# NodeJS Library Example

Exemple de librairie Node.js compatible avec le composant GitLab CI `nodejs-component`.

## Prérequis

- Node.js `20.18.x`
- npm

## Installation

```bash
npm install
```

## Scripts disponibles

| Commande         | Description                               |
| ---------------- | ----------------------------------------- |
| `npm run build`  | Compile la librairie (ESM + CJS + types)  |
| `npm test`       | Exécute les tests avec couverture de code |
| `npm run lint`   | Analyse statique du code (ESLint)         |
| `npm run format` | Formate le code (Prettier)                |

## Structure du projet

```
├── src/                    # Code source
│   ├── index.ts           # Point d'entrée
│   ├── string-utils.ts    # Utilitaires de chaînes
│   └── text-utils.ts      # Utilitaires de texte
├── test/                   # Tests unitaires
│   ├── string-utils.test.ts
│   └── text-utils.test.ts
├── dist/                   # Build (généré)
│   ├── esm/               # Module ESM
│   ├── cjs/               # Module CommonJS
│   └── types/             # Déclarations TypeScript
└── reports/                # Rapports (généré)
```

## Conventions pour GitLab CI

### Répertoire des rapports

Tous les rapports doivent être générés dans `reports/` :

| Fichier                          | Format    | Usage                      |
| -------------------------------- | --------- | -------------------------- |
| `reports/node-test.xunit.xml`    | JUnit     | Résultats des tests GitLab |
| `reports/lcov.info`              | LCOV      | Couverture SonarQube       |
| `reports/cobertura-coverage.xml` | Cobertura | Couverture GitLab MR       |

### Scripts obligatoires

Le composant GitLab CI exécute :

```bash
npm run build    # NODE_BUILD_ARGS
npm test         # NODE_TEST_ARGS (doit générer les rapports)
npm run lint     # NODE_LINT_ARGS
```

### Configuration du coverage

Le script `test` utilise :
- **Test runner** : `node:test` (natif Node.js)
- **Coverage** : `c8` avec reporters `lcov`, `cobertura`, `text`
- **Test reporter** : `spec` (console) + `junit` (fichier)

### Regex de couverture

Le composant CI extrait le pourcentage via :
```
/^All files\s*\|\s*(\d+(?:\.\d+)?)/
```

Le reporter `text` de c8 génère ce format automatiquement.
npm package: @service-ui/mixins
Description: CSS property helpers & mixins
Author: Frédérique Mittelstaedt
Latest version: 0.2.1

# @service-ui/mixins

A collection of CSS property helpers & mixins.

## Install

```sh
// If you use yarn
yarn add @service-ui/mixins

// If you use NPM
npm install @service-ui/mixins
```

## Thank you

service.ui is kindly supported by:

<a href="https://www.browserstack.com" title="BrowserStack">
  <picture>
    <source srcset="./media/browserstack/Browserstack-logo.svg" type="image/svg+xml">
    <img src="./media/browserstack/Browserstack-logo@2x.png" alt="Browserstack">
  </picture>
</a>

## License: MIT

MIT License

Copyright 2018 - 2019 Frédérique Mittelstaedt

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.