UNPKG

@umbraco/json-models-builders

Version:
165 lines (129 loc) 4.96 kB
# Umbraco.JsonModels.Builder A TypeScript library that provides builders for creating JSON models used with the Umbraco CMS backoffice. This package implements the [Builder Pattern](https://en.wikipedia.org/wiki/Builder_pattern) to simplify the creation of complex Umbraco configuration objects through a fluent API with sensible defaults. ## Prerequisites - Node.js 16.17.1 or higher - npm ## Installation ```bash npm install @umbraco/json-models-builders ``` ## Quick Start ```typescript import { DocumentTypeBuilder } from "@umbraco/json-models-builders"; // Create a document type with default values const documentType = new DocumentTypeBuilder().build(); // Create a document type with custom configuration const customDocType = new DocumentTypeBuilder() .withName("Blog Post") .withIcon("icon-newspaper") .withAllowedAsRoot(true) .addProperty() .withName("Title") .withDataTypeId("textstring-id") .withMandatory(true) .done() .build(); ``` ## Available Builders ### Document Types ```typescript const documentType = new DocumentTypeBuilder() .withName("Article") .withAlias("article") .withIcon("icon-document") .withAllowedAsRoot(true) .withVariesByCulture(true) .addProperty() .withName("Title") .withDataTypeId("datatype-id") .withMandatory(true) .withMandatoryMessage("Title is required") .done() .addContainer() .withName("Content") .withType("Tab") .done() .build(); ``` ### Data Types The library includes 38+ data type builders: | Category | Builders | |----------|----------| | **Text** | `TextStringDataTypeBuilder`, `TextAreaDataTypeBuilder`, `MultipleTextStringDataTypeBuilder` | | **Numbers** | `NumericDataTypeBuilder`, `DecimalDataTypeBuilder`, `SliderDataTypeBuilder` | | **Boolean** | `TrueFalseDataTypeBuilder` | | **Date/Time** | `DatePickerDataTypeBuilder`, `DateOnlyPickerDataTypeBuilder`, `TimeOnlyPickerDataTypeBuilder`, `DateTimePickerDataTypeBuilder`, `DateTimeWithTimeZonePickerDataTypeBuilder` | | **Selection** | `DropdownDataTypeBuilder`, `CheckboxListDataTypeBuilder`, `RadioboxDataTypeBuilder`, `TagsDataTypeBuilder` | | **Pickers** | `ContentPickerDataTypeBuilder`, `MultiNodeTreePickerDataTypeBuilder`, `MediaPickerDataTypeBuilder`, `EntityDataPickerDataTypeBuilder` | | **Rich Content** | `TinyMCEDataTypeBuilder`, `TiptapDataTypeBuilder`, `MarkdownEditorDataTypeBuilder`, `CodeEditorDataTypeBuilder` | | **Complex** | `BlockListDataTypeBuilder`, `BlockGridDataTypeBuilder`, `ImageCropperDataTypeBuilder`, `ListViewDataTypeBuilder` | | **Other** | `LabelDataTypeBuilder`, `EmailAddressDataTypeBuilder`, `MultiUrlPickerDataTypeBuilder`, `UploadFieldDataTypeBuilder`, `ApprovedColorDataTypeBuilder` | ```typescript const blockGrid = new BlockGridDataTypeBuilder() .withName("Page Layout") .addBlock() .withContentElementTypeKey("hero-element-key") .withLabel("Hero Section") .withAllowAtRoot(true) .done() .build(); ``` ### Documents & Value Builders ```typescript import { DocumentBuilder, BlockListValueBuilder } from "@umbraco/json-models-builders"; const document = new DocumentBuilder() .withDocumentTypeId("document-type-id") .addValue() .withAlias("title") .withValue("My Page Title") .done() .addVariant() .withCulture("en-US") .withName("English Version") .done() .build(); // For complex property values const blockListValue = new BlockListValueBuilder() .addContentData() .withContentTypeKey("element-key") .done() .build(); ``` Also available: `BlockGridValueBuilder`, `MediaPickerValueBuilder`, `URLPickerValueBuilder`, `ImageCropperValueBuilder` ### Other Builders | Builder | Purpose | |---------|---------| | `MediaTypeBuilder` / `MediaBuilder` | Media definitions and instances | | `MemberTypeBuilder` / `MemberBuilder` | Member definitions and instances | | `UserBuilder` / `UserGroupBuilder` | User management with granular permissions | | `WebhookBuilder` | Webhook configuration | | `PackageBuilder` | Package creation with all asset types | | `DocumentBlueprintsBuilder` | Content templates | | `DocumentDomainBuilder` | Multi-domain/culture configuration | ## Builder Conventions | Method | Purpose | |--------|---------| | `with*()` | Set a property | | `add*()` | Create and add a child builder | | `build()` | Construct the final JSON object | | `done()` | Return to parent builder | ## Contributing We welcome contributions! If you find any model or builder missing, please create an issue or open a PR. ### Local Development ```bash npm install npm run build ``` ### Testing Locally ```bash npm run build npm pack # In your project: npm install /path/to/umbraco-json-models-builders-2.0.42.tgz ``` ## License MIT ## Links - [GitHub Repository](https://github.com/umbraco/Umbraco.JsonModels.Builders) - [npm Package](https://www.npmjs.com/package/@umbraco/json-models-builders) - [Umbraco CMS](https://umbraco.com)