nxext/nx-extensions

Stencil | React: When using addOutputTarget an error is being thrown

PatrickInFrontEnd opened this issue · 4 comments

Describe the bug
When using command nx g @nxext/stencil:add-outputtarget my-lib there is an error being shown and so the output target is not being created - without the possibility to work with stencil components.

image
RangeError: path should be a `path.relative()`d string, but got "./web-components-react/**/generated"
    at throwError (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/ignore/index.js:387:9)
    at checkPath (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/ignore/index.js:406:12)
    at Ignore._test (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/ignore/index.js:527:5)
    at Ignore.ignores (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/ignore/index.js:572:17)
    at addToGitignore (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/@nxext/stencil/src/utils/utillities.js:21:13)
    at /Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/@nxext/stencil/src/generators/add-outputtarget/add-react/generator.js:37:41
    at Generator.next (<anonymous>)
    at fulfilled (/Users/[path]/Documents/my-applications/training/ember-stencil-training/node_modules/tslib/tslib.js:166:62)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

To Reproduce
Steps to reproduce the behavior:

  • Create stencil library using CLI along with NX monorepo
  • use command nx g @nxext/stencil:add-outputtarget [lib_name] --outputType='react'

Expected behavior
A config has been properly created with an output target for react-library, so that NX knows how to exactly run the library and convert Stencil web-components into wrappers for react library.

Additional context
package.json file:

{
  "name": "ember-stencil-app",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "new:lib:react": "nx g @nx/react:lib",
    "new:app": "nx g @nx/react:app"
  },
  "private": true,
  "dependencies": {
    "jest-cli": "^29.7.0",
    "puppeteer": "^22.11.0",
    "react": "18.3.1",
    "react-dom": "18.3.1",
    "react-router-dom": "6.11.2"
  },
  "devDependencies": {
    "@nx/storybook": "^19.3.0",
    "@nxext/stencil": "^19.0.0",
    "@stencil/core": "^4.18.3",
    "@stencil/sass": "^3.0.12",
    "@babel/core": "^7.14.5",
    "@babel/preset-react": "^7.14.5",
    "@nx/cypress": "19.3.0",
    "@nx/eslint": "19.3.0",
    "@nx/eslint-plugin": "19.3.0",
    "@nx/jest": "19.3.0",
    "@nx/js": "19.3.0",
    "@nx/react": "19.3.0",
    "@nx/rollup": "19.3.0",
    "@nx/web": "19.3.0",
    "@nx/webpack": "19.3.0",
    "@nx/workspace": "19.3.0",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
    "@rollup/plugin-url": "^8.0.2",
    "@svgr/rollup": "^8.1.0",
    "@svgr/webpack": "^8.0.1",
    "@swc-node/register": "~1.9.1",
    "@swc/cli": "~0.3.12",
    "@swc/core": "~1.5.7",
    "@swc/helpers": "~0.5.11",
    "@testing-library/react": "15.0.6",
    "@types/jest": "^29.5.12",
    "@types/node": "^20.14.2",
    "@types/react": "18.3.1",
    "@types/react-dom": "18.3.0",
    "@typescript-eslint/eslint-plugin": "^7.3.0",
    "@typescript-eslint/parser": "^7.3.0",
    "babel-jest": "^29.4.1",
    "core-js": "^3.36.1",
    "cypress": "^13.8.0",
    "eslint": "~8.57.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-cypress": "^2.13.4",
    "eslint-plugin-import": "2.27.5",
    "eslint-plugin-jsx-a11y": "6.7.1",
    "eslint-plugin-react": "7.32.2",
    "eslint-plugin-react-hooks": "4.6.0",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^29.4.1",
    "nx": "19.3.0",
    "prettier": "^2.6.2",
    "react-refresh": "^0.10.0",
    "rollup": "^4.14.0",
    "ts-jest": "^29.1.0",
    "ts-node": "10.9.1",
    "tslib": "^2.3.0",
    "typescript": "~5.4.2",
    "webpack-cli": "^5.1.4"
  }
}

node version: 20.14.0
npm version: 10.7.0
OS - Macbook Pro 2019 - Sonoma 14.5
Processor: 2,6 GHz 6-Core Intel Core i7

ADDITIONAL INFO: do not mind the name of ember - it is a react application being set up

I have the same issue with every outputType (angular, react, svelte)
I tried a minimal repro by creating a new Stencil "my-lib" project and then did:
nx g @nxext/stencil:add-outputtarget my-lib --outputType='angular'

Node   : 22.0.0
OS     : linux-x64
pnpm   : 9.1.4

nx                 : 18.2.1
@nx/js             : 18.2.1
@nx/jest           : 18.2.1
@nx/linter         : 18.2.1
@nx/eslint         : 18.2.1
@nx/workspace      : 18.2.1
@nx/angular        : 18.2.1
@nx/cypress        : 18.2.1
@nx/devkit         : 18.2.1
@nx/eslint-plugin  : 18.2.1
@nx/storybook      : 18.2.1
@nrwl/tao          : 18.2.1
@nx/web            : 18.2.1
@nx/webpack        : 18.2.1
typescript         : 5.4.5
---------------------------------------
Community plugins:
@nxext/stencil : 19.0.0

I also tried downgrading to @nxext/stencil 18.0.0 but had the same error with that

Ok, did some digging around and the problem originated from this function:

export function addToGitignore(host: Tree, path: string) {

I've temporarily hidden my .gitignore file (mv .gitignore ..gitignore) and then the command does execute.

After this you have to add your ./web-components-react/**/generated path manually to the .gitignore file.

I'm sorry that I don't have time to find out what the exact cause of the problem is and to suggest a fix :(

Still appreciate for some kind of workaround - I'll try your approach, waiting for the fix then ;)

Seems like a problem with the gitignore library. I'll remove that (wasn't the first time)