Developer
brrichards
brrichards@microsoft.com
Performance
Key patterns and highlights from this developer's activity.
Breakdown of growth, maintenance, and fixes effort over time.
Bugs introduced vs. fixed over time.
No bugs introduced or fixed in this period.
Latest analyzed commits from this developer.
| Hash | Message | Date | Files | Effort |
|---|---|---|---|---|
| e3bdb32 | This commit performs a **significant refactoring** by introducing a new package, **`@fluidframework/type-factory`**, to resolve a **circular dependency** between **`@fluidframework/tree-agent`** and **`@fluidframework/tree`**. It extracts core type factory definitions and non-tree-dependent functions related to method and property binding, such as `buildFunc` and `TypeFactoryType`, from **`@fluidframework/tree-agent`** into this new, independent package. This **improves modularity** and unblocks future development, specifically enabling the exposure of text APIs to `tree-agent`. The new package is carefully placed in the `Runtime` layer to maintain proper architectural layering, necessitating updates to API reports, tests, and import paths across the **`tree-agent`** codebase. | Mar 31 | 46 | grow |
| 6e7a736 | This commit introduces **new capabilities** for the **formatted text domain**, significantly expanding the types of structured content supported. It adds **`LineTag` support** for ordered lists, checklists, code blocks, and blockquotes, alongside an **optional `indent` field to `StringLineAtom`** to manage indentation for these new line types. The changes involve updating the core `textDomainFormatted` schema and adjusting the `quillFormattedView` logic to correctly parse and render these new attributes from Quill deltas. This enhancement provides richer text formatting options and ensures proper display within the `FormattedTextEditorView`. | Mar 27 | 6 | grow |
| 598ca5b | This commit **refactors** the **Fluid Framework React components** by **extracting Quill-specific components** into a new, dedicated package, `@fluidframework/quill-react`. This **architectural change** resolves a **bug fix** where the original `@fluidframework/react` package implicitly required a DOM environment on import due to its Quill dependencies, improving module isolation and reducing unnecessary dependencies for consumers. Specifically, `quillFormattedView.tsx` and `quillView.tsx` are moved, and the `inventory-app`'s JSDOM fix is removed. This constitutes a **breaking change** for internal consumers of Quill components from `@fluidframework/react/internal`, who must now update their imports to the new `@fluidframework/quill-react` package. | Mar 25 | 38 | maint |
| f2b0cf9 | This commit introduces a **new capability** by adding a `splice` method to the **`TreeArrayNodeAlpha`** interface within the **`@fluidframework/tree`** package. This method, which mirrors `Array.prototype.splice` semantics, allows for atomic removal and insertion of items, supporting optional `deleteCount` and negative `start` indices. It wraps these operations in a transaction for robust undo/redo functionality on hydrated nodes. Users can access this enhanced array manipulation by opting into the alpha API via the `asAlpha()` function, providing a more flexible way to modify `TreeArrayNode` instances. | Mar 24 | 13 | grow |
| 7524966 | update examples to have tinylicious (#26803) | Mar 24 | 16 | – |
| 2be9198 | This commit introduces a significant **performance optimization** for **deep comparison of formatted text** within the `dds/tree` package, specifically targeting the `buildDeltaFromTree` function used in the **Quill integration**. It refactors the text processing from a character-by-character approach to a more efficient run-based comparison by adding new cursor-based APIs, `getUniformRun` and `getString`, to `FormattedTextAsTree.Tree`. This change drastically reduces redundant calls to `formatToQuillAttributes` and `JSON.stringify`, leading to improved performance when generating deltas for formatted text. Additionally, a new general **tree comparison utility** is introduced in `packages/dds/tree/src/feature-libraries/cursorComparator.ts`, providing foundational improvements for tree operations. This work enhances the responsiveness of applications dealing with rich text editing by optimizing core text processing logic. | Mar 20 | 6 | grow |
| 6e5e09d | This commit **fixes a casing error** within the **Tinylicious getting started instructions**, specifically updating the `exampleGettingStartedTransform.cjs` file to generate the command `pnpm tinylicious` with correct lowercase. This **documentation maintenance** ensures that users receive accurate commands when setting up and running the **Tinylicious** service. The change improves the clarity and usability of the project's onboarding process by providing consistent and correct instructions. | Mar 16 | 19 | maint |
| 8ee332a | This commit **adds new capabilities** to the **Quill-based formatted text editor** by introducing comprehensive support for **header (h1-h5) and unordered list formatting**. It integrates `StringLineAtom` for line-level formatting, enabling the conversion between Quill attributes and `FormattedTextAsTree` line atoms, and updates the `buildDeltaFromTree` logic to correctly emit Quill delta operations for these new formats. The **user interface** is enhanced with new toolbar buttons for headers and bullet lists, alongside CSS fixes for bullet point alignment. This significantly expands the editor's text formatting options, allowing users to create richer, more structured content. New tests ensure the robustness of the line tag parsing and delta conversion. | Mar 12 | 2 | grow |
| 40f4d60 | This commit provides crucial **documentation updates** to improve the **developer experience** when running examples, particularly within **Codespaces**. It clarifies that `Tinylicious` is a prerequisite for certain examples, updating the `README.md` for `examples/data-objects/text-editor` and modifying the `tools/markdown-magic` utility to auto-generate correct `Tinylicious` startup instructions. The changes include specific guidance on how to manage `Tinylicious` port visibility within a `Codespaces` environment, ensuring developers can successfully set up and run these examples. This is a **maintenance** task that directly impacts the ease of use for new and existing contributors. | Mar 3 | 19 | maint |
| 5303252 | This commit **enhances the text editor example's copy/paste functionality** by ensuring that **font size and family are retained** when pasting formatted text. Previously, only bold, italic, and underline styles were preserved, leading to inconsistent formatting. The change integrates Quill's built-in clipboard module within `quillFormattedView.tsx` and introduces helper functions to parse and apply font attributes, significantly improving the fidelity of pasted content within the **text editing experience**. | Feb 23 | 3 | – |
| b1b25b9 | This commit introduces **undo/redo functionality** to the **formatted text editor**, leveraging **SharedTree's `Revertible` API** and the **Alpha transaction API**. It **wraps all Quill editor operations in transactions** to ensure complex edits, such as combined insertions and deletions, are treated as atomic units for undo/redo. This **new capability** significantly enhances the user experience by providing reliable history management, complete with dedicated toolbar buttons. The implementation manages separate undo/redo stacks of `Revertible` objects and disables Quill's built-in history module to prevent conflicts. | Feb 17 | 7 | – |
| eec5a71 | This commit introduces a **new capability** by adding **GitHub Codespaces compatibility** for **Fluid examples utilizing Tinylicious**. It **enables developers to run and test Tinylicious-based Fluid applications directly within Codespaces** by automatically detecting the environment and resolving Tinylicious endpoints to use forwarded port URLs instead of hardcoded `localhost`. The **`@fluidframework/tinylicious-driver`** now includes a `getTinyliciousEndpoint()` helper and updates `createInsecureTinyliciousTestUrlResolver()` to leverage this detection, while `webpack-fluid-loader`'s `tinyliciousUrls()` is also updated for Codespaces detection. This change impacts various **example applications** like `tablebench` and `todo-list`, significantly improving the development workflow and accessibility for Fluid examples in cloud-based environments. | Feb 4 | 12 | grow |
| 115117c | This commit **refactors** the **text-editor example's file structure** by consolidating related configuration and factory logic within the `formatted/` directory. It merges `formattedSchema.ts` and `formattedTextEditorFactory.ts` into the `quillFormattedView.tsx` component, reducing file count and improving organization. This **cleanup** also removes an unnecessary export of `formattedTreeConfiguration` and updates import paths in `src/index.ts` and `src/test/textEditor.test.tsx` to reflect the new consolidated structure. The change streamlines the example's internal architecture, making it more maintainable. | Jan 30 | 14 | – |
| 20ad2af | This commit **updates documentation** within the **`simple-tree`** package, specifically for the `push` method in `arrayNode.ts`. The JSDoc for the `push` API has been revised to explicitly clarify the merge semantics when items are inserted concurrently. This **documentation update** addresses potential developer confusion by specifying what behavior is undefined, thereby improving the clarity and precision of the **`arrayNode`** API documentation for users of the `simple-tree` data structure. | Jan 30 | 1 | maint |
| 0f09764 | This commit introduces **rich text editing** capabilities by integrating `FormattedTextAsTree` with Quill, adding a significant **new capability** to the project's text editor examples. It includes a **new dual-user collaborative testing application** (`app.tsx`) that allows runtime switching between plain and formatted text views, consolidating previous `start` scripts and enabling build-time view selection. Existing plain text components are **reorganized** into a `plain/` directory, while new formatted text components reside in `formatted/`, improving the **structure and testability** of the text editor examples. This enhancement provides a robust example for implementing rich text and facilitates collaborative testing within the `app.tsx` framework. | Jan 29 | 26 | – |
| e2ed71b | This commit introduces a **new `push` method** to the **`TreeArrayNode` API** within the **Fluid Framework's `simple-tree` package**, serving as a convenient alias for `insertAtEnd`. This **enhances API usability** by providing a familiar JavaScript array-like method, reducing friction for both human developers and LLMs interacting with shared tree arrays. The implementation delegates directly to `insertAt(this.length, ...)`, and its JSDoc explicitly notes that merge semantics for concurrent inserts/moves to the same position are unspecified, and it does not return the new length. This **feature addition** improves the developer experience and makes the API more intuitive, with new tests verifying its functionality alongside existing array insertion methods. | Jan 28 | 13 | grow |
| b9c124f | This commit **updates the documentation** for the **`inventory-app` example**, specifically its `README.md` file. It **removes outdated testing instructions**, such as `npm run test:jest`, to accurately reflect the current testing structure. This **maintenance** task ensures that users following the example will encounter correct and up-to-date guidance for running tests, improving the usability and accuracy of the example application's setup. | Jan 28 | 2 | – |
| c00f2c7 | This commit **enforces** the `unicorn/prefer-export-from` ESLint rule within the **`@fluidframework/tree`** package by removing its global override. It **refactors** various re-export statements, notably converting the `clone` function's export to `export { default as clone } from` for compliance. To prevent breaking API-Extractor or altering the public API, inline disable comments were strategically added for specific re-exports like `schemaFormatV1`, `schemaFormatV2`, `SequenceField`, and `InternalTypes`. This **maintenance** task is part of a broader initiative to eliminate global ESLint rule overrides, ensuring improved code consistency and adherence to best practices without any functional or public API impact. | Jan 26 | 4 | maint |
| a5a2d80 | This commit performs **maintenance** by re-enabling the `unicorn/no-await-expression-member` ESLint rule within the **`packages/tree`** module. This rule, which was previously active but became unintentionally disabled, is now restored to ensure consistent **code quality enforcement**. By enforcing proper `await` expression usage, this change helps prevent potential runtime issues and improves the overall maintainability of the `packages/tree` codebase. The re-activation of this rule impacts the **ESLint configuration** for the `tree` package, ensuring adherence to established coding standards. | Jan 26 | 2 | – |
| 490816d | This commit performs a **style and maintenance refactoring** within the **`@fluidframework/tree` package** by enabling the `unicorn/text-encoding-identifier-case` ESLint rule. It updates text encoding parameters from `"utf-8"` to `"utf8"` in core summarizer and snapshot utility functions, such as `load` and `loadSummaryData`, to align with preferred Node.js encoding identifiers. This effort removes a global ESLint override, enhancing code consistency and adherence to linting standards. An inline ESLint disable comment was strategically added in `src/test/snapshots/utils.ts` to preserve existing snapshot test data and avoid a large-scale regeneration of 204 snapshot files. | Jan 26 | 5 | maint |
This commit performs a **significant refactoring** by introducing a new package, **`@fluidframework/type-factory`**, to resolve a **circular dependency** between **`@fluidframework/tree-agent`** and **`@fluidframework/tree`**. It extracts core type factory definitions and non-tree-dependent functions related to method and property binding, such as `buildFunc` and `TypeFactoryType`, from **`@fluidframework/tree-agent`** into this new, independent package. This **improves modularity** and unblocks future development, specifically enabling the exposure of text APIs to `tree-agent`. The new package is carefully placed in the `Runtime` layer to maintain proper architectural layering, necessitating updates to API reports, tests, and import paths across the **`tree-agent`** codebase.
This commit introduces **new capabilities** for the **formatted text domain**, significantly expanding the types of structured content supported. It adds **`LineTag` support** for ordered lists, checklists, code blocks, and blockquotes, alongside an **optional `indent` field to `StringLineAtom`** to manage indentation for these new line types. The changes involve updating the core `textDomainFormatted` schema and adjusting the `quillFormattedView` logic to correctly parse and render these new attributes from Quill deltas. This enhancement provides richer text formatting options and ensures proper display within the `FormattedTextEditorView`.
This commit **refactors** the **Fluid Framework React components** by **extracting Quill-specific components** into a new, dedicated package, `@fluidframework/quill-react`. This **architectural change** resolves a **bug fix** where the original `@fluidframework/react` package implicitly required a DOM environment on import due to its Quill dependencies, improving module isolation and reducing unnecessary dependencies for consumers. Specifically, `quillFormattedView.tsx` and `quillView.tsx` are moved, and the `inventory-app`'s JSDOM fix is removed. This constitutes a **breaking change** for internal consumers of Quill components from `@fluidframework/react/internal`, who must now update their imports to the new `@fluidframework/quill-react` package.
This commit introduces a **new capability** by adding a `splice` method to the **`TreeArrayNodeAlpha`** interface within the **`@fluidframework/tree`** package. This method, which mirrors `Array.prototype.splice` semantics, allows for atomic removal and insertion of items, supporting optional `deleteCount` and negative `start` indices. It wraps these operations in a transaction for robust undo/redo functionality on hydrated nodes. Users can access this enhanced array manipulation by opting into the alpha API via the `asAlpha()` function, providing a more flexible way to modify `TreeArrayNode` instances.
update examples to have tinylicious (#26803)
This commit introduces a significant **performance optimization** for **deep comparison of formatted text** within the `dds/tree` package, specifically targeting the `buildDeltaFromTree` function used in the **Quill integration**. It refactors the text processing from a character-by-character approach to a more efficient run-based comparison by adding new cursor-based APIs, `getUniformRun` and `getString`, to `FormattedTextAsTree.Tree`. This change drastically reduces redundant calls to `formatToQuillAttributes` and `JSON.stringify`, leading to improved performance when generating deltas for formatted text. Additionally, a new general **tree comparison utility** is introduced in `packages/dds/tree/src/feature-libraries/cursorComparator.ts`, providing foundational improvements for tree operations. This work enhances the responsiveness of applications dealing with rich text editing by optimizing core text processing logic.
This commit **fixes a casing error** within the **Tinylicious getting started instructions**, specifically updating the `exampleGettingStartedTransform.cjs` file to generate the command `pnpm tinylicious` with correct lowercase. This **documentation maintenance** ensures that users receive accurate commands when setting up and running the **Tinylicious** service. The change improves the clarity and usability of the project's onboarding process by providing consistent and correct instructions.
This commit **adds new capabilities** to the **Quill-based formatted text editor** by introducing comprehensive support for **header (h1-h5) and unordered list formatting**. It integrates `StringLineAtom` for line-level formatting, enabling the conversion between Quill attributes and `FormattedTextAsTree` line atoms, and updates the `buildDeltaFromTree` logic to correctly emit Quill delta operations for these new formats. The **user interface** is enhanced with new toolbar buttons for headers and bullet lists, alongside CSS fixes for bullet point alignment. This significantly expands the editor's text formatting options, allowing users to create richer, more structured content. New tests ensure the robustness of the line tag parsing and delta conversion.
This commit provides crucial **documentation updates** to improve the **developer experience** when running examples, particularly within **Codespaces**. It clarifies that `Tinylicious` is a prerequisite for certain examples, updating the `README.md` for `examples/data-objects/text-editor` and modifying the `tools/markdown-magic` utility to auto-generate correct `Tinylicious` startup instructions. The changes include specific guidance on how to manage `Tinylicious` port visibility within a `Codespaces` environment, ensuring developers can successfully set up and run these examples. This is a **maintenance** task that directly impacts the ease of use for new and existing contributors.
This commit **enhances the text editor example's copy/paste functionality** by ensuring that **font size and family are retained** when pasting formatted text. Previously, only bold, italic, and underline styles were preserved, leading to inconsistent formatting. The change integrates Quill's built-in clipboard module within `quillFormattedView.tsx` and introduces helper functions to parse and apply font attributes, significantly improving the fidelity of pasted content within the **text editing experience**.
This commit introduces **undo/redo functionality** to the **formatted text editor**, leveraging **SharedTree's `Revertible` API** and the **Alpha transaction API**. It **wraps all Quill editor operations in transactions** to ensure complex edits, such as combined insertions and deletions, are treated as atomic units for undo/redo. This **new capability** significantly enhances the user experience by providing reliable history management, complete with dedicated toolbar buttons. The implementation manages separate undo/redo stacks of `Revertible` objects and disables Quill's built-in history module to prevent conflicts.
This commit introduces a **new capability** by adding **GitHub Codespaces compatibility** for **Fluid examples utilizing Tinylicious**. It **enables developers to run and test Tinylicious-based Fluid applications directly within Codespaces** by automatically detecting the environment and resolving Tinylicious endpoints to use forwarded port URLs instead of hardcoded `localhost`. The **`@fluidframework/tinylicious-driver`** now includes a `getTinyliciousEndpoint()` helper and updates `createInsecureTinyliciousTestUrlResolver()` to leverage this detection, while `webpack-fluid-loader`'s `tinyliciousUrls()` is also updated for Codespaces detection. This change impacts various **example applications** like `tablebench` and `todo-list`, significantly improving the development workflow and accessibility for Fluid examples in cloud-based environments.
This commit **refactors** the **text-editor example's file structure** by consolidating related configuration and factory logic within the `formatted/` directory. It merges `formattedSchema.ts` and `formattedTextEditorFactory.ts` into the `quillFormattedView.tsx` component, reducing file count and improving organization. This **cleanup** also removes an unnecessary export of `formattedTreeConfiguration` and updates import paths in `src/index.ts` and `src/test/textEditor.test.tsx` to reflect the new consolidated structure. The change streamlines the example's internal architecture, making it more maintainable.
This commit **updates documentation** within the **`simple-tree`** package, specifically for the `push` method in `arrayNode.ts`. The JSDoc for the `push` API has been revised to explicitly clarify the merge semantics when items are inserted concurrently. This **documentation update** addresses potential developer confusion by specifying what behavior is undefined, thereby improving the clarity and precision of the **`arrayNode`** API documentation for users of the `simple-tree` data structure.
This commit introduces **rich text editing** capabilities by integrating `FormattedTextAsTree` with Quill, adding a significant **new capability** to the project's text editor examples. It includes a **new dual-user collaborative testing application** (`app.tsx`) that allows runtime switching between plain and formatted text views, consolidating previous `start` scripts and enabling build-time view selection. Existing plain text components are **reorganized** into a `plain/` directory, while new formatted text components reside in `formatted/`, improving the **structure and testability** of the text editor examples. This enhancement provides a robust example for implementing rich text and facilitates collaborative testing within the `app.tsx` framework.
This commit introduces a **new `push` method** to the **`TreeArrayNode` API** within the **Fluid Framework's `simple-tree` package**, serving as a convenient alias for `insertAtEnd`. This **enhances API usability** by providing a familiar JavaScript array-like method, reducing friction for both human developers and LLMs interacting with shared tree arrays. The implementation delegates directly to `insertAt(this.length, ...)`, and its JSDoc explicitly notes that merge semantics for concurrent inserts/moves to the same position are unspecified, and it does not return the new length. This **feature addition** improves the developer experience and makes the API more intuitive, with new tests verifying its functionality alongside existing array insertion methods.
This commit **updates the documentation** for the **`inventory-app` example**, specifically its `README.md` file. It **removes outdated testing instructions**, such as `npm run test:jest`, to accurately reflect the current testing structure. This **maintenance** task ensures that users following the example will encounter correct and up-to-date guidance for running tests, improving the usability and accuracy of the example application's setup.
This commit **enforces** the `unicorn/prefer-export-from` ESLint rule within the **`@fluidframework/tree`** package by removing its global override. It **refactors** various re-export statements, notably converting the `clone` function's export to `export { default as clone } from` for compliance. To prevent breaking API-Extractor or altering the public API, inline disable comments were strategically added for specific re-exports like `schemaFormatV1`, `schemaFormatV2`, `SequenceField`, and `InternalTypes`. This **maintenance** task is part of a broader initiative to eliminate global ESLint rule overrides, ensuring improved code consistency and adherence to best practices without any functional or public API impact.
This commit performs **maintenance** by re-enabling the `unicorn/no-await-expression-member` ESLint rule within the **`packages/tree`** module. This rule, which was previously active but became unintentionally disabled, is now restored to ensure consistent **code quality enforcement**. By enforcing proper `await` expression usage, this change helps prevent potential runtime issues and improves the overall maintainability of the `packages/tree` codebase. The re-activation of this rule impacts the **ESLint configuration** for the `tree` package, ensuring adherence to established coding standards.
This commit performs a **style and maintenance refactoring** within the **`@fluidframework/tree` package** by enabling the `unicorn/text-encoding-identifier-case` ESLint rule. It updates text encoding parameters from `"utf-8"` to `"utf8"` in core summarizer and snapshot utility functions, such as `load` and `loadSummaryData`, to align with preferred Node.js encoding identifiers. This effort removes a global ESLint override, enhancing code consistency and adherence to linting standards. An inline ESLint disable comment was strategically added in `src/test/snapshots/utils.ts` to preserve existing snapshot test data and avoid a large-scale regeneration of 204 snapshot files.
Commit activity distribution by hour and day of week. Shows when this developer is most active.
Developers who frequently work on the same files and symbols. Higher score means stronger code collaboration.