open-index/open-npm huggingface dataset:
npm package: @retail-ui/eslint-config
Description: The Prettier + ESLint configuration
Latest version: 0.1.2

# `@retail-ui/eslint-config`

The Prettier + ESLint configuration

## Installation

`yarn add -D @retail-ui/eslint-config`

## Usage

Inside `.eslintrc.js`:

```js
const config = require('@air/eslint-config');

/**
 * @type {import("eslint").Linter.Config}
 */
module.exports = {
  // easily lets you merge and alter existing config blobs as opposed to using just the `extends` key
  ...config,
};
```
npm package: @retailcrm/embed-ui
Description: API and components for creating RetailCRM UI extensions
Author: RetailDriverLLC
Latest version: 0.9.19

# @retailcrm/embed-ui

[![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui)

API и компоненты для создания расширений интерфейса RetailCRM

Витрина storybook для последней выпущенной версии: [embed-ui/v1-components/latest](https://retailcrm.github.io/embed-ui/v1-components/latest/index.html).

## Пакеты `v1-*`

- `v1-components` — UI-компоненты и сопутствующая документация, [README.md пакета](./packages/v1-components/README.md).
- `v1-contexts` — реактивные контексты и доступ к данным RetailCRM JS API, [README.md пакета](./packages/v1-contexts/README.md).
- `v1-endpoint` — endpoint API для remote-страниц и виджетов, [README.md пакета](./packages/v1-endpoint/README.md).
- `v1-testing` — тестовые утилиты и вспомогательные типы для интеграций, [README.md пакета](./packages/v1-testing/README.md).
- `v1-types` — базовые type declarations для публичного API, [README.md пакета](./packages/v1-types/README.md).

Для `v1-components` также доступен `npx`-скрипт, который может создать или дополнить локальный
`AGENTS.md` инструкциями по работе с `@retailcrm/embed-ui-v1-components`:

```bash
npx @retailcrm/embed-ui-v1-components init-agents
```

## Обновление версий в целевом проекте

Можно запустить бинарник через `npx`, чтобы обновить пакеты `@retailcrm/embed-ui*` во всех `package.json`
текущего рабочего дерева или выбранного поддерева
(`dependencies`, `devDependencies`, `peerDependencies`, `optionalDependencies`).

```bash
npx @retailcrm/embed-ui
npx @retailcrm/embed-ui --version 0.9.11
npx @retailcrm/embed-ui ./my-project 0.9.11
npx @retailcrm/embed-ui --target ./my-project --dry-run
```

По умолчанию используется последняя версия из npm. Флаг `--exact` переключает формат обновления на точную версию.
CLI сохраняет исходные отступы и переводы строк в каждом изменяемом `package.json`.

Для точечного добавления пакетов только в один `package.json` есть флаг `--add`.
Если не передать `--packages`, CLI откроет интерактивный режим с выбором пакетов и кратким описанием.

```bash
npx @retailcrm/embed-ui --add
npx @retailcrm/embed-ui --add --packages components,contexts
npx @retailcrm/embed-ui --add --target ./my-project --version 0.9.11
```

## Цели встраивания

Цели встраивания определяют места, где будет размещена разметка виджета, генерируемая расширением.

https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModulesTargets
npm package: @retailcrm/embed-ui-v1-components
Description: [![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui-v1-components.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui-v1-components)
Author: RetailDriverLLC
Latest version: 0.9.19

# `@retailcrm/embed-ui-v1-components`

[![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui-v1-components.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui-v1-components)

Компоненты UI для использования в JS-расширениях RetailCRM

## Установка

npm:

```bash
npm i --save @retailcrm/embed-ui-v1-components
```

yarn:
```bash
yarn add @retailcrm/embed-ui-v1-components
```

## Применение в расширениях

Все компоненты в расширениях надо импортировать из `@retailcrm/embed-ui-v1-components/remote`

Пример импорта и использования кнопки `UiButton`

```html
<template>
    <UiButton variant="danger">
        <IconDelete /> Удалить
    </UiButton>
</template>

<script lang="ts" setup>
import IconDelete from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete-outlined.svg'
import { UiButton } from '@retailcrm/embed-ui-v1-components/remote'
</script>
```

> [!IMPORTANT]
> Расширения используют определения из remote части для передачи системе инструкций, из чего собирать
интерфейс. Библиотека также содержит `@retailcrm/embed-ui-v1-components/host` &ndash; набор компонентов,
который будет использовать CRM при интерпретации инструкций от расширений. **_Не используйте_** host компоненты
как часть кода расширения.

## Документация пакета

Дополнительные материалы по пакету находятся в `docs/`:

- [`docs/README.md`](./docs/README.md) — обзор пакета и правил использования.
- [`docs/COMPONENTS.md`](./docs/COMPONENTS.md) — карта публичных компонентов.
- [`docs/AI.md`](./docs/AI.md) — контекст для ИИ и автоматизаций.
- [`docs/PROFILES.md`](./docs/PROFILES.md) — AI-friendly YAML-профили компонентов.
- [`docs/FORMAT.md`](./docs/FORMAT.md) — формат описания компонента для AI-агентов.

## AI и инициализация `AGENTS.md`

После установки пакет показывает подсказку, что внутри есть AI-заметки и YAML-профили компонентов.

Если в целевом проекте еще нет `AGENTS.md`, можно сгенерировать стартовый файл командой:

```bash
npx @retailcrm/embed-ui-v1-components init-agents
```

Если `AGENTS.md` уже существует, команда допишет в конец инструкции для
`@retailcrm/embed-ui-v1-components`, если такого блока там еще нет. С `--force`
можно обновить уже существующий блок пакета.
npm package: @retailcrm/embed-ui-v1-contexts
Description: Reactive contexts for RetailCRM JS API
Author: RetailDriverLLC
Latest version: 0.9.19

# `@retailcrm/embed-ui-v1-contexts`

[![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui-v1-contexts.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui-v1-contexts)

Логика реактивного контекста, используемого в JS-расширениях RetailCRM

## Установка

npm:

```bash
npm i --save @retailcrm/embed-ui-v1-contexts
```

yarn:
```bash
yarn add @retailcrm/embed-ui-v1-contexts
```
npm package: @retailcrm/embed-ui-v1-endpoint
Description: Endpoint API for integrations in RetailCRM
Author: RetailDriverLLC
Latest version: 0.9.19

# `@retailcrm/embed-ui-v1-endpoint`

[![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui-v1-endpoint.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui-v1-endpoint)

`@retailcrm/embed-ui-v1-endpoint` помогает поднять endpoint для удалённых
виджетов и страниц в RetailCRM: принять вызовы host-части, смонтировать Vue
приложение в удалённый root и корректно освобождать ресурсы.

Пакет покрывает два сценария:

- **Pages** — запуск по `code`.
- **Widgets** — запуск по `id + target`.

## Быстрый старт

```ts
// endpoint.worker.ts
import { defineRunner, runEndpoint } from '@retailcrm/embed-ui-v1-endpoint/remote'

import OrdersPage from './pages/OrdersPage.vue'
import OrderCommonWidget from './widgets/OrderCommonWidget.vue'

const runner = defineRunner({
  pages: [OrdersPage],
  widgets: [OrderCommonWidget],
})

runEndpoint(runner)
```

Для продакшен-использования обычно достаточно `runEndpoint(...)` в worker entry.
Если нужен более низкоуровневый контроль транспорта — используйте `createEndpoint(...)`.

## Продвинутые гайды

Подробная документация по методам находится в каталоге [`docs/`](./docs/README.md):

- [`defineRunner`](./docs/define-runner.md) — как объединить page и widget runners в один endpoint runner.
- [`definePageRunner`](./docs/define-page-runner.md) — как запускать remote-страницы по `code`.
- [`defineWidgetRunner`](./docs/define-widget-runner.md) — как запускать remote-виджеты по `target`.
- [`createEndpoint`](./docs/create-endpoint.md) — как вручную создать endpoint с transport и messenger.
- [`runEndpoint`](./docs/run-endpoint.md) — как поднять endpoint в worker entry одной строкой.
- [`targets` и `defineTarget`](./docs/targets.md) — как типизировать цели виджетов и маршрутизировать их по target.
- [`layout`](./docs/layout.md) — как выбирать layout-паттерны страниц, `modal sidebar` и `modal window`, и из каких `v1-components` их собирать.
npm package: @retailcrm/embed-ui-v1-testing
Description: Утилиты для упрощения тестирования логики JS-расширений RetailCRM
Author: RetailDriverLLC
Latest version: 0.9.19

# `@retailcrm/embed-ui-v1-testing`

Утилиты для упрощения тестирования логики JS-расширений RetailCRM

## Установка

npm:

```bash
npm i --save-dev @retailcrm/embed-ui-v1-testing
```

yarn:
```bash
yarn add -D @retailcrm/embed-ui-v1-testing
```
npm package: @retailcrm/embed-ui-v1-types
Description: Basic types declarations for RetailCRM JS API
Author: RetailDriverLLC
Latest version: 0.9.19

# `@retailcrm/embed-ui-v1-types`

[![npm version](https://img.shields.io/npm/v/@retailcrm/embed-ui-v1-types.svg)](https://www.npmjs.com/package/@retailcrm/embed-ui-v1-types)

Базовые TypeScript типы, используемые в JS-расширениях RetailCRM

## Установка

npm:

```bash
npm i --save @retailcrm/embed-ui-v1-types
```

yarn:
```bash
yarn add @retailcrm/embed-ui-v1-types
```
npm package: @retailcrm/image-preview
Description: Util for making URLs for processed by image worker images
Author: RetailDriverLLC
Latest version: 1.0.2

# `@retailcrm/image-preview`

[![npm version](https://img.shields.io/npm/v/@retailcrm/image-preview.svg)](https://www.npmjs.com/package/@retailcrm/image-preview)

Библиотека содержит функцию `preview`, которая помогает обрабатывать URL для изображений, используя список доступных
рабочих серверов, а также параметры изменения размера и обрезки.

## Функция `preview`

Функция `preview` используется для генерации URL изображения с учетом следующих параметров:

- **Список рабочих серверов (`workers`)**: массив строк, содержащий имена или адреса рабочих серверов.
- **Исходный URL (`url`)**: изначальный путь к изображению.
- **Размер (`resize`)**: (опциональный) строка, определяющая размер изображения. По умолчанию используется размер `90x90`.
- **Обрезка (`crop`)**: (опционально) строка, определяющая параметры обрезки изображения.

Если список рабочих серверов пуст, функция просто возвращает исходный URL.

### Логика работы

1. Если `workers` пуст, возвращается исходный `url`.
2. Выбирается случайный сервер из списка `workers`.
3. Формируется новый URL, содержащий параметры:
    - Размер изображения (`resize`),
    - Обрезка (`crop`), если предоставлена.

### Синтаксис

```typescript
function preview(
  workers: string[],
  url: string,
  resize?: string,
  crop?: string
): string
```

### Пример использования

```typescript
import { preview } from '@retailcrm/processed-image-url'

const workers = ['server1.example.com', 'server2.example.com']
const url = 'path/to/image.jpg'

// Пример 1: использование только resize
console.log(preview(workers, url, '200x200'))
// Результат: //server1.example.com/r/200x200/path/to/image.jpg

// Пример 2: использование resize и crop
console.log(preview(workers, url, '300x300', 'center'))
// Результат: //server2.example.com/r/300x300/c/center/path/to/image.jpg

// Пример 3: пустой список рабочих серверов
console.log(preview([], url))
// Результат: path/to/image.jpg
```

### Аргументы функции

- **`workers`** (обязательный): список строк, идентифицирующих доступные рабочие серверы.
- **`url`** (обязательный): строка, представляющая путь к исходному изображению.
- **`resize`** (опциональный): строка для указания нового размера изображения. Например, `90x90`, `300x300`.
- **`crop`** (опциональный): строка для указания метода или области обрезки, например, `'center'`.

### Возвращаемое значение

Функция возвращает:
- Формированный URL с рабочим сервером и параметрами (resize, crop),
- Или исходный `url`, если список рабочих серверов пуст.

## Установка

Для использования функции в своем проекте установите зависимости и импортируйте модуль:

```bash
npm install
```

Или, если используется `yarn`:

```bash
yarn install
```
npm package: @retailcrm/vue-formulario
Description: Vue Formulario is a library, inspired by <a href="https://vueformulate.com">Vue Formulate</a>, that handles the core logic for working with forms and gives full control on the form presentation.
Author: RetailDriverLLC
Latest version: 0.8.3

## What is Vue Formulario?

Vue Formulario is a library, inspired by <a href="https://vueformulate.com">Vue Formulate</a>, that handles the core logic
for working with forms and gives full control on the form presentation.

## Examples

Every form control have to rendered inside FormularioField component. This component provides `id` and `context` in
v-slot props. Control should use `context.model` as v-model and `context.runValidation` as handler for `blur` event
(it is necessary for validation when property `validationBehavior` is `demand`). Errors list for a field can be
accessed through `context.allErrors`.

The example below creates the authorization form from data:
```json
{
    "username": "",
    "password": "",
    "options": {
        "anonymous": false,
        "tags": ["test"]
    }
}
```

```html
<FormularioForm
    v-model="formData"
    name="formName"
>
    <FormularioField
        v-slot="{ context }"
        name="username"
        validation="required|email"
        validation-behavior="live"
    >
        <input
            v-model="context.model"
            type="text"
            @blur="context.runValidation"
        >
        <div v-if="context.allErrors.length > 0">
            <span
                v-for="(error, index) in context.allErrors"
                :key="index"
            >
                {{ error }}
            </span>
        </div>
    </FormularioField>

    <FormularioField
        v-slot="{ context }"
        name="password"
        validation="required|min:4,length"
    >
        <input
            v-model="context.model"
            type="password"
        >
    </FormularioField>

    <FormularioFieldGroup name="options">
        <FormularioField
            v-slot="{ context }"
            name="anonymous"
        >
            <div>
                <input
                    id="options-anonymous"
                    v-model="context.model"
                    type="checkbox"
                >
                <label for="options-anonymous">As anonymous</label>
            </div>
        </FormularioField>
    </FormularioFieldGroup>

    <FormularioField
        v-slot="{ context }"
        name="options.tags[0]"
    >
        <input
            v-model="context.model"
            type="text"
        >
    </FormularioField>
</FormularioForm>
```

## License

[MIT](https://opensource.org/licenses/MIT)

Copyright (c) 2020-present, [RetailDriver LLC](https://www.retailcrm.pro) <br>
Copyright (c) 2020-present, [Braid LLC](https://www.wearebraid.com/)
npm package: @retailify/ngx-mat-numberpicker
Description: Angular numberpicker component based on Angular Material.
Author: Retailify GmbH
Latest version: 1.0.1

# ngx-mat-numberpicker

Angular numberpicker component based on Angular Material.

![alt example image](https://github.com/retailify/ngx-mat-numberpicker/blob/master/images/example.png)

## Installation

To install this library (component), run:

Using npm:
```bash
$ npm install @retailify/ngx-mat-numberpicker --save
```

Using yarn:
```bash
$ yarn add @retailify/ngx-mat-numberpicker
```

## Consuming this library (component)

You can import this library (component) in any Angular application by running:

Using npm:
```bash
$ npm install @retailify/ngx-mat-numberpicker
```

Using yarn:
```bash
$ yarn add @retailify/ngx-mat-numberpicker
```

and then from your Angular `AppModule`:

```typescript
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

// Import this library
import { NumberPickerModule } from '@retailify/ngx-mat-numberpicker';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    
    // Specify this library as an import
    NumberPickerModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
```

Once this library is imported, you can use its components, directives and pipes in your Angular application:

```xml
<!-- You can now use this library component in app.component.html -->
<h1>
  {{title}}
</h1>
<ngx-mat-numberpicker [min]="1" [max]="6" [default]="1" [starttext]="'Hello World'" [endtext]="'Hello World'" [disabled]="true" (onChange)="onValueChanged($event)"></ngx-mat-numberpicker>
```

```typescript
class YourClass {
    currentValue: number = 1;
    
    onValueChanged(value: number): void {
        this.currentValue = value;
    }
}
```
### Component Inputs and Outputs ###
| Attribute        | Type           | Required  | Description |
| :------------- |:-------------| :-----:| :-----|
| min | [input] Number | No | The minimal number limit on the number picker. 0 by default |
| max | [input] Number | No | The maximum number limit on the number picker. 50 by default |
| default | [input] Number | No | The default value for the number picker. 0 by default |
| starttext | [input] String | No | The value for the hint starttext of the inputfield. Empty by default |
| endtext | [input] String | No | The value for the hint endtext of the inputfield. Empty by default |
| disabled | [input] Boolean | No | Defines if the input input field should be disabled / enabled by the user. false by default |
| onChange | (output) Number | No | The onChange event of the component. Emits the value of the number picker, every time the user has clicked the - or + button. |

## Development

To generate all `*.js`, `*.d.ts` and `*.metadata.json` files:

```bash
$ npm run build
```

To lint all `*.ts` files:

```bash
$ npm run lint
```

To run demo:

```bash
$ npm run playground
```

## License

MIT © [Retailify GmbH](mailto:info@retailify.de)
npm package: @retailmenot/common-handlebars-helpers
Description: common, general purpose handlebars helpers used by RetailMeNot applications
Latest version: 0.5.0

@retailmenot/common-handlebars-helpers
======================================


[![Build Status](https://travis-ci.org/RetailMeNotSandbox/common-handlebars-helpers.svg?branch=master)](https://travis-ci.org/RetailMeNotSandbox/common-handlebars-helpers)

> common, general purpose handlebars helpers used by RetailMeNot applications

## Quickstart

```sh
$ npm install --save @retailmenot/common-handlebars-helpers
```

Then, in your application:

```js
const commonHelpers = require('@retailmenot/common-handlebars-helpers')
const handlebars = require('handlebars')

handlebars.registerHelper(commonHelpers)
```


## Webpack

For use in the browser via webpack, use the [`handlebars-loader`] module add
this package's `helpers` directory to the `helpersDir` config array:

```js
// webpack.config.js
const path = require('path')
const handlebarsLoader = require('handlebars-loader')

const moduleDirectory = path.dirname(require.resolve('@retailmenot/common-handlebars-helpers'))
const helpersDirectory = path.join(moduleDirectory, 'helpers')

module.exports = {

  // entry, output ...

  module: {
    loaders: [{
      test: /\.hbs$/,
      loader: handlebarsLoader,
      query: {
        helperDirs: [
          helpersDirectory
        ]
      }
    }]
  }
}
```


[`handlebars-loader`]: https://github.com/pcardune/handlebars-loader
npm package: @retailmenot/core-ui-editorconfig
Description: .editorconfig for RetailMeNot Core UI projects
Author: RMN Engineering
Latest version: 1.0.2

# @retailmenot/core-ui-editorconfig

An .editorconfig for RetailMeNot Core UI projects.

# Installation

```
npm install @retailmenot/core-ui-editorconfig
```

## Usage

The easiest way to use this package is add a soft link in the root of your
project:

```
ln -s ./node_modules/@retailmenot/core-ui-editorconfig/.editorconfig
```

Conveniently, this link can be checked into git.
npm package: @retailmenot/core-ui-eslintrc
Description: ESLint rules for RetailMeNot Core UI projects
Latest version: 7.0.0

# @retailmenot/core-ui-eslintrc

ESLint rules for RetailMeNot Core UI projects.

# Installation

```
npm install @retailmenot/core-ui-eslintrc
```

# Usage

## ES5

Include this module as a dependency in your package.json, then add an `extends`
rule to your `.eslintrc`. You may also add rules to your `.eslintrc` to override
the defaults pulled in from this project.

```
{
  extends: "./node_modules/@retailmenot/core-ui-eslintrc/.eslintrc"
}
```

## ES6

Same as ES5, but specify the ES6 ruleset in the `extends` rule:

```
{
    extends: "./node_modules/@retailmenot/core-ui-eslintrc/.eslintrc-es6"
}
```
npm package: @retailmenot/core-ui-gitignore
Description: .gitignore for RetailMeNot Core UI projects
Author: RMN Engineering
Latest version: 1.0.2

# @retailmenot/core-ui-gitignore

A `.gitignore` for RetailMeNot Core UI projects.

# Installation

```
npm install @retailmenot/core-ui-gitignore
```

# Usage

The easiest way to use this package is add a soft link in the root of your
project:

```
ln -s ./node_modules/@retailmenot/core-ui-gitignore/gitignore .gitignore
```

Conveniently, this link can be checked into git.

## Why is the file in this repo called `gitignore` instead of `.gitignore`?

Because of a bug or undocumented behavior in npm that prevents publishing
`.gitignore`.
npm package: @retailmenot/grunt-orphans
Description: Grunt multi-task for discovering orphaned files in a JS directory.
Author: RetailMeNot Engineering
Latest version: 1.0.2
Deprecated: Package No Longer Supported. Use at your own risk.

# @retailmenot/grunt-orphans

Grunt multi-task for discovering orphaned files in a JS directory.

This task is designed to help you identify unused files that exist in a project's JS directories; files that are no longer referenced as dependencies by your entrypoints, but remain in the filesystem.

## Installation

```bash
npm install --save-dev grunt @retailmenot/grunt-orphans
```

## Configuration

In your Gruntfile:

```javascript
orphans: {
	options: {
		// List of file extensions you want to consider
		// when discovering orphans
		fileExtensions: ['.js', '.hbs'],
		// List of files, that, even if detected as orphans
		// will not result in the task failing. Useful if you
		// reference or use some files in your app that are
		// not dependencies of your greater JS build.
		whitelist: [
			// do not complain if
			'scripts/third-party/**/*.js'
		]
	},
	main: {
		options: {
		  // Path to your webpack.config.js (optional).
		  // This will help madge with path resolution
		  // and module aliasing as it walks your dependencies
		  webpackConfig: 'path/to/webpack.config.js',
		  // The directory from which module references
		  // in your codebase are relative.
		  baseDir: 'scripts/',
		  // Glob for all of the files that should be
		  // treated as entrypoints and serve as the
		  // starting point for madge to discover your
		  // codebase's dependencies.
		  entryFileGlob: 'scripts/pages/*.js'
		},
		// Tells the task the list of files to look at. It will
		// complain about any files specified in this array that
		// are not in the dependency tree for any files matching
		// options.entryFileGlob.
		files: {
			expand: true,
			cwd: 'scripts',
			src: ['**/*.js', '**/*.hbs']
		}
	}
}
```

## Sample Run

```bash
# create an orphaned file in your scripts directory
$ touch scripts/orphan.js
$ grunt orphans
Running "orphans:main" (orphans) task
>> Oprhaned file: scripts/orphan.js
Warning: Found 1 orphaned files. Use --force to continue.

Aborted due to warnings.
# Remove the script
$ rm scripts/orphan.js
$ grunt orphans
Running "orphans:main" (orphans) task

Done.
```
npm package: @retailmenot/roux-handlebars-tools
Description: Tools for working with Roux ingredient Handlebars templates
Author: RMN Engineering
Latest version: 3.3.0

# @retailmenot/roux-handlebars-tools

This module provides tools for working with Roux ingredients that provide
a Handlebars entry point.

[![Build Status](https://travis-ci.org/RetailMeNotSandbox/roux-handlebars-tools.svg?branch=master)](https://travis-ci.org/RetailMeNotSandbox/roux-handlebars-tools)
[![Coverage Status](https://coveralls.io/repos/github/RetailMeNotSandbox/roux-handlebars-tools/badge.svg?branch=master)](https://coveralls.io/github/RetailMeNotSandbox/roux-handlebars-tools?branch=master) 

## Installation

```sh
npm install @retailmenot/roux-handlebars-tools
```

## API

### `resolvePartialName`

Get a path to the file referenced by the partialName

- `partialName` - the name of the partial to locate
- `config` - optional configuration object
  - `config.extensions` - optional array of extensions to try when looking for
      partials; defaults to `['hbs', 'handlebars']`
  - `config.pantries` - an optional cache of `Pantry` instances
  - `config.pantrySearchPaths` - optional array of paths to search for pantries
      in if not found in the cache; defaults to `['$CWD/node_modules']`
  - `config.partials - an optional map of partial names to Handlebars source
      code; the partials will be processed if transitively depended on, but will
      not appear in the result
  - `config.partialSearchPaths` - optional array of paths to search for partials
      in the filesystem; defaults to `['$CWD']`

### `getPartialDependencies`

This method returns a promise of a map from the names of all partials a template
transitively depends on to their absolute path in the filesystem.

It accepts an optional map of partials as `config.partials`. These will be
explored if transitively depended on, but members of `config.partials` will not
be included in the result.

- `template` - the source code of a Handlebars template
- `config` - optional configuration object
  - `config.extensions` - optional array of extensions to try when looking for
      partials; defaults to `['hbs', 'handlebars']`
  - `config.pantries` - an optional cache of `Pantry` instances
  - `config.pantrySearchPaths` - optional array of paths to search for pantries
      in if not found in the cache; defaults to `['$CWD/node_modules']`
  - `config.partials - an optional map of partial names to Handlebars source
      code; the partials will be processed if transitively depended on, but will
      not appear in the result
  - `config.partialSearchPaths` - optional array of paths to search for partials
      in the filesystem; defaults to `['$CWD']`

#### Name resolution

This method will first attempt to resolve a prefix of the partial name as a Roux
ingredient. If able to do so, the partial name is assumed to refer to a template
in that ingredient. It will then attempt to get its absolute path, failing if
the file doesn't exist.

If unable to resolve a prefix as a Roux ingredient, the method attempts to find
the partial name relative to the paths in `config.partialSearchPaths`.
npm package: @retailmenot/roux-resolver-webpack-plugin
Description: Webpack resolver plugin for resolving entrypoints within a roux pantry.
Author: RMN Engineering
Latest version: 3.2.0

# @retailmenot/roux-resolver-webpack-plugin

Webpack resolver plugin for resolving entrypoints within a
roux pantry.

[![Build Status](https://travis-ci.org/RetailMeNotSandbox/roux-resolver-webpack-plugin.svg?branch=master)](https://travis-ci.org/RetailMeNotSandbox/roux-resolver-webpack-plugin)

## Installation

```sh
npm install @retailmenot/roux-resolver-webpack-plugin
```

## Usage

Add the following to your webpack config.

```
var RouxResolverWebpackPlugin = require( '@retailmenot/roux-resolver-webpack-plugin' );
{
    // rest of webpack config
    plugins: [
        new webpack.ResolverPlugin( [
            new RouxResolverWebpackPlugin()
        ] )
    ]
}
```

This should enable you to `require` files within roux pantries using their ingredient name. e.g. `require('@namespace/pantry/path/to/ingredient')` will get you the JS entrypoint for the ingredient named by
`@namespace/pantry/path/to/ingredient`.

You can add a query string to your require statements to resolve filetypes other than the js entrypoint. e.g.
`require('@namespace/pantry/path/to/ingredient?entry=sass')` will get you the
scss entrypoint for the ingredient named by
`@namespace/pantry/path/to/ingredient`.

## Tests

Run unit tests with `npm run test`
npm package: @retailos-ai/cms-collection-group-plugin
Description: A plugin for Payload CMS to create collection groups
Latest version: 1.7.2

# Plugin

## Docs

 - [Testing Guide](./tests/README.md)
 - [Release Guide](./RELEASE_GUIDE.md)


## Steps to Create a New Plugin from Template

### 1. Clone the Repository

- HTTPS
```bash
git clone https://github.com/RetailOs-Cms-Plugins/plugin-template.git
cd plugin-template
```

- SSH
```bash
git clone git@github.com:RetailOs-Cms-Plugins/plugin-template.git
cd plugin-template
```

### 2. Clean Git History
```bash
# Remove existing Git history
rm -rf .git

# Initialize new repository
git init
git add .
git commit -m "Initial commit from template"
```

### 3. Connect to New Repository
```bash
# Add new remote
git remote add origin <new-repo-url>
git branch -M main
git push -u origin main
```

### 4. Update Dependencies to Latest Version
- Install dependencies
```bash
pnpm install
```

- Check for outdated dependencies
```bash
pnpm outdated
```

- Update all dependencies to latest versions
```bash
pnpm update
```



### 5. Run in Development Environment
- Start development environment
```bash
pnpm dev
```

- Test project build
```bash
pnpm build
```

## Additional Tips

- Make sure to update `package.json` with your new plugin details
- Update the `README.md` with documentation specific to your plugin
- Remove or update template-specific files that are not relevant
- Consider updating dependencies in `package.json` before first install