Skip to content

building a single ES module file (solved) #7

Description

@yoshikiohshima

I have been loading S2JS into my browser app in the way it is suggested in the doc:

import { s2 } from 'https://esm.sh/s2js'

but I want to have a single ES module file that I can load from my own local directory or a server.

I cloned this repo, run npm i and npm run build and it fails with an error:

% npm run build

> s2js@0.0.0-development build
> npx --yes tsdx@^0 build --entry index.ts

@rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`.
@rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`.
⠙ Creating entry file  99%                 344ms, estimated 342ms
✓ Creating entry file 346 ms
⠙ Building modules
⠹ Building modules
(babel plugin) SyntaxError: /Users/ohshima/src/vehicle/yoshiki/s2js/r1/Interval.ts: Unexpected token (7:4)

   5 |  */
   6 | export class Interval {
>  7 |   lo: number = 0.0
     |     ^
   8 |   hi: number = 0.0
   9 |
  10 |   /**

at undefined:7:4
SyntaxError: /Users/ohshima/src/vehicle/yoshiki/s2js/r1/Interval.ts: Unexpected token (7:4)

   5 |  */
   6 | export class Interval {
>  7 |   lo: number = 0.0
     |     ^
   8 |   hi: number = 0.0
   9 |
  10 |   /**

It indicates that its TypeScript syntax is not handled by roll up.

In any case, I tried to use vite to do the job, and with changes to two files (geojson/_index.ts and s2/_index.ts) I managed to make a single ES module file that works.

The change is like this:

diff --git a/geojson/_index.ts b/geojson/_index.ts
index b8f653f..0a6c516 100644
--- a/geojson/_index.ts
+++ b/geojson/_index.ts
@@ -2,8 +2,8 @@
  * Module geojson implements types and functions for working with GeoJSON.
  * @module geojson
  */
-export { Encodable, Decodable } from './geometry'
+export type { Encodable, Decodable } from './geometry'
 export { toGeoJSON, fromGeoJSON } from './geometry'
 
-export { RegionCovererOptions } from './RegionCoverer'
-export { RegionCoverer } from './RegionCoverer'
+export type { RegionCovererOptions } from './RegionCoverer'
+export type { RegionCoverer } from './RegionCoverer'

So the interface exported cannot be mixed with actual classes/objects.

If you think this change is valuable, I can make a pull request.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions