web: add ESM to generated Client
https://github.com/OpenAPITools/openapi-generator/issues/8881 Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							@ -45,6 +45,7 @@ gen-web:
 | 
			
		||||
		-o /local/web-api \
 | 
			
		||||
		--additional-properties=typescriptThreePlus=true,supportsES6=true,npmName=@goauthentik/api,npmVersion=${NPM_VERSION}
 | 
			
		||||
	mkdir -p web/node_modules/@goauthentik/api
 | 
			
		||||
	python -m scripts.web_api_esm
 | 
			
		||||
	cd web-api && npm i
 | 
			
		||||
	\cp -rfv web-api/* web/node_modules/@goauthentik/api
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								scripts/web_api_esm.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								scripts/web_api_esm.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
"""Enable ESM Modules for generated Web API"""
 | 
			
		||||
from json import loads, dumps
 | 
			
		||||
 | 
			
		||||
TSCONFIG_ESM = {
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "declaration": True,
 | 
			
		||||
    "target": "es6",
 | 
			
		||||
    "module": "esnext",
 | 
			
		||||
    "moduleResolution": "node",
 | 
			
		||||
    "outDir": "./dist/esm",
 | 
			
		||||
    "typeRoots": [
 | 
			
		||||
      "node_modules/@types"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "exclude": [
 | 
			
		||||
    "dist",
 | 
			
		||||
    "node_modules"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
with open("web-api/package.json", encoding="utf-8") as _package:
 | 
			
		||||
    package = loads(_package.read())
 | 
			
		||||
    package["module"] = "./dist/esm/index.js"
 | 
			
		||||
    package["sideEffects"] = False
 | 
			
		||||
    package["scripts"]["build"] =  "tsc && tsc --project tsconfig.esm.json"
 | 
			
		||||
 | 
			
		||||
open("web-api/package.json", "w+", encoding="utf-8").write(dumps(package))
 | 
			
		||||
open("web-api/tsconfig.esm.json", "w+", encoding="utf-8").write(dumps(TSCONFIG_ESM))
 | 
			
		||||
							
								
								
									
										14
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										14
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -15,7 +15,7 @@
 | 
			
		||||
                "@babel/preset-env": "^7.15.0",
 | 
			
		||||
                "@babel/preset-typescript": "^7.15.0",
 | 
			
		||||
                "@fortawesome/fontawesome-free": "^5.15.4",
 | 
			
		||||
                "@goauthentik/api": "^1629704636.0.0",
 | 
			
		||||
                "@goauthentik/api": "^2021.8.1-rc1-1629709535",
 | 
			
		||||
                "@lingui/cli": "^3.10.2",
 | 
			
		||||
                "@lingui/core": "^3.10.4",
 | 
			
		||||
                "@lingui/macro": "^3.10.2",
 | 
			
		||||
@ -1690,9 +1690,9 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@goauthentik/api": {
 | 
			
		||||
            "version": "1629704636.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-1629704636.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-rjUjp7Gbf/Tzw0hGPx2ig5InXa4bPqj4FkFnIEgR6T1w6jbHV+q2BghztVFDc2hK2ib2NnQUQp6LWIAcYLAdSw=="
 | 
			
		||||
            "version": "2021.8.1-rc1-1629709535",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.8.1-rc1-1629709535.tgz",
 | 
			
		||||
            "integrity": "sha512-rlOt63gF3ALGuRIn8RiWRT5cZ4JhKu9koCtdFA7FDOYYU9jWBJ3e/YlFLLOLQrL8Cyl2g553We98t0n8AyDOBQ=="
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@humanwhocodes/config-array": {
 | 
			
		||||
            "version": "0.5.0",
 | 
			
		||||
@ -9567,9 +9567,9 @@
 | 
			
		||||
            "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg=="
 | 
			
		||||
        },
 | 
			
		||||
        "@goauthentik/api": {
 | 
			
		||||
            "version": "1629704636.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-1629704636.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-rjUjp7Gbf/Tzw0hGPx2ig5InXa4bPqj4FkFnIEgR6T1w6jbHV+q2BghztVFDc2hK2ib2NnQUQp6LWIAcYLAdSw=="
 | 
			
		||||
            "version": "2021.8.1-rc1-1629709535",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.8.1-rc1-1629709535.tgz",
 | 
			
		||||
            "integrity": "sha512-rlOt63gF3ALGuRIn8RiWRT5cZ4JhKu9koCtdFA7FDOYYU9jWBJ3e/YlFLLOLQrL8Cyl2g553We98t0n8AyDOBQ=="
 | 
			
		||||
        },
 | 
			
		||||
        "@humanwhocodes/config-array": {
 | 
			
		||||
            "version": "0.5.0",
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,7 @@
 | 
			
		||||
        "@babel/preset-env": "^7.15.0",
 | 
			
		||||
        "@babel/preset-typescript": "^7.15.0",
 | 
			
		||||
        "@fortawesome/fontawesome-free": "^5.15.4",
 | 
			
		||||
        "@goauthentik/api": "^2021.8.1-rc1+1629705955",
 | 
			
		||||
        "@goauthentik/api": "^2021.8.1-rc1-1629709535",
 | 
			
		||||
        "@lingui/cli": "^3.10.2",
 | 
			
		||||
        "@lingui/core": "^3.10.4",
 | 
			
		||||
        "@lingui/macro": "^3.10.2",
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,6 @@ import cssimport from "rollup-plugin-cssimport";
 | 
			
		||||
import copy from "rollup-plugin-copy";
 | 
			
		||||
import babel from "@rollup/plugin-babel";
 | 
			
		||||
import replace from "@rollup/plugin-replace";
 | 
			
		||||
import * as authentik from "@goauthentik/api";
 | 
			
		||||
 | 
			
		||||
const extensions = [".js", ".jsx", ".ts", ".tsx"];
 | 
			
		||||
 | 
			
		||||
@ -47,6 +46,9 @@ const resources = [
 | 
			
		||||
const isProdBuild = process.env.NODE_ENV === "production";
 | 
			
		||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 | 
			
		||||
function manualChunks(id) {
 | 
			
		||||
    if (id.includes("@goauthentik/api")) {
 | 
			
		||||
        return "api";
 | 
			
		||||
    }
 | 
			
		||||
    if (id.includes("locales")) {
 | 
			
		||||
        const parts = id.split("/");
 | 
			
		||||
        const file = parts[parts.length - 1];
 | 
			
		||||
@ -100,11 +102,7 @@ export default [
 | 
			
		||||
        plugins: [
 | 
			
		||||
            cssimport(),
 | 
			
		||||
            resolve({ extensions, browser: true }),
 | 
			
		||||
            // Because the API Client uses star exports from typescript, we have to explicitly tell rollup
 | 
			
		||||
            // Which classes can be imported
 | 
			
		||||
            commonjs({
 | 
			
		||||
                namedExports: { "@goauthentik/api": Object.keys(authentik) },
 | 
			
		||||
            }),
 | 
			
		||||
            commonjs(),
 | 
			
		||||
            babel({
 | 
			
		||||
                extensions,
 | 
			
		||||
                babelHelpers: "runtime",
 | 
			
		||||
@ -136,11 +134,7 @@ export default [
 | 
			
		||||
        plugins: [
 | 
			
		||||
            cssimport(),
 | 
			
		||||
            resolve({ extensions, browser: true }),
 | 
			
		||||
            // Because the API Client uses star exports from typescript, we have to explicitly tell rollup
 | 
			
		||||
            // Which classes can be imported
 | 
			
		||||
            commonjs({
 | 
			
		||||
                namedExports: { "@goauthentik/api": Object.keys(authentik) },
 | 
			
		||||
            }),
 | 
			
		||||
            commonjs(),
 | 
			
		||||
            babel({
 | 
			
		||||
                extensions,
 | 
			
		||||
                babelHelpers: "runtime",
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user