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 \
 | 
							-o /local/web-api \
 | 
				
			||||||
		--additional-properties=typescriptThreePlus=true,supportsES6=true,npmName=@goauthentik/api,npmVersion=${NPM_VERSION}
 | 
							--additional-properties=typescriptThreePlus=true,supportsES6=true,npmName=@goauthentik/api,npmVersion=${NPM_VERSION}
 | 
				
			||||||
	mkdir -p web/node_modules/@goauthentik/api
 | 
						mkdir -p web/node_modules/@goauthentik/api
 | 
				
			||||||
 | 
						python -m scripts.web_api_esm
 | 
				
			||||||
	cd web-api && npm i
 | 
						cd web-api && npm i
 | 
				
			||||||
	\cp -rfv web-api/* web/node_modules/@goauthentik/api
 | 
						\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-env": "^7.15.0",
 | 
				
			||||||
                "@babel/preset-typescript": "^7.15.0",
 | 
					                "@babel/preset-typescript": "^7.15.0",
 | 
				
			||||||
                "@fortawesome/fontawesome-free": "^5.15.4",
 | 
					                "@fortawesome/fontawesome-free": "^5.15.4",
 | 
				
			||||||
                "@goauthentik/api": "^1629704636.0.0",
 | 
					                "@goauthentik/api": "^2021.8.1-rc1-1629709535",
 | 
				
			||||||
                "@lingui/cli": "^3.10.2",
 | 
					                "@lingui/cli": "^3.10.2",
 | 
				
			||||||
                "@lingui/core": "^3.10.4",
 | 
					                "@lingui/core": "^3.10.4",
 | 
				
			||||||
                "@lingui/macro": "^3.10.2",
 | 
					                "@lingui/macro": "^3.10.2",
 | 
				
			||||||
@ -1690,9 +1690,9 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "node_modules/@goauthentik/api": {
 | 
					        "node_modules/@goauthentik/api": {
 | 
				
			||||||
            "version": "1629704636.0.0",
 | 
					            "version": "2021.8.1-rc1-1629709535",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-1629704636.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.8.1-rc1-1629709535.tgz",
 | 
				
			||||||
            "integrity": "sha512-rjUjp7Gbf/Tzw0hGPx2ig5InXa4bPqj4FkFnIEgR6T1w6jbHV+q2BghztVFDc2hK2ib2NnQUQp6LWIAcYLAdSw=="
 | 
					            "integrity": "sha512-rlOt63gF3ALGuRIn8RiWRT5cZ4JhKu9koCtdFA7FDOYYU9jWBJ3e/YlFLLOLQrL8Cyl2g553We98t0n8AyDOBQ=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "node_modules/@humanwhocodes/config-array": {
 | 
					        "node_modules/@humanwhocodes/config-array": {
 | 
				
			||||||
            "version": "0.5.0",
 | 
					            "version": "0.5.0",
 | 
				
			||||||
@ -9567,9 +9567,9 @@
 | 
				
			|||||||
            "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg=="
 | 
					            "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "@goauthentik/api": {
 | 
					        "@goauthentik/api": {
 | 
				
			||||||
            "version": "1629704636.0.0",
 | 
					            "version": "2021.8.1-rc1-1629709535",
 | 
				
			||||||
            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-1629704636.0.0.tgz",
 | 
					            "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.8.1-rc1-1629709535.tgz",
 | 
				
			||||||
            "integrity": "sha512-rjUjp7Gbf/Tzw0hGPx2ig5InXa4bPqj4FkFnIEgR6T1w6jbHV+q2BghztVFDc2hK2ib2NnQUQp6LWIAcYLAdSw=="
 | 
					            "integrity": "sha512-rlOt63gF3ALGuRIn8RiWRT5cZ4JhKu9koCtdFA7FDOYYU9jWBJ3e/YlFLLOLQrL8Cyl2g553We98t0n8AyDOBQ=="
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "@humanwhocodes/config-array": {
 | 
					        "@humanwhocodes/config-array": {
 | 
				
			||||||
            "version": "0.5.0",
 | 
					            "version": "0.5.0",
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@
 | 
				
			|||||||
        "@babel/preset-env": "^7.15.0",
 | 
					        "@babel/preset-env": "^7.15.0",
 | 
				
			||||||
        "@babel/preset-typescript": "^7.15.0",
 | 
					        "@babel/preset-typescript": "^7.15.0",
 | 
				
			||||||
        "@fortawesome/fontawesome-free": "^5.15.4",
 | 
					        "@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/cli": "^3.10.2",
 | 
				
			||||||
        "@lingui/core": "^3.10.4",
 | 
					        "@lingui/core": "^3.10.4",
 | 
				
			||||||
        "@lingui/macro": "^3.10.2",
 | 
					        "@lingui/macro": "^3.10.2",
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ import cssimport from "rollup-plugin-cssimport";
 | 
				
			|||||||
import copy from "rollup-plugin-copy";
 | 
					import copy from "rollup-plugin-copy";
 | 
				
			||||||
import babel from "@rollup/plugin-babel";
 | 
					import babel from "@rollup/plugin-babel";
 | 
				
			||||||
import replace from "@rollup/plugin-replace";
 | 
					import replace from "@rollup/plugin-replace";
 | 
				
			||||||
import * as authentik from "@goauthentik/api";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const extensions = [".js", ".jsx", ".ts", ".tsx"];
 | 
					const extensions = [".js", ".jsx", ".ts", ".tsx"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -47,6 +46,9 @@ const resources = [
 | 
				
			|||||||
const isProdBuild = process.env.NODE_ENV === "production";
 | 
					const isProdBuild = process.env.NODE_ENV === "production";
 | 
				
			||||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 | 
					// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 | 
				
			||||||
function manualChunks(id) {
 | 
					function manualChunks(id) {
 | 
				
			||||||
 | 
					    if (id.includes("@goauthentik/api")) {
 | 
				
			||||||
 | 
					        return "api";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (id.includes("locales")) {
 | 
					    if (id.includes("locales")) {
 | 
				
			||||||
        const parts = id.split("/");
 | 
					        const parts = id.split("/");
 | 
				
			||||||
        const file = parts[parts.length - 1];
 | 
					        const file = parts[parts.length - 1];
 | 
				
			||||||
@ -100,11 +102,7 @@ export default [
 | 
				
			|||||||
        plugins: [
 | 
					        plugins: [
 | 
				
			||||||
            cssimport(),
 | 
					            cssimport(),
 | 
				
			||||||
            resolve({ extensions, browser: true }),
 | 
					            resolve({ extensions, browser: true }),
 | 
				
			||||||
            // Because the API Client uses star exports from typescript, we have to explicitly tell rollup
 | 
					            commonjs(),
 | 
				
			||||||
            // Which classes can be imported
 | 
					 | 
				
			||||||
            commonjs({
 | 
					 | 
				
			||||||
                namedExports: { "@goauthentik/api": Object.keys(authentik) },
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            babel({
 | 
					            babel({
 | 
				
			||||||
                extensions,
 | 
					                extensions,
 | 
				
			||||||
                babelHelpers: "runtime",
 | 
					                babelHelpers: "runtime",
 | 
				
			||||||
@ -136,11 +134,7 @@ export default [
 | 
				
			|||||||
        plugins: [
 | 
					        plugins: [
 | 
				
			||||||
            cssimport(),
 | 
					            cssimport(),
 | 
				
			||||||
            resolve({ extensions, browser: true }),
 | 
					            resolve({ extensions, browser: true }),
 | 
				
			||||||
            // Because the API Client uses star exports from typescript, we have to explicitly tell rollup
 | 
					            commonjs(),
 | 
				
			||||||
            // Which classes can be imported
 | 
					 | 
				
			||||||
            commonjs({
 | 
					 | 
				
			||||||
                namedExports: { "@goauthentik/api": Object.keys(authentik) },
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            babel({
 | 
					            babel({
 | 
				
			||||||
                extensions,
 | 
					                extensions,
 | 
				
			||||||
                babelHelpers: "runtime",
 | 
					                babelHelpers: "runtime",
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user