Skip to content

feat: add pipelines v1#476

Draft
luxass wants to merge 39 commits intomainfrom
feat/pipelines-v1
Draft

feat: add pipelines v1#476
luxass wants to merge 39 commits intomainfrom
feat/pipelines-v1

Conversation

@luxass
Copy link
Member

@luxass luxass commented Jan 19, 2026

🔗 Linked issue

📚 Description

@changeset-bot
Copy link

changeset-bot bot commented Jan 19, 2026

⚠️ No Changeset found

Latest commit: dbd7636

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 19, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/pipelines-v1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.


if (characterName.endsWith(", First>")) {
rangeStart = codePoint;
rangeName = characterName.replace(", First>", "").replace("<", "");

Check failure

Code scanning / CodeQL

Incomplete string escaping or encoding High

This replaces only the first occurrence of "<".

Copilot Autofix

AI 19 days ago

In general, to avoid incomplete escaping or cleaning when using String.prototype.replace, use a global regular expression (/.../g) or another method that processes all occurrences (e.g., split/join) instead of passing a plain string, which only affects the first occurrence.

Here, the goal is to normalize rangeName by stripping the trailing ", First>" marker and removing all < characters from the remaining name. The current code:

if (characterName.endsWith(", First>")) {
  rangeStart = codePoint;
  rangeName = characterName.replace(", First>", "").replace("<", "");
  continue;
}

only removes the first <. The most direct, non-functional-change fix is to change the second .replace to use a global regular expression:

rangeName = characterName.replace(", First>", "").replace(/</g, "");

This preserves the existing behavior for typical inputs (with a single <), but correctly handles any unexpected extra < characters. No new imports or helpers are needed, and the change is localized to line 48 in packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts.

Suggested changeset 1
packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts b/packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts
--- a/packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts
+++ b/packages/pipelines/pipeline-presets/src/parsers/unicode-data.ts
@@ -45,7 +45,7 @@
 
     if (characterName.endsWith(", First>")) {
       rangeStart = codePoint;
-      rangeName = characterName.replace(", First>", "").replace("<", "");
+      rangeName = characterName.replace(", First>", "").replace(/</g, "");
       continue;
     }
 
EOF
@@ -45,7 +45,7 @@

if (characterName.endsWith(", First>")) {
rangeStart = codePoint;
rangeName = characterName.replace(", First>", "").replace("<", "");
rangeName = characterName.replace(", First>", "").replace(/</g, "");
continue;
}

Copilot is powered by AI and may make mistakes. Always verify output.
@github-actions
Copy link
Contributor

🌏 Preview Deployments

Application Status Preview URL
API ⏳ In Progress N/A
Website ⏳ In Progress N/A
Documentation ⏳ In Progress N/A

Built from commit: 483558979674341c86d594785cb093ce445ef126


🤖 This comment will be updated automatically when you push new commits to this PR.

});

it("should accept pipelines and optional artifacts", () => {
const pipeline = definePipeline({
@luxass luxass force-pushed the feat/pipelines-v1 branch from 9bc07f8 to 1f887f7 Compare January 21, 2026 19:04
@luxass luxass force-pushed the feat/pipelines-v1 branch 2 times, most recently from 908f584 to e3a429c Compare January 31, 2026 16:28
@@ -0,0 +1,18 @@
import type { PipelineEvent } from "@ucdjs/pipelines-core";
import { cn } from "@ucdjs-internal/shared-ui/lib/utils";
.sort((a, b) => a - b);

// Calculate minimum spacing based on number of events
const MIN_SPACING_PCT = 2; // Minimum 2% between events
luxass added 19 commits February 5, 2026 05:38
- Created `README.md` for documentation.
- Added `package.json` with dependencies and scripts.
- Configured TypeScript with `tsconfig.json` and `tsconfig.build.json`.
- Set up `tsdown` for building the package.
- Updated `pnpm-lock.yaml` to include new package dependencies.
- Modified `pnpm-workspace.yaml` to include all packages under `packages/**`.
- Introduced `standard.ts` for parsing standard Unicode data.
- Added `unicode-data.ts` for parsing detailed Unicode character metadata.
- Created pipelines for basic, emoji, and full Unicode data processing.
- Implemented resolvers for grouped and property JSON outputs.
- Added various transforms including deduplication, range expansion, and filtering.
- Established HTTP and memory sources for data retrieval.
- Configured TypeScript settings for building and testing.
Modified the `build` and `dev` script filters in `package.json` to use double asterisks (`**`) for better matching of package directories.
Updated `@luxass/eslint-config` from version `7.0.0-beta.1` to `7.0.0-beta.2` for improved linting rules. Added `tinyglobby` package at version `0.2.15` to enhance globbing capabilities in the project.
- Updated `definePipeline` to use `Omit` for better type safety.
- Adjusted type inference tests to validate expected types.
- Added `definePipelineRoute` to the playground example for improved routing functionality.
- Introduced `vitest-testdirs` in `package.json` for improved testing capabilities.
- Added comprehensive tests for pipeline file handling in `loader.test.ts`.
Refactor `findPipelineFiles` to accept an options object for improved flexibility. Update related function calls throughout the codebase to use the new structure.
- Refactored `pipeline-detail`, `pipeline-graph`, and `pipeline-sidebar` components to use new color schemes and styles.
- Added search functionality to `PipelineSidebar` for improved user experience.
- Enhanced `usePipelines` and `useExecute` hooks to support search queries.
- Introduced global CSS styles for consistent theming across the application.
- Updated types in `types.ts` to reflect changes in pipeline structure and execution results.

BREAKING CHANGE: The structure of the `PipelineDetails` and `ExecuteResult` types has been modified to include new fields.
- Introduced `InlineJsonView`, `LogDetailPanel`, and `SimpleTimeline` components for enhanced log visualization.
- Implemented `ViewModeToggle` for switching between JSON and compact views.
- Created `useLogView` hook to manage log view state and actions.
- Updated `PipelineLogsPage` to integrate new components and improve user experience.
@luxass luxass force-pushed the feat/pipelines-v1 branch from e88e6c6 to be30171 Compare February 5, 2026 04:39
Introduce `PipelineCommandPalette`, `PipelineSidebarContextMenu`, and `VersionPickerDialog` components to enhance user interaction with pipelines. Implement keyboard shortcuts for opening the command palette and streamline pipeline execution and navigation.
…mponent and improve context menu interactivity
ContextMenuShortcut,
ContextMenuTrigger,
} from "@ucdjs-internal/shared-ui/ui/context-menu";
import { Copy, FileCode, FolderOpen, Play } from "lucide-react";
@@ -0,0 +1,22 @@
import { useCallback, useEffect, useState } from "react";
- Added detailed JSDoc comments for `definePipelineTransform` and `applyTransforms` functions to improve documentation.
- Refactored type inference for transform definitions to ensure better type safety.
- Updated tests to validate type parameters and ensure correct behavior of transform functions.
…r functionality

- Updated `package.json` to include `oxc-transform` as a dependency.
- Enhanced `loader.ts` with new functions for loading pipelines from content and finding remote pipeline files.
- Expanded type exports in `index.ts` to include new options for remote sources.
Added new exports for `pipeline-sidebar-errors`, `pipeline-sidebar-header`, `pipeline-sidebar-item`, and `pipeline-sidebar-list` in the `package.json`. Updated hooks exports to include `useCommandPalette`, `useExecute`, `usePipeline`, and `usePipelines`. Introduced `@icons-pack/react-simple-icons` and `lucide-react` as dependencies in `pnpm-lock.yaml` and `pnpm-workspace.yaml`.
useEffect(() => {
if (highlightRoute && codeRef.current) {
// Find the route definition in the code and scroll to it
const routePattern = new RegExp(`route\\s*:\s*["\']${highlightRoute}["\']`, "i");

Check failure

Code scanning / CodeQL

Useless regular-expression character escape High

The escape sequence '\s' is equivalent to just 's', so the sequence is not a character class when it is used in a
regular expression
.

Copilot Autofix

AI 1 day ago

In general, when building a regular expression via a string (including template literals), any regex escape like \s, \d, \w, etc., must be written with a double backslash (\\s, \\d, \\w) so that the JavaScript string literal produces a single backslash for the regex engine. Here, the pattern is intended to match something like route : "some/path" with optional whitespace around the colon. Currently it uses \s* in a template string, which evaluates to s*, so the regular expression does not match whitespace as intended.

The best minimal fix that preserves existing functionality is to escape the backslash before s, changing \s* to \\s* inside the template literal. We only adjust the whitespace sequences and leave all other parts of the pattern as-is. Specifically, in packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx at line 51, update the RegExp construction to:

const routePattern = new RegExp(`route\\s*:\\s*["']${highlightRoute}["']`, "i");

This change requires no new imports or helpers; it simply corrects the escape sequence in the existing string.

Suggested changeset 1
packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx b/packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx
--- a/packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx
+++ b/packages/pipelines/pipeline-server/src/client/routes/pipelines.$id.code.tsx
@@ -48,7 +48,7 @@
   useEffect(() => {
     if (highlightRoute && codeRef.current) {
       // Find the route definition in the code and scroll to it
-      const routePattern = new RegExp(`route\\s*:\s*["\']${highlightRoute}["\']`, "i");
+      const routePattern = new RegExp(`route\\s*:\\s*["\']${highlightRoute}["\']`, "i");
       const match = code.match(routePattern);
       if (match) {
         const lines = code.substring(0, match.index).split("\n");
EOF
@@ -48,7 +48,7 @@
useEffect(() => {
if (highlightRoute && codeRef.current) {
// Find the route definition in the code and scroll to it
const routePattern = new RegExp(`route\\s*:\s*["\']${highlightRoute}["\']`, "i");
const routePattern = new RegExp(`route\\s*:\\s*["\']${highlightRoute}["\']`, "i");
const match = code.match(routePattern);
if (match) {
const lines = code.substring(0, match.index).split("\n");
Copilot is powered by AI and may make mistakes. Always verify output.
Comment on lines +3 to +9
import {
createRootRoute,
Link,
Outlet,
useMatches,
useNavigate,
} from "@tanstack/react-router";
@@ -0,0 +1,152 @@
import { createFileRoute, Link } from "@tanstack/react-router";
message?: string;
}

function LoadingState({ message = "Loading..." }: LoadingStateProps) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant