jsonurl / jsonurl-js

JSON->URL defines a text format for the JSON data model suitable for use within a URL/URI (as described by RFC3986). This repository holds the JavaScript reference implementation of JSON->URL.
http://www.jsonurl.org/
MIT License
42 stars 7 forks source link

Available as an ECMAScript module? #616

Open SebastianKohler opened 1 year ago

SebastianKohler commented 1 year ago

Hi,

First of all, thank you for a great package!

I'm using this in an Angular 15 project. Angular points out that JSON→URL is a CommonJS module, which can prevent bundlers and minifiers from optimizing my application, which results in a larger bundle size. It recommends not to depend on CommonJS modules and instead use ECMAScript modules.

Any chance of an ECMAScript module of JSON→URL?

dmaccormack commented 1 year ago

Hi, @SebastianKohler.

JSON→URL is already available as a module. This test shows a example: https://github.com/jsonurl/jsonurl-js/blob/main/itest/es6-native/main.js#L25.

How are you referencing it?

SebastianKohler commented 1 year ago

Thanks for your reply!

I use it in a service in Angular like this:

import { Injectable } from '@angular/core';
import JsonURL from '@jsonurl/jsonurl';

@Injectable({
  providedIn: 'root',
})
export class UrlService {
    constructor() {}

    parse(text: string, impliedArray: boolean = false): any {
        return JsonURL.parse(text, {
            AQF: true,
            ...(impliedArray && { impliedArray: [] })
        });
    }

    stringify(value: any, impliedArray: boolean = false): string | undefined {
        return JsonURL.stringify(value, {
            AQF: true,
            ...(impliedArray && { impliedArray: true })
        });
    }

}
dmaccormack commented 1 year ago

Where is the warning message coming from (e.g. the bundler) and what is the exact message you're seeing?

SebastianKohler commented 1 year ago
Warning: C:\Users\sebkoh\Documents\GitHub\digital_edition_web_ng\src\app\services\url.service.ts depends on '@jsonurl/jsonurl'. CommonJS or AMD dependencies can cause optimization bailouts.
For more info see: https://angular.io/guide/build#configuring-commonjs-dependencies

It's the Angular @angular-devkit/build-angular builder that produces the warning. It's displayed every time my Angular app is built.