fable-compiler/ts2fable

Conversion crashes on the p5js typescript type definitions

Closed this issue · 5 comments

Hi, I'm trying to convert the p5js typescript bindings, but ts2fable crashes. I might be using ts2fable in the wrong way, as I'm not entirely sure what I have to use after the -e flag.

Minimal setup:

$ dotnet new fable
$ npm install --save-dev @types/p5 ts2fable p5
$ npx ts2fable node_modules/@types/p5/index.d.ts src/P5.fs -e @types/p5

This outputs a bunch of stuff but then suddenly crashes with the message:

// ... older output omitted
createIExportsModule [p5/src/core/shape/attributes; src; core; shape; attributes], ../../../index
createIExportsModule [p5/src/core/shape/curves], ./src/core/shape/curves
createIExportsModule [p5/src/core/shape/curves; src; core; shape; curves], ../../../index
createIExportsModule [p5/src/core/shape/vertex], ./src/core/shape/vertex
createIExportsModule [p5/src/core/shape/vertex; src; core; shape; vertex], ../../../index
Error: clo4$$1 is not a function

As I said, I'm not entirely sure if I'm using -e right. I tried -e p5, -e @types/p5 p5 as well, with the same result.

You need to use ts2fable@next. "current" ts2fable on npm is unfortunately very old :(
With ts2fable@next it doesn't crash any more

(npx ts2fable --version should show 0.8.0 with some build number (like 0.8.0-build.718))






about --export:
That's only needed when you want to specify multiple .d.ts files. For just one file use:
npx ts2fable node_modules/@types/p5/index.d.ts src/P5.fs

And: (I think we should add that to the cmd --help documentation)

  • If you specify .d.ts in front and in back again it uses these file twice -> duplicates in resulting fs file
  • --export collects files -> must be file paths to .d.ts files


And with p5: p5 isn't that great supported by ts2fable: declarations split over many .d.ts files and it uses <reference path="....d.ts"> (instead of imports).
So ts2fable node_modules/@types/p5/index.d.ts src/P5.fs just translates what is in index.d.ts -- not all other .d.ts files. Probably not what you want

Here comes --export into play: ts2fable src/P5.fs --export FILES For FILES we must list all .d.ts inside p5:

$p5 = Get-Item ./node_modules/@types/p5
$files = Get-ChildItem -Recurse -Path $p5 -Include *.d.ts
$fileNames = $files | Select-Object -ExpandProperty FullName
npx ts2fable ./src/P5.fs --export $fileNames

Now every .d.ts file gets included.

But the result isn't all correct as multiple .d.ts files aren't that great supported. ts2fable just translates each .d.ts and throws all together into the resulting .fs file.

The types seem to be ok, but the structure is a bit off.
Especially because the individual .d.ts files all contain something like:

import * as p5 from '../../index';

declare module '../../index' {
  //...
}

which ts2fable currently cannot handle, but instead does:

module P5 = ______index

module ______index =

But a first glance that should be fixable by hand and/or search/replace.
Like renaming module ___index to module P5 , removing module P5 = ____index and removing let [<ImportAll("p5")>] ``../../index``: ______index.IExports = jsNative

Thank you for your time to write such a detailed response, I appreciate it. It seems I'll have to take a deep dive into fable and ts2fable, your writeup will certainly help a lot. Thanks again!

Sharing notes on my exercise with p5 ts2fable bindings. Lets say one should use the above linked perfect-fifth library for any serious attempt at using p5 in F#. But I could not figure out how the p5 bindings in this tutorial were created: semuserable/fable-basic-interop#29

Above instructions,
Works in npm i -g ts2fable@0.8.0-build.718
Fails in npm i -g ts2fable@0.9.0-build.725 which is current @next

In powershell, the $fileNames array or ([string]$fileNames) cast string would have ts2fable not find the files. I had to copy and paste the file list string into the prompt.

Also, while there is a great explanation on the issue above. It does not seems worth sorting out for such a marginal experiment.

Sharing the current build error log for science:

ts2fable .\src\App\p5.fs --export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\lib\addons\p5.sound.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\accessibility\describe.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\accessibility\outputs.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\creating_reading.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\p5.Color.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\setting.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\2d_primitives.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\attributes.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\curves.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\vertex.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\constants.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\environment.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Element.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Graphics.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Renderer.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\rendering.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\structure.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\transform.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\data\local_storage.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\data\p5.TypedDict.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\dom\dom.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\acceleration.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\keyboard.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\mouse.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\touch.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\image.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\loading_displaying.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\p5.Image.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\pixels.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\files.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.Table.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.TableRow.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.XML.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\calculation.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\math.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\noise.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\p5.Vector.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\random.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\trigonometry.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\attributes.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\loading_displaying.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\p5.Font.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\array_functions.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\conversion.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\string_functions.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\time_date.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\3d_primitives.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\interaction.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\light.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\loading.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\material.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Camera.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Geometry.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.RendererGL.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Shader.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\constants.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\global.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\index.d.ts C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\literals.d.ts
ts2fable 0.9.0-build.725
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\lib\addons\p5.sound.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\accessibility\describe.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\accessibility\outputs.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\creating_reading.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\p5.Color.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\color\setting.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\2d_primitives.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\attributes.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\curves.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\shape\vertex.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\constants.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\environment.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Element.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Graphics.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\p5.Renderer.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\rendering.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\structure.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\core\transform.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\data\local_storage.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\data\p5.TypedDict.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\dom\dom.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\acceleration.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\keyboard.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\mouse.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\events\touch.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\image.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\loading_displaying.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\p5.Image.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\image\pixels.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\files.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.Table.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.TableRow.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\io\p5.XML.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\calculation.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\math.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\noise.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\p5.Vector.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\random.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\math\trigonometry.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\attributes.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\loading_displaying.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\typography\p5.Font.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\array_functions.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\conversion.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\string_functions.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\utilities\time_date.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\3d_primitives.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\interaction.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\light.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\loading.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\material.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Camera.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Geometry.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.RendererGL.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\src\webgl\p5.Shader.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\constants.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\global.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\index.d.ts
export C:\Users\Poro\dev\MyFirstFableApp\node_modules\@types\p5\literals.d.ts
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 271
unsupported Statement kind: 266
createIExportsModule [p5],
unsupported Statement kind: 276
TypeError: Cannot read properties of undefined (reading 'kind')
    at readTypeNode (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:15870:30)
    at readAliasDeclaration (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16231:16)
    at tryReadStatement (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16330:28)
    at readStatement (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16359:24)
    at file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16403:103
    at collect$1 (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:4140:18)
    at readSourceFile (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16403:85)
    at file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:16576:70
    at file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:4168:34
    at fold$1 (file:///C:/Users/Poro/AppData/Roaming/npm/node_modules/ts2fable/dist/ts2fable.js:4011:15)
    ```

Cheers

Fixed in #472

Error was absolute on my side:
ts2fable doesn't work with current TypeScript (5.1) -- but in package.json it was specified as ok :/
-> new ts2fable installs used new TS versions ... which failed.

I now pin TS to 5.0.x.

Updated package should soon be available (see #472 for status)
Edit: is updated

In powershell, the $fileNames array or ([string]$fileNames) cast string would have ts2fable not find the files. I had to copy and paste the file list string into the prompt.

That's strange. I just checked with the exact same commands, and ts2fable correctly uses all files.

Some possible issues:

  • old powershell (powershell.exe (old, windows) vs pwsh.exe (new, multiple os)). There are a lot of differences between powershell and pwsh. Though I think neither should be about arrays
  • You seem to run on a unix system (just ts2fable, without npx or node before -> uses shebang). Try running with npx: npx ts2fable .... Maybe there's some different with arguments passing? (though node path/to/ts2fable.js .... works ... and that should be the same as just calling ts2fable)

Cast is unnecessary. PS tries to converts arguments automatically into correct type.
But here might be another issue: if $fileNames is empty it is not a real empty array -- but a null-ish element. which might be an issue? Arrays in PS are really strange. If you want to make sure it is indeed an array: Wrap into @() (@($fileNames)).
But that should not matter if p5 path is correct. Do $p5, $files, and $fileNames all show the expected results or is any of these empty?