Turfjs / turf

A modular geospatial engine written in JavaScript and TypeScript
https://turfjs.org/
MIT License
9.22k stars 935 forks source link

@turf/random's module is "illegal", causing rollup to report an error #2151

Closed backspaces closed 3 years ago

backspaces commented 3 years ago

Please provide the following when reporting an issue:

Not applicable

I'm using rollup to create a large single Turf es6 module. The presence of "this" & code before it's imports in

node_modules/@turf/random/dist/es/index.js

produces errors in rollup. This fixes the problem:

// var __spreadArrays = (this && this.__spreadArrays) || function () {
//     for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
//     for (var r = Array(s), k = 0, i = 0; i < il; i++)
//         for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
//             r[k] = a[j];
//     return r;
// };
import { featureCollection, isNumber, isObject, lineString, point, polygon, } from "@turf/helpers";
var __spreadArrays = function () {
    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
    for (var r = Array(s), k = 0, i = 0; i < il; i++)
        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
            r[k] = a[j];
    return r;
};

With this fix, I still get circular dependencies reported by rollup:

(!) Circular dependencies
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Cell.js -> node_modules/d3-voronoi/src/Edge.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Cell.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Circle.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Diagram.js
backspaces commented 3 years ago

Some details so you can easily reproduce this:

I created a new test dir, cd'd to it and ran:

npm init -y
yarn add rollup @rollup/plugin-commonjs @rollup/plugin-node-resolve -D
yarn add @turf/turf

Then created a rollup.config.js:

import commonjs from '@rollup/plugin-commonjs'
import { nodeResolve } from '@rollup/plugin-node-resolve'

export default {
    input: './node_modules/@turf/turf/dist/es/index.js',
    output: {
        file: 'turf.all.js',
        format: 'esm',
    },
    plugins: [nodeResolve(), commonjs()],
}

Finally ran:

node_modules/.bin/rollup -c

Which produced:

./node_modules/@turf/turf/dist/es/index.js → turf.all.js...
(!) Circular dependencies
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Cell.js -> node_modules/d3-voronoi/src/Edge.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Cell.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Circle.js -> node_modules/d3-voronoi/src/Diagram.js
node_modules/d3-voronoi/src/Diagram.js -> node_modules/d3-voronoi/src/Beach.js -> node_modules/d3-voronoi/src/Diagram.js
(!) `this` has been rewritten to `undefined`
https://rollupjs.org/guide/en/#error-this-is-undefined
node_modules/@turf/random/dist/es/index.js
1: var __spreadArrays = (this && this.__spreadArrays) || function () {
                         ^
2:     for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
3:     for (var r = Array(s), k = 0, i = 0; i < il; i++)
...and 1 other occurrence
created turf.all.js in 2.8s
mfedderly commented 3 years ago

If we swap to using tslib instead of the inline implementations, it should fix this issue and slightly reduce our final bundle sizes for folks. Good catch!