Skip to content

Reusing tsconfig file across components #17983

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Aug 12, 2025
Merged

Reusing tsconfig file across components #17983

merged 8 commits into from
Aug 12, 2025

Conversation

GTFalcao
Copy link
Collaborator

@GTFalcao GTFalcao commented Aug 7, 2025

Reusing the common properties of the tsconfig.json file so that future file additions are less verbose

Summary by CodeRabbit

  • Chores
    • Added a shared TypeScript base configuration and migrated many component configs to extend it, reducing duplication.
    • Simplified per-component configs by removing local overrides so they inherit include/exclude and compiler options from the base.
    • Raised the minimum TypeScript dev-dependency to require a newer compiler.
    • No changes to user-facing features or public APIs.

Copy link

vercel bot commented Aug 7, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

3 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
docs-v2 ⬜️ Ignored Preview Aug 11, 2025 10:06pm
pipedream-docs ⬜️ Ignored Aug 11, 2025 10:06pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored Aug 11, 2025 10:06pm

Copy link
Contributor

coderabbitai bot commented Aug 7, 2025

Walkthrough

Adds a new shared tsconfig.components.json, updates many component tsconfig.json files to extend it (removing inline compilerOptions and per-project include/exclude), and bumps devDependency TypeScript range in package.json to ">=5.5.0 <5.7.0".

Changes

Cohort / File(s) Change Summary
Base config added
tsconfig.components.json
Added shared TypeScript base config with common compilerOptions, include/exclude, outDir and JS interop.
DevDependency bump
package.json
Updated devDependencies.typescript from ">=4.7.4 <5.7.0" to ">=5.5.0 <5.7.0".
Components — now only extend base
components/*/tsconfig.json
components/apitemplate_io/tsconfig.json, components/baserow/tsconfig.json, components/beehiiv/tsconfig.json, components/buy_me_a_coffee/tsconfig.json, components/clientary/tsconfig.json, components/cloudmersive/tsconfig.json, components/coassemble/tsconfig.json, components/concord/tsconfig.json, components/currencyscoop/tsconfig.json, components/data_axle_platform/tsconfig.json, components/detrack/tsconfig.json, components/docupilot/tsconfig.json, components/expensify/tsconfig.json, components/google_workspace/tsconfig.json, components/kanbanflow/tsconfig.json, components/lemon_squeezy/tsconfig.json, components/mattermost/tsconfig.json, components/neverbounce/tsconfig.json, components/niftyimages/tsconfig.json, components/persistiq/tsconfig.json, components/practitest/tsconfig.json, components/profitwell/tsconfig.json, components/quickemailverification/tsconfig.json, components/raven_tools/tsconfig.json, components/repuso/tsconfig.json, components/resend/tsconfig.json, components/reversecontact/tsconfig.json, components/salesmate/tsconfig.json, components/serveravatar/tsconfig.json, components/shipcloud/tsconfig.json, components/smtp2go/tsconfig.json, components/team_up/tsconfig.json, components/tookan/tsconfig.json, components/twitch_developer_app/tsconfig.json, components/twitter/tsconfig.json, components/verdict_as_a_service/tsconfig.json, components/waitwhile/tsconfig.json, components/workast/tsconfig.json, components/xperiencify/tsconfig.json, components/yelp/tsconfig.json, components/zoho_assist/tsconfig.json, components/zoho_catalyst/tsconfig.json
Replaced inline compilerOptions, allowJs, include and exclude with a simple extends: "../../tsconfig.components.json" (no local overrides).
Components — extended include / minor local tweaks
components/*/tsconfig.json
components/amplenote/tsconfig.json, components/google_recaptcha/tsconfig.json, components/infusionsoft/tsconfig.json, components/lob/tsconfig.json, components/mailbluster/tsconfig.json, components/mediatoolkit/tsconfig.json, components/namely/tsconfig.json, components/nectar_crm/tsconfig.json, components/onfleet/tsconfig.json, components/pikaso/tsconfig.json, components/rise/tsconfig.json, components/rss/tsconfig.json, components/smaily/tsconfig.json, components/tolstoy/tsconfig.json, components/wildberries/tsconfig.json
Same refactor to extend base config; some files added "common" to include or had small include/exclude/formatting cleanups.
Small cleanup / formatting only
components/...
components/google_my_business/tsconfig.json, components/dialpad/tsconfig.json, components/ninox/tsconfig.json, components/formatting/tsconfig.json, components/mailbluster/tsconfig.json
Adopted extends, removed trailing commas and formatting issues; minor include adjustments.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐇
I dug a shared config in the ground,
Scattered tsconfigs gathered round.
One extends to rule them, neat and trim,
Boilerplate trimmed on every limb.
Hop on, compilers — let's begin!

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch tsconfig-updates

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

♻️ Duplicate comments (31)
components/google_recaptcha/tsconfig.json (1)

2-14: Same observations as clientary config – path verification and optional rootDir apply here as well.

components/persistiq/tsconfig.json (1)

2-14: Mirrors previous configs – please see earlier comment regarding rootDir.

components/currencyscoop/tsconfig.json (1)

12-14: Optional: co-locate rootDir with outDir – see clientary comment for rationale.

components/formatting/tsconfig.json (1)

12-14: Optional rootDir addition – same as earlier components.

components/expensify/tsconfig.json (1)

2-14: Same concern as noted for xperiencify – please verify extends path

components/concord/tsconfig.json (1)

2-14: Same concern as noted for xperiencify – please verify extends path

components/mailboxvalidator/tsconfig.json (1)

2-14: Same concern as noted for xperiencify – please verify extends path

components/niftyimages/tsconfig.json (1)

2-14: Same concern as noted for xperiencify – please verify extends path

components/reversecontact/tsconfig.json (1)

2-14: Same composite-flag concern as noted for buy_me_a_coffee

The comment on the first component applies here as well; please verify the shared config still defines "composite": true (and any other removed options).

components/rss/tsconfig.json (1)

2-15: Same composite-flag concern as noted for buy_me_a_coffee

The comment on the first component applies here as well; please verify the shared config still defines "composite": true (and any other removed options).

components/lob/tsconfig.json (1)

2-14: Same composite-flag concern as noted for buy_me_a_coffee

The comment on the first component applies here as well; please verify the shared config still defines "composite": true (and any other removed options).

components/mattermost/tsconfig.json (1)

2-14: Same composite-flag concern as noted for buy_me_a_coffee

The comment on the first component applies here as well; please verify the shared config still defines "composite": true (and any other removed options).

components/shipcloud/tsconfig.json (1)

2-14: Same considerations as other components

Relative extends path and exclude vs outDir consistency apply here as well. If the earlier feedback is acknowledged, no further changes are required.

components/kanbanflow/tsconfig.json (1)

2-14: Same considerations as other components

Relative extends path correctness and folder naming consistency between exclude and outDir.

components/data_axle_platform/tsconfig.json (1)

2-14: Same considerations as other components

Ensure the base config path is resolvable and folder names are consistent.

components/repuso/tsconfig.json (1)

9-11: Same node_modules exclusion note applies here
See comment on components/lemon_squeezy/tsconfig.json.

components/salesmate/tsconfig.json (1)

9-11: Same node_modules exclusion note applies here
See comment on components/lemon_squeezy/tsconfig.json.

components/rise/tsconfig.json (1)

9-11: Same node_modules exclusion note applies here
See comment on components/lemon_squeezy/tsconfig.json.

components/namely/tsconfig.json (1)

9-11: Same node_modules exclusion note applies here
See comment on components/lemon_squeezy/tsconfig.json.

components/mailbluster/tsconfig.json (1)

2-15: Same verification / DRY concern applies.
No additional issues unique to this file.

components/neverbounce/tsconfig.json (1)

2-15: Same verification / DRY concern applies.
No additional issues unique to this file.

components/pikaso/tsconfig.json (1)

2-15: Same verification / DRY concern applies.
No additional issues unique to this file.

components/coassemble/tsconfig.json (1)

2-15: Same verification / DRY concern applies.
No additional issues unique to this file.

components/waitwhile/tsconfig.json (1)

12-14: Duplicate: outDir vs exclude path style
See earlier comment on components/practitest/tsconfig.json about harmonising "./dist""dist" for consistency.

components/amplenote/tsconfig.json (1)

12-14: Duplicate: outDir vs exclude path style
Refer to the first comment in components/practitest/tsconfig.json.

components/tolstoy/tsconfig.json (1)

12-14: Duplicate: outDir vs exclude path style
Refer to the first comment in components/practitest/tsconfig.json.

components/twitter/tsconfig.json (1)

12-14: Duplicate: outDir vs exclude path style
Refer to the first comment in components/practitest/tsconfig.json.

components/tookan/tsconfig.json (1)

2-14: Same comment as above – configuration correctly extends the shared base; please make sure the path resolves (see verification script in the first comment).

components/workast/tsconfig.json (1)

2-14: Same as earlier components – looks good; path-resolution verification applies.

components/beehiiv/tsconfig.json (1)

2-14: Standardised config adopted – no issues spotted; refer to the first comment for the path-check script.

components/ninox/tsconfig.json (1)

2-14: Config simplification approved – inherits from the shared base; same path-verification note applies.

🧹 Nitpick comments (8)
tsconfig.components.json (1)

6-8: Minor: normalise casing of "module" value

TypeScript accepts "ES2020", but the convention in the repo (and TS docs) is the lowercase form "es2020".
Using the canonical value avoids diff-noise in downstream tooling.

components/clientary/tsconfig.json (1)

12-14: Consider pinning rootDir alongside outDir for cleaner composite builds
With composite enabled in the shared config, TypeScript derives rootDir automatically. If any file resides outside the implicit root, TSC will fail. Explicitly setting it avoids surprises:

   "compilerOptions": {
     "outDir": "./dist"
+    ,"rootDir": "."
   }
components/smtp2go/tsconfig.json (1)

2-14: Nit: exclude the entire dist tree

"exclude": ["dist"] is sufficient, but to be explicit you could use "dist/**/*" which avoids TypeScript rescanning if a nested folder is created inside dist.

-  "exclude": [
-    "dist"
-  ],
+  "exclude": [
+    "dist/**/*"
+  ],
components/docupilot/tsconfig.json (1)

12-14: Redundant "exclude": ["dist"]?
If the base config already excludes dist, this local exclusion is unnecessary and can be removed for further brevity.

components/quickemailverification/tsconfig.json (1)

12-14: Consider aligning outDir spelling across components
Some components use "dist", others "./dist". Both resolve the same but the mixed style adds diff noise later.

components/practitest/tsconfig.json (1)

12-14: Align outDir value with exclude entry for consistency

The exclude array lists "dist" (without ./), but compilerOptions.outDir uses "./dist". Both paths resolve the same, yet the visual mismatch invites accidental divergence in future edits.

-    "outDir": "./dist"
+    "outDir": "dist"
components/dialpad/tsconfig.json (1)

2-14: Redundant per-component include / exclude & outDir—consider pushing to the shared base

The three component configs added in this PR are identical except for their path. If every component ultimately wants:

"include": ["app","actions","sources","common"],
"exclude": ["dist"],
"compilerOptions": { "outDir": "./dist" }

move those keys into tsconfig.components.json.
Local files can then be trimmed down to just:

{
  "extends": "../../tsconfig.components.json"
}

reducing maintenance overhead and merge conflicts.

components/smaily/tsconfig.json (1)

2-14: Minor nit: trailing comma after last item in exclude array

JSON doesn’t allow trailing commas; some editors strip them automatically, but others will keep them and tsc will fail. Ensure the comma after "dist" is removed (line 11).

-  "exclude": [
-    "dist"
-  ],
+  "exclude": [
+    "dist"
+  ]
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eca7334 and 4d5da1e.

📒 Files selected for processing (63)
  • components/amplenote/tsconfig.json (1 hunks)
  • components/apitemplate_io/tsconfig.json (1 hunks)
  • components/baserow/tsconfig.json (1 hunks)
  • components/beehiiv/tsconfig.json (1 hunks)
  • components/buy_me_a_coffee/tsconfig.json (1 hunks)
  • components/clientary/tsconfig.json (1 hunks)
  • components/cloudmersive/tsconfig.json (1 hunks)
  • components/coassemble/tsconfig.json (1 hunks)
  • components/concord/tsconfig.json (1 hunks)
  • components/currencyscoop/tsconfig.json (1 hunks)
  • components/data_axle_platform/tsconfig.json (1 hunks)
  • components/detrack/tsconfig.json (1 hunks)
  • components/dialpad/tsconfig.json (1 hunks)
  • components/docupilot/tsconfig.json (1 hunks)
  • components/expensify/tsconfig.json (1 hunks)
  • components/formatting/tsconfig.json (1 hunks)
  • components/google_my_business/tsconfig.json (1 hunks)
  • components/google_recaptcha/tsconfig.json (1 hunks)
  • components/google_workspace/tsconfig.json (1 hunks)
  • components/infusionsoft/tsconfig.json (1 hunks)
  • components/kanbanflow/tsconfig.json (1 hunks)
  • components/lemon_squeezy/tsconfig.json (1 hunks)
  • components/lob/tsconfig.json (1 hunks)
  • components/mailbluster/tsconfig.json (1 hunks)
  • components/mailboxvalidator/tsconfig.json (1 hunks)
  • components/mattermost/tsconfig.json (1 hunks)
  • components/mediatoolkit/tsconfig.json (1 hunks)
  • components/namely/tsconfig.json (1 hunks)
  • components/nectar_crm/tsconfig.json (1 hunks)
  • components/neverbounce/tsconfig.json (1 hunks)
  • components/niftyimages/tsconfig.json (1 hunks)
  • components/ninox/tsconfig.json (1 hunks)
  • components/onfleet/tsconfig.json (1 hunks)
  • components/persistiq/tsconfig.json (1 hunks)
  • components/pikaso/tsconfig.json (1 hunks)
  • components/practitest/tsconfig.json (1 hunks)
  • components/profitwell/tsconfig.json (1 hunks)
  • components/quickemailverification/tsconfig.json (1 hunks)
  • components/raven_tools/tsconfig.json (1 hunks)
  • components/repuso/tsconfig.json (1 hunks)
  • components/resend/tsconfig.json (1 hunks)
  • components/reversecontact/tsconfig.json (1 hunks)
  • components/rise/tsconfig.json (1 hunks)
  • components/rss/tsconfig.json (1 hunks)
  • components/salesmate/tsconfig.json (1 hunks)
  • components/serveravatar/tsconfig.json (1 hunks)
  • components/shipcloud/tsconfig.json (1 hunks)
  • components/smaily/tsconfig.json (1 hunks)
  • components/smtp2go/tsconfig.json (1 hunks)
  • components/team_up/tsconfig.json (1 hunks)
  • components/tolstoy/tsconfig.json (1 hunks)
  • components/tookan/tsconfig.json (1 hunks)
  • components/twitch_developer_app/tsconfig.json (1 hunks)
  • components/twitter/tsconfig.json (1 hunks)
  • components/verdict_as_a_service/tsconfig.json (1 hunks)
  • components/waitwhile/tsconfig.json (1 hunks)
  • components/wildberries/tsconfig.json (1 hunks)
  • components/workast/tsconfig.json (1 hunks)
  • components/xperiencify/tsconfig.json (1 hunks)
  • components/yelp/tsconfig.json (1 hunks)
  • components/zoho_assist/tsconfig.json (1 hunks)
  • components/zoho_catalyst/tsconfig.json (1 hunks)
  • tsconfig.components.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2024-10-31T23:57:17.282Z
Learnt from: jverce
PR: PipedreamHQ/pipedream#14106
File: packages/sdk/src/server/__tests__/server.test.ts:174-192
Timestamp: 2024-10-31T23:57:17.282Z
Learning: In `packages/sdk/src/server/__tests__/server.test.ts`, when `ts-ignore` annotations are used in mock implementations, they are acceptable, and replacing them with type casting or mock types is unnecessary.

Applied to files:

  • components/formatting/tsconfig.json
  • components/baserow/tsconfig.json
  • components/clientary/tsconfig.json
  • components/onfleet/tsconfig.json
  • components/data_axle_platform/tsconfig.json
  • components/persistiq/tsconfig.json
  • components/google_workspace/tsconfig.json
  • components/mailboxvalidator/tsconfig.json
  • components/mattermost/tsconfig.json
  • components/smtp2go/tsconfig.json
  • components/raven_tools/tsconfig.json
  • components/docupilot/tsconfig.json
  • components/cloudmersive/tsconfig.json
  • components/rss/tsconfig.json
  • components/apitemplate_io/tsconfig.json
  • components/buy_me_a_coffee/tsconfig.json
  • components/shipcloud/tsconfig.json
  • components/waitwhile/tsconfig.json
  • components/neverbounce/tsconfig.json
  • components/namely/tsconfig.json
  • components/infusionsoft/tsconfig.json
  • components/google_my_business/tsconfig.json
  • components/coassemble/tsconfig.json
  • components/serveravatar/tsconfig.json
  • components/tookan/tsconfig.json
  • components/nectar_crm/tsconfig.json
  • components/pikaso/tsconfig.json
  • components/repuso/tsconfig.json
  • components/amplenote/tsconfig.json
  • components/twitch_developer_app/tsconfig.json
  • components/workast/tsconfig.json
  • components/resend/tsconfig.json
  • components/lemon_squeezy/tsconfig.json
  • components/yelp/tsconfig.json
  • components/quickemailverification/tsconfig.json
  • components/verdict_as_a_service/tsconfig.json
  • components/expensify/tsconfig.json
  • components/mediatoolkit/tsconfig.json
  • components/wildberries/tsconfig.json
  • components/detrack/tsconfig.json
  • components/xperiencify/tsconfig.json
  • components/tolstoy/tsconfig.json
  • components/practitest/tsconfig.json
  • components/dialpad/tsconfig.json
  • components/google_recaptcha/tsconfig.json
  • components/kanbanflow/tsconfig.json
  • components/zoho_assist/tsconfig.json
  • components/rise/tsconfig.json
  • components/team_up/tsconfig.json
  • components/beehiiv/tsconfig.json
  • components/salesmate/tsconfig.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Lint Code Base
🔇 Additional comments (29)
components/raven_tools/tsconfig.json (1)

2-15: Config simplification looks good

Extending the shared base config and keeping only local overrides is spot-on and keeps the per-component file minimal.

No further issues noticed here.

components/baserow/tsconfig.json (1)

2-15: LGTM – consistent with new shared config

The file correctly extends the base config and overrides only outDir. Nothing else to flag.

components/verdict_as_a_service/tsconfig.json (1)

2-15: Looks good

Conforms to the new pattern; no issues detected.

components/yelp/tsconfig.json (1)

2-15: Good consolidation

File cleanly extends the shared config with the expected local overrides.

components/clientary/tsconfig.json (1)

2-2: extends path looks correct – just confirm the base config is committed
../../tsconfig.components.json resolves two directories up, which is the repository root when inside components/<name>. Make sure the new base config is present in the root of the PR so CI doesn’t break.

components/currencyscoop/tsconfig.json (1)

3-8: Verify that every folder in include actually exists
"common" was added. If the component doesn’t ship a common/ directory, tsc --build will throw an error in CI.

components/formatting/tsconfig.json (1)

3-8: Folder list grew – double-check existence
common/ was added; confirm it’s present or remove it to avoid needless glob expansion / build errors.

components/xperiencify/tsconfig.json (1)

2-14: All component tsconfig extends paths are correct
Verified that tsconfig.components.json exists at the repository root and that every component-level tsconfig.json (e.g. components/xperiencify/tsconfig.json) uses the exact same "extends": "../../tsconfig.components.json" path. No discrepancies found.

components/zoho_assist/tsconfig.json (1)

2-14: All critical compiler flags are present in tsconfig.components.json

composite: true
target: ES2020
moduleResolution: node
allowJs: true

No further changes needed here.

components/zoho_catalyst/tsconfig.json (1)

2-14: Config consolidation looks good

The file correctly inherits the shared settings and only overrides outDir, which keeps local noise to a minimum.
Nothing else to flag here.

components/apitemplate_io/tsconfig.json (1)

2-14: LGTM – aligns with the new shared config pattern

No issues spotted; the config is minimal and consistent with the other components.

components/detrack/tsconfig.json (1)

2-14: Verify relative extends path and keep exclude / outDir consistent

Looks good overall.
Just double-check that:

  1. ../../tsconfig.components.json actually resolves from components/detrack/, otherwise the compiler will silently fall back to the default config.
  2. exclude: ["dist"] matches the literal folder produced by outDir: "./dist". This is purely cosmetic (tsc normalises both), but using either both with or both without the leading ./ avoids future confusion.

No further action if both checks pass.

components/infusionsoft/tsconfig.json (1)

2-15: Confirm the new "common" include and path resolution

The only functional change beyond centralising the config is adding "common" to the include list. Please verify a components/infusionsoft/common/ directory actually exists; otherwise tsc --build will emit an error in composite mode inherited from the base config.

Everything else mirrors the pattern introduced in the other components.

components/lemon_squeezy/tsconfig.json (1)

2-2: Centralizing compiler options looks good

Re-using ../../tsconfig.components.json keeps individual configs lean and easier to maintain.

components/twitch_developer_app/tsconfig.json (2)

2-2: Shared config adoption looks good
Extending ../../tsconfig.components.json eliminates local duplication and keeps the component config concise.


12-14: No conflicting outDir in base config
I confirmed that tsconfig.components.json doesn’t specify an outDir. This file’s outDir: "./dist" is the only one in your config chain, so there’s no silent override risk. Leave it as-is.

components/profitwell/tsconfig.json (2)

2-2: Consistent centralisation of compiler options
The change mirrors others in the PR and keeps this component aligned with the new shared setup.


3-14: No action needed: common directory exists
The components/profitwell/common folder is present, so including "common" in the tsconfig.json include array is correct.

components/docupilot/tsconfig.json (1)

2-2: Config now cleanly inherits from the base – nice!
Less noise, same behaviour.

components/quickemailverification/tsconfig.json (1)

2-2: Good move to the shared tsconfig
Keeps things DRY across components.

components/onfleet/tsconfig.json (2)

2-2: Inheritance path is correct
Path resolution (../../) correctly reaches repo root from components/onfleet.


3-8: Added "common" to include – ensure no duplicate compilation
If files under common/ are already compiled in another project reference, they could be emitted twice. Confirm your build graph (especially when using tsc -b) doesn’t double-compile this folder.

components/cloudmersive/tsconfig.json (1)

2-14: Config correctly consolidated into shared base – looks good
The file now cleanly delegates common options to ../../tsconfig.components.json, keeps only the local include / exclude lists and outDir, and the relative path resolves correctly (two levels up from components/<name>). No issues spotted.

components/google_my_business/tsconfig.json (1)

2-14: Consistent with new shared-config pattern – no concerns
Same observations as for cloudmersive: correct relative path, sensible minimal overrides, and the dist folder excluded.

components/google_workspace/tsconfig.json (1)

2-14: Shared base config applied correctly
Everything aligns with the repo-wide refactor; nothing further to address here.

components/serveravatar/tsconfig.json (1)

2-14: Good adoption of centralized tsconfig.components.json
Local overrides limited to what’s strictly necessary; paths and lists are correct.

components/wildberries/tsconfig.json (1)

2-14: LGTM – configuration successfully simplified
Matches the new convention; no functional or stylistic issues detected.

components/nectar_crm/tsconfig.json (2)

2-14: Good use of a shared base config
Extending ../../tsconfig.components.json and trimming local compiler options massively reduces duplication and makes future maintenance easier. The local overrides (include, exclude, outDir) are minimal and clear.


2-2: All component tsconfig.json extends paths resolve correctly
Verified that tsconfig.components.json is located at the repository root and every "extends": "../../tsconfig.components.json" in components/*/tsconfig.json resolves without error. No changes required.

Comment on lines 2 to 14
"extends": "../../tsconfig.components.json",
"include": [
"app",
"actions",
"sources",
"common"
],
"exclude": [
"dist",
]
"dist"
],
"compilerOptions": {
"outDir": "./dist"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Ensure the composite flag (and any other previously-explicit options) still live in the shared config

Each component’s tsconfig.json used to declare "composite": true (and other build-critical options) locally. With the move to "extends": "../../tsconfig.components.json", those settings must now be defined in the shared file or tsc -b / incremental builds will break.


🏁 Script executed:

#!/bin/bash
# Sanity-check that the shared base config keeps the composite flag.
jq '.compilerOptions.composite' ../../tsconfig.components.json

Length of output: 151


🏁 Script executed:

#!/bin/bash
# Locate shared tsconfig file(s) in the repository
mapfile -t files < <(fd tsconfig.components.json)

if [ ${#files[@]} -eq 0 ]; then
  echo "No tsconfig.components.json found"
  exit 1
fi

for file in "${files[@]}"; do
  echo "=== $file ==="
  jq '.compilerOptions.composite' "$file" || echo "Unable to read composite flag in $file"
done

Length of output: 262


🏁 Script executed:

#!/bin/bash
set -e

echo "# Searching for tsconfig.components.json"
find . -type f -name "tsconfig.components.json" || echo "No tsconfig.components.json found"

echo
echo "# Searching for any JSON files with 'components' in the name"
find . -type f -iname "*components*.json" || echo "No JSON files with 'components' in name"

echo
echo "# Listing all tsconfig JSON files"
find . -type f -name "tsconfig*.json"

echo
echo "# Showing 'extends' entries in tsconfig JSON files"
grep -R -n --include 'tsconfig*.json' '"extends"' .

Length of output: 8859


🏁 Script executed:

#!/bin/bash
# Check whether the shared config declares composite (and other build-critical flags)
echo "## tsconfig.components.json compilerOptions"
jq '.compilerOptions' tsconfig.components.json

Length of output: 209


🏁 Script executed:

#!/bin/bash
# Grep for key build flags in tsconfig.components.json despite JSON syntax issues
echo "## Searching for 'composite' flag"
grep -R -n '"composite"' tsconfig.components.json || echo "composite not found"

echo
echo "## Searching for 'declaration' flag"
grep -R -n '"declaration"' tsconfig.components.json || echo "declaration not found"

echo
echo "## Searching for 'incremental' flag"
grep -R -n '"incremental"' tsconfig.components.json || echo "incremental not found"

Length of output: 564


Ensure all build-critical TS options live in tsconfig.components.json

The shared tsconfig.components.json already includes

  "composite": true

but the other flags—previously set in each component—are still missing. Without them, tsc -b/incremental builds will break. Please add at least:

 "compilerOptions": {
     "composite": true,
+    "declaration": true,
+    "incremental": true,
     /* …other shared options… */
 }
🤖 Prompt for AI Agents
In components/buy_me_a_coffee/tsconfig.json lines 2 to 14, the file extends
tsconfig.components.json which includes "composite": true, but other essential
TypeScript build options required for incremental builds are missing. To fix
this, add the necessary build-critical compilerOptions such as "incremental":
true, "tsBuildInfoFile", and any other flags previously set in each component to
ensure tsc -b and incremental builds work correctly. These options should be
added under "compilerOptions" in this tsconfig.json.

Comment on lines 9 to 11
"exclude": [
"dist"
],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Explicitly exclude node_modules to keep compilation fast

exclude in an extending config replaces—not merges—the parent array.
Unless node_modules is already excluded in the base config, the TS compiler may waste time crawling thousands of files during watch / incremental builds.

   "exclude": [
     "dist",
+    "node_modules"
   ],

If unsure whether the base config already excludes it, run:


🏁 Script executed:

#!/bin/bash
# List all tsconfig files that do NOT exclude node_modules
fd tsconfig.components.json -x jq -e '.exclude? // [] | index("node_modules") | not' {} |
  head

Length of output: 164


🏁 Script executed:

#!/bin/bash
set -eux

# List all tsconfig JSON files in the repo
echo "Found tsconfig files:"
fd tsconfig.*\.json || true

# Show the lemon_squeezy component tsconfig
echo
echo "=== components/lemon_squeezy/tsconfig.json ==="
sed -n '1,100p' components/lemon_squeezy/tsconfig.json

# Extract the "extends" path from lemon_squeezy tsconfig
base=$(grep -Po '"extends"\s*:\s*"\K[^"]+' components/lemon_squeezy/tsconfig.json)
echo
echo "Base config referenced by extends: $base"

# If the base config file exists, print its first 200 lines to inspect "exclude"
if [ -f "$base" ]; then
  echo
  echo "=== $base ==="
  sed -n '1,200p' "$base"
else
  echo
  echo "⚠️ Could not locate base config file at \"$base\""
fi

Length of output: 962


🏁 Script executed:

#!/bin/bash
set -eux

# Display the base tsconfig for components
echo "=== tsconfig.components.json (first 200 lines) ==="
sed -n '1,200p' tsconfig.components.json

echo
echo "=== Exclude entries in tsconfig.components.json ==="
jq '.exclude? // []' tsconfig.components.json

Length of output: 683


Add node_modules to the exclude list in component TSConfig

The shared tsconfig.components.json does not define an exclude array, so the per-component exclude in components/lemon_squeezy/tsconfig.json replaces rather than merges with the base. To prevent the TS compiler from crawling everything under node_modules, explicitly exclude it:

File: components/lemon_squeezy/tsconfig.json
Lines ~9–11

   "exclude": [
     "dist",
+    "node_modules"
   ],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"exclude": [
"dist"
],
"exclude": [
"dist",
"node_modules"
],
🤖 Prompt for AI Agents
In components/lemon_squeezy/tsconfig.json around lines 9 to 11, the current
"exclude" array only contains "dist", which replaces rather than merges with the
base config and allows TypeScript to crawl node_modules. To fix this, add
"node_modules" to the "exclude" array alongside "dist" to explicitly prevent the
TS compiler from processing files under node_modules.

Comment on lines 2 to 14
"extends": "../../tsconfig.components.json",
"include": [
"app",
"actions",
"sources",
"common"
],
"exclude": [
"dist"
],
"compilerOptions": {
"outDir": "./dist"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Confirm the newly-added common folder actually exists

"common" is now part of the include array. Some components do not ship a common sub-folder, so TypeScript will silently ignore it, but build tools that glob files may not.


🏁 Script executed:

#!/bin/bash
# Fail the build early if the directory is missing
if [ ! -d components/mediatoolkit/common ]; then
  echo "⚠️  components/mediatoolkit/common does not exist"
  exit 1
fi

Length of output: 165


Missing common folder in components/mediatoolkit
The tsconfig.json now includes "common" under include, but components/mediatoolkit/common does not exist. This will cause file-glob builds to fail.

Please either:

  • Create the components/mediatoolkit/common directory (and add any necessary files), or
  • Remove "common" from the include array in components/mediatoolkit/tsconfig.json

Affected file:

  • components/mediatoolkit/tsconfig.json
     "include": [
       "app",
       "actions",
       "sources",
  • "common"
    ],

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion
"extends": "../../tsconfig.components.json",
"include": [
  "app",
  "actions",
  "sources"
],
"exclude": [
  "dist"
],
"compilerOptions": {
  "outDir": "./dist"
}
🤖 Prompt for AI Agents
In components/mediatoolkit/tsconfig.json lines 2 to 14, the "common" folder is
included in the "include" array but does not exist in the directory, causing
build failures. To fix this, either create the missing
components/mediatoolkit/common directory with necessary files or remove "common"
from the "include" array in this tsconfig.json file.

Comment on lines 2 to 15
"extends": "../../tsconfig.components.json",
"include": [
"app",
"actions",
"sources",
"common"
],
"exclude": [
"dist"
],
"compilerOptions": {
"outDir": "./dist"
}
}
Copy link
Contributor

@coderabbitai coderabbitai bot Aug 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Confirm base-config completeness and consider DRYing include/exclude.

All local compiler flags except outDir were removed, so tsconfig.components.json must now declare essentials such as composite, module, target, allowJs, etc. Please verify that nothing critical went missing.

The four folders in include / the single exclude entry are identical across every component changed in this PR. If they truly are universal, you can move them to the shared config and delete them here to reduce repetition.


🏁 Script executed:

#!/bin/bash
# Quick sanity-check: does the shared config exist and do components still compile?
test -f tsconfig.components.json || echo "❌ Root tsconfig.components.json is missing"

# Spot-check for one indispensable flag
grep -q '"composite": *true' tsconfig.components.json \
  || echo "⚠️  composite flag not found in base config"

Length of output: 90


🏁 Script executed:

#!/bin/bash
# Verify essential compilerOptions in tsconfig.components.json
echo "Checking essential compiler flags in base config:"
for flag in module target allowJs strict declaration esModuleInterop; do
  if grep -q "\"$flag\"" tsconfig.components.json; then
    echo "$flag found"
  else
    echo "⚠️  $flag not found"
  fi
done

Length of output: 1125


Ensure Base Config Includes All Essential Compiler Options & DRY include/exclude

The shared tsconfig.components.json currently defines module, target, and allowJs, but is missing several key flags that were removed from the local config:

• strict
• declaration
• esModuleInterop

Please confirm whether these were intentionally omitted; otherwise, add them to the base config to restore your previous type-safety guarantees.

Additionally, the include and exclude arrays in components/team_up/tsconfig.json match those in every other component. If they truly apply across all components, move them into tsconfig.components.json and remove them locally.

Attention points:

  • tsconfig.components.json: add missing flags under compilerOptions
  • components/**/tsconfig.json: remove duplicated include/exclude once hoisted
🤖 Prompt for AI Agents
In components/team_up/tsconfig.json lines 2 to 15, the local config duplicates
the include and exclude arrays already used by other components and omits
important compilerOptions like strict, declaration, and esModuleInterop that
exist in the base tsconfig.components.json. To fix this, move the include and
exclude arrays from components/team_up/tsconfig.json into
tsconfig.components.json to avoid duplication, and add the missing
compilerOptions (strict, declaration, esModuleInterop) to the base config's
compilerOptions section to ensure consistent type safety across all components.
Then remove the include and exclude arrays from the local tsconfig.json.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried using include/exclude only in the base file, but it resolves relative to the base file, not to each individual file referencing it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GTFalcao, you're absolutely correct! That's a fundamental limitation of TypeScript config inheritance - the include and exclude paths are resolved relative to the config file that defines them, not relative to the extending config file.

This means if you moved include: ["app", "actions", "sources", "common"] to the base tsconfig.components.json, TypeScript would look for those directories at the repository root level (relative to the base config), not within each component directory.

Your current approach of keeping the include/exclude arrays in each component's config while centralizing only the compilerOptions in the base config is the correct solution. The duplication is unavoidable due to this TypeScript limitation.

The refactoring successfully achieves the main goal of reducing verbosity in compiler options while maintaining the necessary path specifications for each component.


✏️ Learnings added
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#17983
File: components/team_up/tsconfig.json:2-15
Timestamp: 2025-08-08T01:15:48.881Z
Learning: In TypeScript config inheritance, include and exclude paths are resolved relative to the config file that defines them, not relative to the extending config file. This means include/exclude arrays cannot be centralized in a base config when components are in different directories - each component must define its own include/exclude paths.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: jcortes
PR: PipedreamHQ/pipedream#14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like `fs` to `package.json` dependencies, as they are native modules provided by the Node.js runtime.

Learnt from: jverce
PR: PipedreamHQ/pipedream#14106
File: packages/sdk/src/server/__tests__/server.test.ts:174-192
Timestamp: 2024-10-31T23:57:17.282Z
Learning: In `packages/sdk/src/server/__tests__/server.test.ts`, when `ts-ignore` annotations are used in mock implementations, they are acceptable, and replacing them with type casting or mock types is unnecessary.

@jcortes jcortes self-requested a review August 8, 2025 14:27
jcortes
jcortes previously approved these changes Aug 8, 2025
Copy link
Collaborator

@jcortes jcortes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @GTFalcao I would say let's give it a try and merge. LGTM! Ready for release!

js07
js07 previously approved these changes Aug 11, 2025
Copy link
Collaborator

@js07 js07 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me! Just made one comment about optionally using ${configDir} to move more of the shared config to the tsconfig.components.json file.

Comment on lines 13 to 14
"allowJs": true
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (non-blocking):

Starting in TypeScript 5.5, you can use the ${configDir} template variable in configuration files, which is substituted with the directory containing the derived tsconfig.json, not the shared tsconfig.components.json. Using ${configDir} would let you put include, exclude, and outDir in this file rather than each of the tsconfig.json files. For example:

Suggested change
"allowJs": true
}
"allowJs": true,
"outDir": "${configDir}/dist"
},
"include": [
"${configDir}/app",
"${configDir}/actions",
"${configDir}/sources",
"${configDir}/common"
],
"exclude": [
"${configDir}/dist"
]

@GTFalcao GTFalcao dismissed stale reviews from js07 and jcortes via 7e8c32b August 11, 2025 18:54
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
package.json (1)

74-74: TypeScript upgrade verified—tooling and shared config are compatible

I’ve confirmed the following after bumping "typescript": ">=5.5.0 <5.7.0":

  • Root devDependencies now include
    • typescript: ≥5.5.0 <5.7.0
    • @typescript-eslint/parser & plugin: ^8
    • ts-jest: ^29.1.1 (and ^29.2.5 in packages/sdk)
    These versions support TS 5.5/5.6 without known issues.
  • tsconfig.components.json at repo root:
    • Exists, no top-level include/exclude keys (correct—each component handles its own)
    compilerOptions.listEmittedFiles is true
    • Other options (moduleResolution: "node", target: "ES2020", composite: true, etc.) look good.
  • Every components/**/tsconfig.json extends the shared config via "../../tsconfig.components.json".
  • Jest configs reference ts-jest v29.x, which is compatible with TS 5.5/5.6.

⚠️ I wasn’t able to locate a scripts/tsPostBuild.mjs—if you still use that pipeline step, please verify it correctly parses the TS 5.5/5.6 listEmittedFiles output.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 24d3b9b and 7e8c32b.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • package.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#17983
File: components/team_up/tsconfig.json:2-15
Timestamp: 2025-08-08T01:15:48.881Z
Learning: In TypeScript config inheritance, include and exclude paths are resolved relative to the config file that defines them, not relative to the extending config file. This means include/exclude arrays cannot be centralized in a base config when components are in different directories - each component must define its own include/exclude paths.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Lint Code Base
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 19

♻️ Duplicate comments (23)
components/yelp/tsconfig.json (1)

2-3: Per-component include/exclude still needed; base config cannot scope them per directory

Mirror the fix: add local include/exclude so files resolve relative to this component. See the raven_tools comment for details and rationale.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/concord/tsconfig.json (1)

2-3: Local include/exclude required for correct file resolution

TypeScript resolves include/exclude where they are defined. Add them here to scope to this component.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/baserow/tsconfig.json (1)

2-3: Add local include/exclude; avoid relying on centralized include paths

Prevents include paths from being resolved at repo root and ensures this component compiles its own sources.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/profitwell/tsconfig.json (1)

2-3: Re-introduce per-component include/exclude

Keeps file discovery scoped to this package and avoids base-config-relative resolution.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/persistiq/tsconfig.json (1)

2-3: Local include/exclude should live here

Prevents “no input files” or cross-component file pickup if the base config defines include/exclude.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/xperiencify/tsconfig.json (1)

2-3: Scope files locally with include/exclude

Same rationale as other components in this PR.

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
components/resend/tsconfig.json (1)

2-3: Add per-component include/exclude; centralizing them breaks resolution

Given prior issues in this component with folder presence, prefer resilient globs if structure varies.

Option A (standard folders):

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]

Option B (resilient):

-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./**/*"],
+  "exclude": ["./dist", "./node_modules"]
components/mediatoolkit/tsconfig.json (1)

2-3: This component likely lacks a “common” folder; don’t inherit a base include that references it.

Per our prior learning and past comment, components/mediatoolkit/common doesn’t exist. If the base tsconfig includes "common", this will break globs/builds. Add local include/exclude/outDir and omit "common" here.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources"],
+  "exclude": ["dist"]
 }

If “common” is later added, you can append it to include then.

components/formatting/tsconfig.json (1)

2-3: Local include/exclude needed in component tsconfig

Same concern as other components: include/exclude defined in the base config resolve relative to the base, not here. Add local include/exclude (and override outDir if needed) in this file.

Minimal example:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/waitwhile/tsconfig.json (1)

2-3: Do not centralize include/exclude in the base config

Per-TS semantics, include/exclude are resolved relative to where they’re declared. Define them locally in this component and override outDir if the base sets it.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/twitter/tsconfig.json (1)

2-3: Add local include/exclude (and outDir override) in this component

Extending a base that defines include/exclude will resolve those paths relative to the base, not this directory. Define them here.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/smtp2go/tsconfig.json (1)

2-3: Localize include/exclude; avoid relying on base for these

Please add component-scoped include/exclude (and outDir override if base sets it), since base-resolved paths won’t be relative to this directory.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/serveravatar/tsconfig.json (1)

2-3: Per-file include/exclude required

TS resolves include/exclude relative to the file that defines them. Define them here and override outDir as needed.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/rss/tsconfig.json (1)

2-3: Component-local include/exclude should not be centralized

Add local include/exclude (and possibly outDir) here; base-resolved paths will be relative to the base.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/google_my_business/tsconfig.json (1)

2-3: Define include/exclude in this tsconfig (don’t inherit them from base)

Because include/exclude are resolved where they are declared, put them here and override outDir if the base sets it.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": ["./app", "./actions", "./sources", "./common"],
+  "exclude": ["./dist"],
+  "compilerOptions": { "outDir": "./dist" }
 }
components/lemon_squeezy/tsconfig.json (1)

2-2: Same concern as wildberries: add local include/exclude and outDir.

Please apply the same fix: define outDir ("./dist") and local include/exclude arrays in this file to avoid path resolution issues.

components/apitemplate_io/tsconfig.json (1)

2-3: Add per-component paths (include/exclude) and outDir locally.

Mirroring the wildberries note: centralize only path-agnostic options. Keep include/exclude and outDir here.

components/dialpad/tsconfig.json (1)

2-3: Per-file include/exclude and outDir are required here.

To avoid base-relative path issues, add local include/exclude arrays and set "compilerOptions.outDir": "./dist".

components/currencyscoop/tsconfig.json (1)

2-3: Don’t hoist path-relative fields; define them locally.

Please add local "include", "exclude", and "compilerOptions.outDir": "./dist" here.

components/tookan/tsconfig.json (1)

2-3: Same as above: keep include/exclude and outDir in this tsconfig.

Define per-component include/exclude and set outDir to "./dist" locally.

components/team_up/tsconfig.json (1)

2-3: Per the earlier discussion: include/exclude must stay local; add outDir too.

Given TS resolves include/exclude relative to where they’re declared, keep them here and set "compilerOptions.outDir": "./dist".

components/salesmate/tsconfig.json (1)

2-2: Add local include/exclude and outDir in this component tsconfig.

Avoid base-relative path pitfalls by defining "include", "exclude", and "compilerOptions.outDir": "./dist" here.

components/google_workspace/tsconfig.json (1)

2-3: Same: add local include/exclude and outDir; extends-only will mis-resolve paths

This tsconfig has the same risk as noted in components/cloudmersive/tsconfig.json: include/exclude should be local, and outDir must be overridden to avoid emitting to a shared root path.

Apply the same fix pattern as proposed for components/cloudmersive/tsconfig.json, adjusting only if this component’s directory layout differs.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7e8c32b and b614484.

📒 Files selected for processing (62)
  • components/amplenote/tsconfig.json (1 hunks)
  • components/apitemplate_io/tsconfig.json (1 hunks)
  • components/baserow/tsconfig.json (1 hunks)
  • components/beehiiv/tsconfig.json (1 hunks)
  • components/buy_me_a_coffee/tsconfig.json (1 hunks)
  • components/clientary/tsconfig.json (1 hunks)
  • components/cloudmersive/tsconfig.json (1 hunks)
  • components/coassemble/tsconfig.json (1 hunks)
  • components/concord/tsconfig.json (1 hunks)
  • components/currencyscoop/tsconfig.json (1 hunks)
  • components/data_axle_platform/tsconfig.json (1 hunks)
  • components/detrack/tsconfig.json (1 hunks)
  • components/dialpad/tsconfig.json (1 hunks)
  • components/docupilot/tsconfig.json (1 hunks)
  • components/expensify/tsconfig.json (1 hunks)
  • components/formatting/tsconfig.json (1 hunks)
  • components/google_my_business/tsconfig.json (1 hunks)
  • components/google_recaptcha/tsconfig.json (1 hunks)
  • components/google_workspace/tsconfig.json (1 hunks)
  • components/kanbanflow/tsconfig.json (1 hunks)
  • components/lemon_squeezy/tsconfig.json (1 hunks)
  • components/lob/tsconfig.json (1 hunks)
  • components/mailbluster/tsconfig.json (1 hunks)
  • components/mailboxvalidator/tsconfig.json (1 hunks)
  • components/mattermost/tsconfig.json (1 hunks)
  • components/mediatoolkit/tsconfig.json (1 hunks)
  • components/namely/tsconfig.json (1 hunks)
  • components/nectar_crm/tsconfig.json (1 hunks)
  • components/neverbounce/tsconfig.json (1 hunks)
  • components/niftyimages/tsconfig.json (1 hunks)
  • components/ninox/tsconfig.json (1 hunks)
  • components/onfleet/tsconfig.json (1 hunks)
  • components/persistiq/tsconfig.json (1 hunks)
  • components/pikaso/tsconfig.json (1 hunks)
  • components/practitest/tsconfig.json (1 hunks)
  • components/profitwell/tsconfig.json (1 hunks)
  • components/quickemailverification/tsconfig.json (1 hunks)
  • components/raven_tools/tsconfig.json (1 hunks)
  • components/repuso/tsconfig.json (1 hunks)
  • components/resend/tsconfig.json (1 hunks)
  • components/reversecontact/tsconfig.json (1 hunks)
  • components/rise/tsconfig.json (1 hunks)
  • components/rss/tsconfig.json (1 hunks)
  • components/salesmate/tsconfig.json (1 hunks)
  • components/serveravatar/tsconfig.json (1 hunks)
  • components/shipcloud/tsconfig.json (1 hunks)
  • components/smaily/tsconfig.json (1 hunks)
  • components/smtp2go/tsconfig.json (1 hunks)
  • components/team_up/tsconfig.json (1 hunks)
  • components/tolstoy/tsconfig.json (1 hunks)
  • components/tookan/tsconfig.json (1 hunks)
  • components/twitch_developer_app/tsconfig.json (1 hunks)
  • components/twitter/tsconfig.json (1 hunks)
  • components/verdict_as_a_service/tsconfig.json (1 hunks)
  • components/waitwhile/tsconfig.json (1 hunks)
  • components/wildberries/tsconfig.json (1 hunks)
  • components/workast/tsconfig.json (1 hunks)
  • components/xperiencify/tsconfig.json (1 hunks)
  • components/yelp/tsconfig.json (1 hunks)
  • components/zoho_assist/tsconfig.json (1 hunks)
  • components/zoho_catalyst/tsconfig.json (1 hunks)
  • tsconfig.components.json (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (20)
  • components/buy_me_a_coffee/tsconfig.json
  • tsconfig.components.json
  • components/repuso/tsconfig.json
  • components/zoho_catalyst/tsconfig.json
  • components/mattermost/tsconfig.json
  • components/twitch_developer_app/tsconfig.json
  • components/verdict_as_a_service/tsconfig.json
  • components/workast/tsconfig.json
  • components/pikaso/tsconfig.json
  • components/clientary/tsconfig.json
  • components/zoho_assist/tsconfig.json
  • components/tolstoy/tsconfig.json
  • components/nectar_crm/tsconfig.json
  • components/amplenote/tsconfig.json
  • components/kanbanflow/tsconfig.json
  • components/detrack/tsconfig.json
  • components/onfleet/tsconfig.json
  • components/practitest/tsconfig.json
  • components/expensify/tsconfig.json
  • components/quickemailverification/tsconfig.json
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T01:15:48.881Z
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#17983
File: components/team_up/tsconfig.json:2-15
Timestamp: 2025-08-08T01:15:48.881Z
Learning: In TypeScript config inheritance, include and exclude paths are resolved relative to the config file that defines them, not relative to the extending config file. This means include/exclude arrays cannot be centralized in a base config when components are in different directories - each component must define its own include/exclude paths.

Applied to files:

  • components/persistiq/tsconfig.json
  • components/smtp2go/tsconfig.json
  • components/waitwhile/tsconfig.json
  • components/twitter/tsconfig.json
  • components/formatting/tsconfig.json
  • components/google_my_business/tsconfig.json
  • components/team_up/tsconfig.json
  • components/rise/tsconfig.json
  • components/neverbounce/tsconfig.json
  • components/mailboxvalidator/tsconfig.json
  • components/baserow/tsconfig.json
  • components/shipcloud/tsconfig.json
  • components/concord/tsconfig.json
  • components/raven_tools/tsconfig.json
  • components/mediatoolkit/tsconfig.json
  • components/xperiencify/tsconfig.json
  • components/lob/tsconfig.json
  • components/data_axle_platform/tsconfig.json
  • components/serveravatar/tsconfig.json
  • components/resend/tsconfig.json
  • components/ninox/tsconfig.json
  • components/beehiiv/tsconfig.json
  • components/google_recaptcha/tsconfig.json
  • components/cloudmersive/tsconfig.json
  • components/namely/tsconfig.json
  • components/salesmate/tsconfig.json
  • components/yelp/tsconfig.json
  • components/lemon_squeezy/tsconfig.json
  • components/currencyscoop/tsconfig.json
  • components/apitemplate_io/tsconfig.json
  • components/profitwell/tsconfig.json
  • components/dialpad/tsconfig.json
  • components/rss/tsconfig.json
  • components/docupilot/tsconfig.json
  • components/niftyimages/tsconfig.json
  • components/mailbluster/tsconfig.json
  • components/wildberries/tsconfig.json
  • components/coassemble/tsconfig.json
  • components/reversecontact/tsconfig.json
  • components/smaily/tsconfig.json
  • components/tookan/tsconfig.json
  • components/google_workspace/tsconfig.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Lint Code Base

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Centralizing include/exclude in the base tsconfig breaks per-component boundaries

In TypeScript, include/exclude and other path-based options are resolved relative to the config file that defines them. If the root tsconfig.components.json defines include/exclude (and/or outDir), those paths are resolved relative to the root, not this component directory. This typically results in compiling the wrong files, compiling nothing, or emitting to an unexpected output directory.

Action:

  • Keep the shared compilerOptions in the base config, but define include/exclude (and override outDir if needed) in each component’s tsconfig.json.

Example patch (adjust folders to what actually exists in this component):

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": [
+    "./app",
+    "./actions",
+    "./sources",
+    "./common"
+  ],
+  "exclude": [
+    "./dist"
+  ],
+  "compilerOptions": {
+    "outDir": "./dist"
+  }
 }

Also, if the base config uses placeholders like ${configDir}, note that native tsconfig doesn't support variable interpolation—those paths will not resolve as intended.

Run this script to verify the base config and identify component tsconfigs missing local include/exclude:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Base config (tsconfig.components.json) overview:"
fd -a tsconfig.components.json | while read -r base; do
  echo "Found base at: $base"
  echo "Includes in base:"
  jq -r '.include // empty | .[]?' "$base" || true
  echo "Excludes in base:"
  jq -r '.exclude // empty | .[]?' "$base" || true
  echo "compilerOptions.outDir in base:"
  jq -r '.compilerOptions.outDir // empty' "$base" || true
  echo "Raw file content (first 40 lines):"
  sed -n '1,40p' "$base"
done

echo
echo "Component tsconfigs missing local include/exclude:"
fd -a 'tsconfig.json' components | while read -r cfg; do
  has_include="$(jq -e 'has("include")' "$cfg" >/dev/null 2>&1 && echo yes || echo no)"
  has_exclude="$(jq -e 'has("exclude")' "$cfg" >/dev/null 2>&1 && echo yes || echo no)"
  if [[ "$has_include" == "no" || "$has_exclude" == "no" ]]; then
    echo "- $cfg (include: $has_include, exclude: $has_exclude)"
  fi
done

echo
echo "Verifying extends path exists for each component tsconfig:"
fd -a 'tsconfig.json' components | while read -r cfg; do
  dir="$(dirname "$cfg")"
  base="$dir/../../tsconfig.components.json"
  if [[ -f "$base" ]]; then
    echo "[OK] $cfg -> extends exists at $base"
  else
    echo "[MISSING] $cfg -> expected extends at $base not found"
  fi
done

Length of output: 65729


Require per-component include/exclude and outDir in tsconfig.json

The base tsconfig.components.json currently declares

"include": ["${configDir}/app", ],
"exclude": ["${configDir}/dist"],
"compilerOptions": { "outDir": "${configDir}/dist", }

but:

  • TypeScript does not support ${…} variables in tsconfig.json.
  • include/exclude paths are always resolved relative to the file that defines them, so putting them in the root config means every component will try to compile against the monorepo root—not its own ./app, ./actions, etc.

Our audit shows every component under components/ (e.g. beehiiv, expensify, mailbluster, etc.) is missing local include/exclude keys and an outDir override.

Action items:

  • Keep shared compilerOptions in tsconfig.components.json, but remove or ignore its include/exclude (they won’t work).
  • In each components/<name>/tsconfig.json, add component-scoped entries. For example:
 {
   "extends": "../../tsconfig.components.json",
+  "include": [
+    "./app",
+    "./actions",
+    "./sources",
+    "./common"
+  ],
+  "exclude": [
+    "./dist"
+  ],
+  "compilerOptions": {
+    "outDir": "./dist"
+  }
 }

Apply this pattern across all component directories so each package builds only its own source.

🤖 Prompt for AI Agents
components/beehiiv/tsconfig.json around lines 2-3: the file only extends the
root config and lacks component-scoped include/exclude and an outDir override;
update this file to add an "include" array pointing to this component's source
(e.g., "./app", "./actions", "./lib" as applicable), an "exclude" array
excluding this component's local dist (e.g., "./dist", "node_modules"), and set
compilerOptions.outDir to the component's dist (e.g., "./dist"); keep extending
the shared tsconfig for common compilerOptions but ensure the per-component
include/exclude and outDir are declared here so paths resolve relative to the
component.

"exclude": [
"dist",
]
"extends": "../../tsconfig.components.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Extends-only config likely breaks include/exclude and outDir; add local overrides

Per our prior learning: include/exclude are resolved relative to the config that defines them. Centralizing these in a base config won’t work for per-component directories, and relative compilerOptions like outDir in the base will also resolve relative to the base file, causing outputs to collide (e.g., emitting to a single top-level dist).

Action:

  • Add component-local include/exclude and override outDir so emits land in this component’s dist.

Apply something like this:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    // Ensure emitted JS and build info live under this component
+    "outDir": "./dist"
+  },
+  // These must be relative to THIS tsconfig, not the base
+  "include": [
+    "app/**/*.ts",
+    "actions/**/*.ts",
+    "sources/**/*.ts",
+    "common/**/*.ts"
+  ],
+  "exclude": [
+    "dist"
+  ]
 }

Run to confirm the base config won’t work as-is and that this file lacks local overrides:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Base config (should exist at repo root):"
if [[ -f "tsconfig.components.json" ]]; then
  jq '{include, exclude, compilerOptions: {outDir}}' tsconfig.components.json
else
  echo "Missing tsconfig.components.json at repo root"
fi

echo
echo "Check for unsupported variable tokens in base (e.g., \${configDir}):"
rg -n --fixed-strings '${configDir}' tsconfig.components.json || echo "No \${configDir} tokens found."

echo
echo "This component's tsconfig (should have local include/exclude/outDir overrides):"
jq '{extends, include, exclude, compilerOptions: {outDir}}' components/cloudmersive/tsconfig.json || true

echo
echo "Sanity: verify base outDir is not causing cross-component collisions:"
jq -r '.compilerOptions.outDir // "<none>"' tsconfig.components.json

echo
echo "If base includes/excludes are present, remember they are resolved RELATIVE TO THE BASE file."
echo "Each component should define its own include/exclude and outDir."

Length of output: 406


I need to re‐inspect both the base and component tsconfig files with corrected jq syntax. Running:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Base config (tsconfig.components.json) keys:"
if [[ -f tsconfig.components.json ]]; then
  jq '{include: .include, exclude: .exclude, outDir: .compilerOptions.outDir}' tsconfig.components.json
else
  echo "tsconfig.components.json not found"
fi

echo
echo "Component config (components/cloudmersive/tsconfig.json) keys:"
if [[ -f components/cloudmersive/tsconfig.json ]]; then
  jq '{extends: .extends, include: .include, exclude: .exclude, outDir: .compilerOptions.outDir}' components/cloudmersive/tsconfig.json
else
  echo "components/cloudmersive/tsconfig.json not found"
fi

Length of output: 898


Add local include/exclude and outDir overrides in components/cloudmersive/tsconfig.json

TypeScript resolves include/exclude/outDir relative to the tsconfig that defines them. Our base config uses ${configDir} tokens, but without overrides in this component, the compiler will look for source files in the root ${configDir}/app etc. and emit into ${configDir}/dist, causing missing files and output collisions.

• File needing changes: components/cloudmersive/tsconfig.json
• Current state: extends only, with no local include, exclude, or outDir

Recommended patch:

 {
   "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    // Emit JS/build info under this component
+    "outDir": "./dist"
+  },
+  // Paths are relative to this file
+  "include": [
+    "app/**/*.ts",
+    "actions/**/*.ts",
+    "sources/**/*.ts",
+    "common/**/*.ts"
+  ],
+  "exclude": [
+    "dist"
+  ]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
{
"extends": "../../tsconfig.components.json",
"compilerOptions": {
// Emit JS/build info under this component
"outDir": "./dist"
},
// Paths are relative to this file
"include": [
"app/**/*.ts",
"actions/**/*.ts",
"sources/**/*.ts",
"common/**/*.ts"
],
"exclude": [
"dist"
]
}
🤖 Prompt for AI Agents
In components/cloudmersive/tsconfig.json around line 2, the file only extends
the base tsconfig and lacks local include/exclude/outDir overrides; add local
"include" pointing to the component's source (e.g. ["src/**/*","app/**/*"] or
your component's source folders), "exclude" to ignore root-level artifacts (e.g.
["node_modules","dist","**/*.spec.ts"]), and an "outDir" set to this component's
build output (e.g. "./dist") so TypeScript resolves paths relative to this
tsconfig and emits into the component-specific directory rather than the shared
configDir.

"exclude": [
"dist",
]
"extends": "../../tsconfig.components.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Localize path-based settings.

Add local include/exclude/outDir to prevent cross-component compilation and output collisions.

 {
   "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/coassemble/tsconfig.json around line 2, the config only extends
the shared tsconfig which allows path-based settings to leak between components;
add local include and exclude patterns (e.g., include src/**/* and exclude
node_modules, dist, build, and other components) and set a component-specific
outDir (e.g., ./dist or ./build) to ensure compilation scope and outputs are
localized and prevent cross-component compilation and output collisions.

"exclude": [
"dist",
]
"extends": "../../tsconfig.components.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Re-add per-component include/exclude/outDir; verify allowJs if JS sources exist.

Centralizing these in the base won’t resolve relative to this directory and may emit to a global dist. Restore them locally.

Patch:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources", "common"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/data_axle_platform/tsconfig.json around line 2, the file currently
only extends the shared base which causes include/exclude and outDir to resolve
incorrectly for this component and may emit compiled files into a global dist;
restore per-component "include", "exclude", and "outDir" fields (with paths
relative to this directory) so this package compiles only its sources into its
own output folder, and if this component contains any .js sources set "allowJs":
true (or verify it can remain false). Keep the "extends" line, but add the local
include/exclude/outDir (and allowJs if needed) to override base settings for
correct local resolution and output.

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Keep shared compilerOptions in the base, but define include/exclude/outDir locally.

"../../tsconfig.components.json" path looks right, but per-component paths must remain here to avoid empty builds or a shared root/dist.

Patch:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
}
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources", "common"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/docupilot/tsconfig.json around lines 2 to 3, the file currently
only extends the shared config which is fine for compilerOptions, but you must
add per-component include/exclude and outDir to avoid empty builds or writing
into a shared root; update this file to keep "extends":
"../../tsconfig.components.json" and add local "include": ["src/**/*"],
"exclude": ["node_modules","**/*.spec.ts"], and "compilerOptions": { "outDir":
"dist" } (or add outDir at top-level if your base expects it), ensuring these
paths are component-local.

"exclude": [
"dist",
]
"extends": "../../tsconfig.components.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Centralized include/exclude/outDir is unsafe; TypeScript doesn’t support ${...} placeholders in tsconfig.

If the base uses values like ${configDir}, TS will treat them literally. Restore per-component include/exclude and outDir here.

Patch:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources", "common"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/reversecontact/tsconfig.json around line 2, the config currently
extends the centralized tsconfig which uses ${...} placeholders that TypeScript
will treat literally; restore local include/exclude and explicit outDir here to
avoid broken paths. Keep the "extends" but add/override "include" (e.g., the
component's src/**/*.ts/tsx), "exclude" (node_modules, dist, etc.) and a
concrete "compilerOptions.outDir" pointing to this component's build output (no
${...} placeholders); ensure paths are relative to the component folder and
remove reliance on centralized placeholders so TS resolves files correctly.

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Do not centralize include/exclude or outDir in the base config — restore them locally per component.

TypeScript resolves include/exclude and other relative paths relative to the config file that defines them. If the base at repo root defines these (or uses placeholders like ${configDir}, which TS doesn’t support), this project may compile zero files or emit to a shared root/dist. Reintroduce component-local include/exclude and outDir here.

Run this to confirm whether the base centralizes these and uses unsupported placeholders:

Apply this minimal fix locally:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    "outDir": "./dist"
+  },
+  "include": [
+    "app",
+    "actions",
+    "sources",
+    "common"
+  ],
+  "exclude": [
+    "dist"
+  ]
 }

I can bulk-generate consistent patches for all components if you confirm this approach.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Base tsconfig:"
fd -a tsconfig.components.json | xargs -I{} sh -c 'echo "==> {}"; cat "{}"'

echo
echo "Components with only 'extends' (no include/exclude/outDir):"
rg -n --glob 'components/**/tsconfig.json' -e '"extends":' -e '"include":' -e '"exclude":' -e '"outDir":' | sed 's/^/  /'

echo
echo "Check for potential placeholder usage:"
rg -n '\$\{configDir\}' tsconfig.components.json components/**/tsconfig.json || true

Length of output: 9178


Restore component-level include/exclude and outDir in tsconfig.json

TypeScript resolves include/exclude and outDir relative to the config file that defines them, and the base tsconfig.components.json uses unsupported ${configDir} placeholders. As a result, no files will match and output will go to an invalid path.

Please update components/rise/tsconfig.json (and likewise for all other components under components/**) as follows:

• File: components/rise/tsconfig.json
Add back local compilerOptions.outDir, include, and exclude.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    "outDir": "./dist"
+  },
+  "include": [
+    "app",
+    "actions",
+    "sources",
+    "common"
+  ],
+  "exclude": [
+    "dist"
+  ]
 }

I can bulk-generate consistent patches for all components once you approve this approach.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
}
{
"extends": "../../tsconfig.components.json",
"compilerOptions": {
"outDir": "./dist"
},
"include": [
"app",
"actions",
"sources",
"common"
],
"exclude": [
"dist"
]
}
🤖 Prompt for AI Agents
In components/rise/tsconfig.json around lines 2 to 3, the file currently only
extends the base tsconfig which uses ${configDir} placeholders, causing
TypeScript to misresolve include/exclude and outDir; restore component-level
settings by adding a local compilerOptions.outDir (pointing to the component's
build output, e.g., ../../dist/components/rise or appropriate relative path),
and add explicit include (e.g., ["src/**/*", "index.ts"]) and exclude (e.g.,
["node_modules", "dist", "**/*.spec.ts"]) entries so paths are resolved relative
to this file; apply the same pattern to all components under components/** for
consistent builds.

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Ensure outDir/include/exclude aren’t inherited from the base.

TS resolves paths where they’re defined. Add local overrides.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
}
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/shipcloud/tsconfig.json around lines 2–3, the file currently
extends the base tsconfig but does not override outDir/include/exclude, causing
the base settings to be inherited; add local overrides: set
compilerOptions.outDir to the package build folder (e.g. "./dist") and add
explicit top-level include (e.g. ["src/**/*"]) and exclude (e.g.
["node_modules","dist"]) entries to ensure paths are resolved from this package
rather than the base.

"exclude": [
"dist",
]
"extends": "../../tsconfig.components.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Per-component boundaries lost — reintroduce include/exclude and outDir.

Without local include/exclude/outDir, this project’s files may not be compiled, or emit to a global dist. Keep extends for shared compilerOptions; scope paths locally here.

Patch:

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": { "outDir": "./dist" },
+  "include": ["app", "actions", "sources", "common"],
+  "exclude": ["dist"]
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
{
"extends": "../../tsconfig.components.json",
"compilerOptions": { "outDir": "./dist" },
"include": ["app", "actions", "sources", "common"],
"exclude": ["dist"]
}
🤖 Prompt for AI Agents
In components/smaily/tsconfig.json around line 2, the file only extends the
shared config which loses per-component include/exclude and outDir boundaries;
update the file to keep "extends": "../../tsconfig.components.json" and add a
local "include" (e.g. ["src/**/*"]), "exclude" (e.g. ["node_modules", "dist"]),
and a compilerOptions.outDir pointing to a component-specific emit directory
(e.g. "../../dist/components/smaily"); ensure these fields are added at the
top-level so the shared compilerOptions are extended but the component compiles
and emits only its own files.

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Extends-only config risks incorrect paths; keep include/exclude and outDir local.

In TS config inheritance, path-based fields (include, exclude, outDir) resolve relative to the file that defines them. If these are defined in the base, they’ll be relative to the repo root, not this component. Also, tsconfig doesn’t support placeholders like ${configDir}. Centralize path-agnostic compilerOptions only.

Proposed fix: add per-component include/exclude and outDir here.

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    "outDir": "./dist"
+  },
+  "include": [
+    "app",
+    "actions",
+    "sources",
+    "common"
+  ],
+  "exclude": [
+    "dist",
+    "node_modules"
+  ]
 }

Run this script to verify the base config doesn’t define path-relative fields and to list components missing local include/outDir:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base="tsconfig.components.json"
if [[ ! -f "$base" ]]; then
  echo "$base not found at repo root"; exit 1
fi

echo "=== Inspect $base ==="
jq '.compilerOptions.outDir? // "<no outDir>"' "$base"
jq '.include? // "<no include>"' "$base"
jq '.exclude? // "<no exclude>"' "$base"

echo
echo "⚠️ Checking for unsupported placeholders in $base"
grep -n '\${' "$base" && echo "Found placeholder-like tokens (unsupported by TS)" || echo "No placeholder tokens found"

echo
echo "=== Components missing local include ==="
fd 'components/*/tsconfig.json' | while read -r f; do
  if ! jq -e '.include? | length > 0' "$f" >/dev/null 2>&1; then
    echo "$f"
  fi
done

echo
echo "=== Components missing local compilerOptions.outDir ==="
fd 'components/*/tsconfig.json' | while read -r f; do
  if ! jq -e '.compilerOptions.outDir? | length > 0' "$f" >/dev/null 2>&1; then
    echo "$f"
  fi
done

Length of output: 1324


Localize path-based TS config settings and remove unsupported placeholders

The root tsconfig.components.json currently defines outDir, include, and exclude using ${configDir} placeholders, which TypeScript doesn’t support—and even if it did, these path-based fields would resolve relative to the base file, not each component. Per TS config inheritance rules, each component must declare its own outDir, include, and exclude.

Please make the following changes:

• In tsconfig.components.json (repo root):
– Remove the placeholder-based path fields:
compilerOptions.outDir
include
exclude

• In each component’s tsconfig.json (e.g. components/wildberries/tsconfig.json):
– Add local path settings, for example:

 {
   "extends": "../../tsconfig.components.json",
+  "compilerOptions": {
+    "outDir": "./dist"
+  },
+  "include": [
+    "app",
+    "actions",
+    "sources",
+    "common"
+  ],
+  "exclude": [
+    "dist",
+    "node_modules"
+  ]
 }

Repeat this pattern for any other component configs to ensure consistent, correct path resolution.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"extends": "../../tsconfig.components.json"
}
{
"extends": "../../tsconfig.components.json",
"compilerOptions": {
"outDir": "./dist"
},
"include": [
"app",
"actions",
"sources",
"common"
],
"exclude": [
"dist",
"node_modules"
]
}
🤖 Prompt for AI Agents
In components/wildberries/tsconfig.json around lines 2-3, the config currently
only extends the root tsconfig which contains unsupported placeholder path
fields; remove any placeholder-based path fields (compilerOptions.outDir,
include, exclude) from the root tsconfig.components.json, and in this component
tsconfig add local path settings: set compilerOptions.outDir to a
component-local folder (e.g. "./dist"), and add include (e.g. ["src/**/*"]) and
exclude (e.g. ["node_modules", "dist"]) entries so paths resolve correctly
per-component.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b614484 and c3ba89c.

📒 Files selected for processing (1)
  • components/infusionsoft/tsconfig.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T01:15:48.881Z
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#17983
File: components/team_up/tsconfig.json:2-15
Timestamp: 2025-08-08T01:15:48.881Z
Learning: In TypeScript config inheritance, include and exclude paths are resolved relative to the config file that defines them, not relative to the extending config file. This means include/exclude arrays cannot be centralized in a base config when components are in different directories - each component must define its own include/exclude paths.

Applied to files:

  • components/infusionsoft/tsconfig.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Lint Code Base

Comment on lines +2 to +3
"extends": "../../tsconfig.components.json"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify base config doesn’t rely on unsupported placeholders (e.g., ${configDir}).

TypeScript doesn’t interpolate variables in tsconfig. If the base uses ${configDir} in include/exclude/outDir, tsc will misinterpret these paths.

Run this script to confirm and inspect base config usage:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show base config location and contents
if [ -f tsconfig.components.json ]; then
  echo "Found tsconfig.components.json at repo root"
  echo "----- BEGIN tsconfig.components.json -----"
  cat tsconfig.components.json
  echo "----- END tsconfig.components.json -----"
else
  echo "tsconfig.components.json not found at repo root" >&2
fi

# Search for unsupported placeholders like ${configDir}
echo "Searching for placeholder patterns in tsconfig files..."
rg -n --no-heading '\$\{configDir\}|\$\{[^}]+\}' --glob 'tsconfig*.json' || true

# Check if base defines include/exclude (and note they’d resolve relative to the base file)
echo "Base include/exclude definitions (if any):"
rg -n --no-heading '^\s*"include"\s*:|^\s*"exclude"\s*:' tsconfig.components.json || true

Length of output: 1599


Remove unsupported ${configDir} placeholders in your base tsconfig

TypeScript doesn’t interpolate variables in tsconfig files, so all of these entries will be treated literally and fail to resolve:

  • In tsconfig.components.json (at repo root):
    • Lines 3–6: "${configDir}/app", "${configDir}/actions", "${configDir}/sources", "${configDir}/common" in include
    • Line 9: "${configDir}/dist" in exclude
    • Line 23: "${configDir}/dist" in compilerOptions.outDir

You should replace these with real relative paths (resolved against the base config file) or move each component’s include/exclude/outDir definitions into its own tsconfig. For example:

// tsconfig.components.json
{
  "include": [
    "components/*/app",
    "components/*/actions",
    "components/*/sources",
    "components/*/common"
  ],
  "exclude": [
    "components/*/dist"
  ],
  "compilerOptions": {
    //
    "outDir": "components/*/dist"
  }
}

Alternatively, define include, exclude, and outDir in each components/<name>/tsconfig.json per TS config inheritance rules.

🤖 Prompt for AI Agents
In components/infusionsoft/tsconfig.json around lines 2–3, the base tsconfig
(tsconfig.components.json) uses unsupported "${configDir}" placeholders which
TypeScript will not interpolate; update the base config so
include/exclude/outDir use real relative paths (e.g. replace
"${configDir}/app","${configDir}/actions","${configDir}/sources","${configDir}/common"
with
"components/*/app","components/*/actions","components/*/sources","components/*/common",
replace "${configDir}/dist" in exclude with "components/*/dist", and replace
"${configDir}/dist" outDir with a concrete path like "components/*/dist"), or
remove those entries from the shared base and instead add proper
include/exclude/outDir entries into each component's own tsconfig.json resolved
relative to that component.

⚠️ Potential issue

Do not centralize include/exclude; define them locally per component.

TypeScript resolves include/exclude relative to the config that defines them. Moving these to the base config will resolve paths relative to the base file, not this component, causing incorrect file discovery.

Apply this diff to restore local include/exclude (keeping compilerOptions inherited from the base):

 {
-  "extends": "../../tsconfig.components.json"
+  "extends": "../../tsconfig.components.json",
+  "include": [
+    "app/**/*",
+    "actions/**/*",
+    "sources/**/*",
+    "common/**/*"
+  ],
+  "exclude": [
+    "dist",
+    "node_modules"
+  ]
 }

If the base attempts to set outDir using placeholders, you can also add a local override:

+  "compilerOptions": {
+    "outDir": "dist"
+  }
🤖 Prompt for AI Agents
In components/infusionsoft/tsconfig.json around lines 2 to 3, the component
currently only extends the base config which centralized include/exclude;
restore local include and exclude entries so paths are resolved relative to this
component (e.g., add an "include" array for this component's src/test/typings as
needed and an "exclude" array for node_modules/build artifacts) while keeping
"extends" to inherit compilerOptions from the base; if the base config sets
outDir using placeholders that don't resolve here, add a local
compilerOptions.outDir override pointing to the correct component-specific
output directory.

Copy link
Collaborator

@js07 js07 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@GTFalcao GTFalcao merged commit 61746f4 into master Aug 12, 2025
11 checks passed
@GTFalcao GTFalcao deleted the tsconfig-updates branch August 12, 2025 13:06
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.

3 participants