diff --git a/package-lock.json b/package-lock.json index 293fa87..a1b48e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "oc-client-browser", - "version": "1.7.0", + "version": "1.9.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "oc-client-browser", - "version": "1.7.0", + "version": "1.9.5", "license": "MIT", "dependencies": { + "esbuild": "^0.25.0", "uglify-js": "3.14.2", "universalify": "2.0.0" }, @@ -144,6 +145,406 @@ "node": ">=4" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", @@ -1605,6 +2006,46 @@ "es6-promise": "^4.0.3" } }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5947,6 +6388,156 @@ } } }, + "@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "optional": true + }, "@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", @@ -7064,6 +7655,38 @@ "es6-promise": "^4.0.3" } }, + "esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "requires": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", diff --git a/package.json b/package.json index 4286bac..ba1061a 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,8 @@ "typescript": "4.4.4" }, "dependencies": { + "esbuild": "^0.25.0", "uglify-js": "3.14.2", "universalify": "2.0.0" } -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..a43164b --- /dev/null +++ b/src/index.js @@ -0,0 +1,8 @@ +import { createOc } from './oc-client'; +import { LJS } from './loader'; + +let oc = window.oc || {}; +let ljs = new LJS(); +window.ljs = ljs; + +window.oc = createOc(oc); diff --git a/src/loader.js b/src/loader.js new file mode 100644 index 0000000..5dcb3ee --- /dev/null +++ b/src/loader.js @@ -0,0 +1,72 @@ +// @ts-check + +export class LJS { + loaded = new Set(); + errors = new Set(); + + parse(url) { + let [path, hash] = url.split('#'); + let isModule = path.startsWith('module:'); + let src = path.replace(/^module:/, ''); + let [fallback, id] = (hash?.split('=') || []).reduce( + (a, p) => (p.startsWith('=') ? [p.slice(1), a[1]] : [a[0], p]), + [] + ); + return { src, isModule, fallback, id }; + } + + async load(...args) { + for (const arg of args) { + Array.isArray(arg) + ? await Promise.all(arg.map(a => this._load(a))) + : typeof arg === 'function' + ? await arg() + : await this._load(arg); + } + return this; + } + + async _load(url) { + if (this.loaded.has(url)) return; + + try { + url.endsWith('.css') ? await this.css(url) : await this.js(url); + this.loaded.add(url); + } catch (err) { + this.errors.forEach(fn => fn(url)); + throw err; + } + } + + js(url) { + let { src, isModule, fallback } = this.parse(url); + return new Promise((resolve, reject) => { + let script = document.createElement('script'); + script.type = isModule ? 'module' : 'text/javascript'; + script.src = src; + + script.onload = resolve; + script.onerror = () => + fallback ? this._load(fallback).then(resolve).catch(reject) : reject(); + + document.head.append(script); + }); + } + + css(url) { + let { src } = this.parse(url); + return new Promise((resolve, reject) => { + let link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = src; + link.onload = resolve; + link.onerror = reject; + document.head.append(link); + }); + } + + onError(fn) { + this.errors.add(fn); + return this; + } +} diff --git a/src/oc-client.js b/src/oc-client.js index 7567202..60baeb4 100644 --- a/src/oc-client.js +++ b/src/oc-client.js @@ -1,72 +1,46 @@ -/* globals define, exports, require, globalThis, __REGISTERED_TEMPLATES_PLACEHOLDER__, __DEFAULT_RETRY_INTERVAL__, __DEFAULT_RETRY_LIMIT__, __DEFAULT_DISABLE_LOADER__, __DISABLE_LEGACY_TEMPLATES__, __EXTERNALS__ */ -/* eslint no-var: 'off' */ +/* globals __REGISTERED_TEMPLATES_PLACEHOLDER__, __DEFAULT_RETRY_INTERVAL__, __DEFAULT_RETRY_LIMIT__, __DEFAULT_DISABLE_LOADER__, __DISABLE_LEGACY_TEMPLATES__, __EXTERNALS__ */ /* eslint prefer-arrow-callback: 'off' */ +import { LJS } from './loader'; -var oc = oc || {}; - -(function (root, factory) { - 'use strict'; - if (typeof define == 'function' && define.amd) { - // AMD. Register as an anonymous module - define(['exports', 'jquery'], function (exports, $) { - $.extend(exports, root.oc); - factory((root.oc = exports), $, root.ljs, root.document, root.window); - }); - } else if ( - typeof exports == 'object' && - typeof exports.nodeName != 'string' - ) { - // Common JS - factory(exports, require('jquery'), root.ljs, root.document, root.window); - } else { - // Browser globals - factory((root.oc = oc), root.$, root.ljs, root.document, root.window); - } -})(this || globalThis, function (exports, _$, ljs, $document, $window) { - 'use strict'; - // jshint ignore:line - // public variables - oc.conf = oc.conf || {}; - oc.cmd = oc.cmd || []; - oc.renderedComponents = oc.renderedComponents || {}; - +export function createOc(oc) { // If oc client is already inside the page, we do nothing. if (oc.status) { return oc; } oc.status = 'loading'; + oc.conf = oc.conf || {}; + oc.cmd = oc.cmd || []; + oc.renderedComponents = oc.renderedComponents || {}; + let ljs = new LJS(); - var isRequired = function (name, value) { + let isRequired = (name, value) => { if (!value) { throw name + ' parameter is required'; } }; // The code - var $, - noop = function () {}, + let $, + $document = document, + $window = window, + noop = () => {}, initialised = false, initialising = false, retries = {}, - isBool = function (a) { - return typeof a == 'boolean'; - }, + isBool = a => typeof a == 'boolean', timeout = setTimeout, ocCmd = oc.cmd, ocConf = oc.conf, renderedComponents = oc.renderedComponents, dataRenderedAttribute = 'data-rendered', dataRenderingAttribute = 'data-rendering', - logError = function (msg) { - console.log(msg); - }, - logInfo = function (msg) { - ocConf.debug && console.log(msg); - }; + logError = msg => console.log(msg), + logInfo = msg => ocConf.debug && console.log(msg); // constants - var RETRY_INTERVAL = ocConf.retryInterval || __DEFAULT_RETRY_INTERVAL__, - RETRY_LIMIT = ocConf.retryLimit || __DEFAULT_RETRY_LIMIT__, + let RETRY_INTERVAL = + ocConf.retryInterval || Number(__DEFAULT_RETRY_INTERVAL__), + RETRY_LIMIT = ocConf.retryLimit || Number(__DEFAULT_RETRY_LIMIT__), DISABLE_LOADER = isBool(ocConf.disableLoader) ? ocConf.disableLoader : __DEFAULT_DISABLE_LOADER__, @@ -89,29 +63,27 @@ var oc = oc || {}; MESSAGES_RENDERED = "Component '%' correctly rendered", MESSAGES_RETRIEVING = 'Unrendered component found. Trying to retrieve it...', - interpolate = function (str, value) { - return str.replace('%', value); - }; + interpolate = (str, value) => str.replace('%', value); - var registeredTemplates = __REGISTERED_TEMPLATES_PLACEHOLDER__, + let registeredTemplates = __REGISTERED_TEMPLATES_PLACEHOLDER__, externals = __EXTERNALS__; - function registerTemplates(templates, overwrite) { + let registerTemplates = (templates, overwrite) => { templates = Array.isArray(templates) ? templates : [templates]; - templates.map(function (template) { + templates.map(template => { if (overwrite || !registeredTemplates[template.type]) { registeredTemplates[template.type] = { externals: template.externals }; } }); - } + }; if (ocConf.templates) { registerTemplates(ocConf.templates, true); } - var retry = function (component, cb, failedRetryCb) { + let retry = (component, cb, failedRetryCb) => { if (retries[component] == undefined) { retries[component] = RETRY_LIMIT; } @@ -119,41 +91,41 @@ var oc = oc || {}; if (retries[component] <= 0) { failedRetryCb(); } else { - timeout(function () { + timeout(() => { cb(RETRY_LIMIT - retries[component] + 1); }, RETRY_INTERVAL); retries[component]--; } }; - var addParametersToHref = function (href, parameters) { + let addParametersToHref = (href, parameters) => { return href + (~href.indexOf('?') ? '&' : '?') + $.param(parameters); }; - var getHeaders = function () { - var globalHeaders = ocConf.globalHeaders; + let getHeaders = () => { + let globalHeaders = ocConf.globalHeaders; return $.extend( { Accept: 'application/vnd.oc.unrendered+json' }, typeof globalHeaders == 'function' ? globalHeaders() : globalHeaders ); }; - oc.addStylesToHead = function (styles) { + oc.addStylesToHead = styles => { $('').appendTo($document.head); }; - function loadAfterReady() { + let loadAfterReady = () => { oc.ready(oc.renderUnloadedComponents); - } + }; - oc.registerTemplates = function (templates) { + oc.registerTemplates = templates => { registerTemplates(templates); loadAfterReady(); return registeredTemplates; }; // A minimal require.js-ish that uses l.js - oc.require = function (nameSpace, url, callback) { + oc.require = (nameSpace, url, callback) => { if (!callback) { callback = url; url = nameSpace; @@ -164,14 +136,14 @@ var oc = oc || {}; nameSpace = [nameSpace]; } - var getObj = function () { - var base = $window; + let getObj = () => { + let base = $window; if (nameSpace == undefined) { return undefined; } - for (var i in nameSpace) { + for (let i in nameSpace) { base = base[nameSpace[i]]; if (!base) { return undefined; @@ -181,7 +153,7 @@ var oc = oc || {}; return base; }; - var cbGetObj = function () { + let cbGetObj = () => { callback(getObj()); }; @@ -192,7 +164,7 @@ var oc = oc || {}; } }; - var asyncRequireForEach = function (toLoad, loaded, callback) { + let asyncRequireForEach = (toLoad, loaded, callback) => { if (!callback) { callback = loaded; loaded = []; @@ -201,8 +173,8 @@ var oc = oc || {}; if (!toLoad.length) { callback(loaded); } else { - var loading = toLoad[0]; - oc.require(loading.global, loading.url, function (resolved) { + let loading = toLoad[0]; + oc.require(loading.global, loading.url, resolved => { asyncRequireForEach(toLoad.slice(1), loaded.concat(resolved), callback); }); } @@ -210,8 +182,8 @@ var oc = oc || {}; oc.requireSeries = asyncRequireForEach; - var processHtml = function ($component, data, callback) { - var attr = $component.attr.bind($component), + let processHtml = ($component, data, callback) => { + let attr = $component.attr.bind($component), dataName = data.name, dataVersion = data.version; attr('id', data.id); @@ -239,17 +211,17 @@ var oc = oc || {}; callback(); }; - function getData(options, cb) { + let getData = (options, cb) => { cb = cb || noop; - var version = options.version, + let version = options.version, baseUrl = options.baseUrl, name = options.name, json = options.json; isRequired('version', version); isRequired('baseUrl', baseUrl); isRequired('name', name); - var jsonRequest = isBool(json) ? json : JSON_REQUESTS; - var data = { + let jsonRequest = isBool(json) ? json : JSON_REQUESTS; + let data = { components: [ { action: options.action, @@ -259,16 +231,16 @@ var oc = oc || {}; } ] }; - var headers = getHeaders(); - var ajaxOptions = { + let headers = getHeaders(); + let ajaxOptions = { method: 'POST', url: baseUrl, data: jsonRequest ? JSON.stringify(data) : data, headers: headers, crossDomain: true, - success: function (apiResponse) { - var response = apiResponse[0].response; - var err = response.error ? response.details || response.error : null; + success: apiResponse => { + let response = apiResponse[0].response; + let err = response.error ? response.details || response.error : null; cb(err, response.data, apiResponse[0]); }, error: cb @@ -278,11 +250,11 @@ var oc = oc || {}; } $.ajax(ajaxOptions); - } + }; oc.getData = getData; - oc.getAction = function (options) { - return new Promise(function (resolve, reject) { - var name = options.component; + oc.getAction = options => { + return new Promise((resolve, reject) => { + let name = options.component; getData( $.extend( { @@ -293,12 +265,12 @@ var oc = oc || {}; options ), - function (err, data) { + (err, data) => { if (err) { reject(err); } else { if (data.component) { - var props = data.component.props; + let props = data.component.props; delete props._staticPath; delete props._baseUrl; delete props._componentName; @@ -314,24 +286,24 @@ var oc = oc || {}; }); }; - oc.build = function (options) { + oc.build = options => { isRequired('baseUrl', options.baseUrl); isRequired('name', options.name); - var withFinalSlash = function (s) { + let withFinalSlash = s => { if (!s) return ''; return s.match(/\/$/) ? s : s + '/'; }; - var href = + let href = withFinalSlash(options.baseUrl) + withFinalSlash(options.name) + withFinalSlash(options.version); if (options.parameters) { href += '?'; - $.each(options.parameters, function (key, value) { + $.each(options.parameters, (key, value) => { if (/[+&=]/.test(value)) { value = encodeURIComponent(value); } @@ -344,7 +316,7 @@ var oc = oc || {}; return '<' + OC_TAG + ' href="' + href + '">'; }; - oc.ready = function (callback) { + oc.ready = callback => { if (initialised) { callback(); } else if (initialising) { @@ -352,18 +324,18 @@ var oc = oc || {}; } else { initialising = true; - var done = function () { + let done = () => { initialised = true; initialising = false; - oc.events = (function () { - var obj = $({}); + oc.events = (() => { + let obj = $({}); return { fire: obj.trigger.bind(obj), on: obj.on.bind(obj), off: obj.off.bind(obj), - reset: function () { + reset: () => { obj.off(); } }; @@ -374,19 +346,17 @@ var oc = oc || {}; oc.events.fire('oc:ready', oc); oc.status = 'ready'; - ocCmd.map(function (cmd) { + ocCmd.map(cmd => { cmd(oc); }); oc.cmd = { - push: function (f) { - f(oc); - } + push: f => f(oc) }; }; - oc.requireSeries(externals, function (deps) { - var jQuery = deps[0]; + oc.requireSeries(externals, deps => { + let jQuery = deps[0]; if ($window.jQuery || $window.$) { $ = oc.$ = jQuery; } else { @@ -397,26 +367,26 @@ var oc = oc || {}; } }; - oc.render = function (compiledViewInfo, model, callback) { - oc.ready(function () { + oc.render = (compiledViewInfo, model, callback) => { + oc.ready(() => { // TODO: integrate with oc-empty-response-handler module if (model && model.__oc_emptyResponse == true) { return callback(null, ''); } - var type = compiledViewInfo.type; + let type = compiledViewInfo.type; if (!__DISABLE_LEGACY_TEMPLATES__) { if (type == 'jade' || type == 'handlebars') { type = 'oc-template-' + type; } } - var template = registeredTemplates[type]; + let template = registeredTemplates[type]; if (template) { oc.require( ['oc', 'components', compiledViewInfo.key], compiledViewInfo.src, - function (compiledView) { + compiledView => { if (!compiledView) { callback( interpolate( @@ -425,7 +395,7 @@ var oc = oc || {}; ) ); } else { - asyncRequireForEach(template.externals, function () { + asyncRequireForEach(template.externals, () => { try { callback( null, @@ -452,9 +422,9 @@ var oc = oc || {}; }); }; - oc.renderNestedComponent = function (component, callback) { - oc.ready(function () { - var $component = $(component), + oc.renderNestedComponent = (component, callback) => { + oc.ready(() => { + let $component = $(component), attr = $component.attr.bind($component), dataRendering = attr(dataRenderingAttribute), dataRendered = attr(dataRenderedAttribute), @@ -472,7 +442,7 @@ var oc = oc || {}; oc.renderByHref( { href: attr('href'), id: attr('id'), element: $component[0] }, - function (err, data) { + (err, data) => { if (err || !data) { attr(dataRenderingAttribute, false); attr(dataRenderedAttribute, false); @@ -496,15 +466,15 @@ var oc = oc || {}; }); }; - oc.renderByHref = function (hrefOrOptions, retryNumberOrCallback, callback) { + oc.renderByHref = (hrefOrOptions, retryNumberOrCallback, callback) => { callback = callback || retryNumberOrCallback; - var ocId = Math.floor(Math.random() * 9999999999), + let ocId = Math.floor(Math.random() * 9999999999), retryNumber = hrefOrOptions.retryNumber || +retryNumberOrCallback || 0, href = hrefOrOptions.href || hrefOrOptions, id = hrefOrOptions.id || ocId, element = hrefOrOptions.element; - oc.ready(function () { + oc.ready(() => { if (!href) { callback(MESSAGES_ERRORS_RENDERING + MESSAGES_ERRORS_HREF_MISSING); } else { @@ -520,11 +490,11 @@ var oc = oc || {}; headers: getHeaders(), contentType: 'text/plain', crossDomain: true, - success: function (apiResponse) { - var template = apiResponse.template; + success: apiResponse => { + let template = apiResponse.template; apiResponse.data.id = ocId; apiResponse.data.element = element; - oc.render(template, apiResponse.data, function (err, html) { + oc.render(template, apiResponse.data, (err, html) => { if (err) { callback( interpolate(MESSAGES_ERRORS_RENDERING, apiResponse.href) + err @@ -543,14 +513,14 @@ var oc = oc || {}; } }); }, - error: function (err) { + error: err => { if (err && err.status == 429) { retries[href] = 0; } logError(MESSAGES_ERRORS_RETRIEVING); retry( href, - function (requestNumber) { + requestNumber => { oc.renderByHref( { href: href, @@ -561,7 +531,7 @@ var oc = oc || {}; callback ); }, - function () { + () => { callback(interpolate(MESSAGES_ERRORS_RETRY_FAILED, href)); } ); @@ -571,14 +541,14 @@ var oc = oc || {}; }); }; - oc.renderUnloadedComponents = function () { - oc.ready(function () { - var $unloadedComponents = $( + oc.renderUnloadedComponents = () => { + oc.ready(() => { + let $unloadedComponents = $( OC_TAG + '[data-rendered!=true][data-failed!=true]' ); - $unloadedComponents.map(function (idx, unloadedComponent) { - oc.renderNestedComponent(unloadedComponent, function () { + $unloadedComponents.map((idx, unloadedComponent) => { + oc.renderNestedComponent(unloadedComponent, () => { if (idx == $unloadedComponents.length - 1) { oc.renderUnloadedComponents(); } @@ -587,14 +557,14 @@ var oc = oc || {}; }); }; - oc.load = function (placeholder, href, callback) { - oc.ready(function () { + oc.load = (placeholder, href, callback) => { + oc.ready(() => { callback = callback || noop; if (placeholder) { $(placeholder).html('<' + OC_TAG + ' href="' + href + '" />'); - var newComponent = $(OC_TAG, placeholder); - oc.renderNestedComponent(newComponent, function () { + let newComponent = $(OC_TAG, placeholder); + oc.renderNestedComponent(newComponent, () => { callback(newComponent); }); } @@ -603,6 +573,5 @@ var oc = oc || {}; // render the components loadAfterReady(); - // expose public variables and methods - exports = oc; -}); + return oc; +} diff --git a/tasks/compile.js b/tasks/compile.js index d699ee6..b7485de 100644 --- a/tasks/compile.js +++ b/tasks/compile.js @@ -1,11 +1,7 @@ -'use strict'; - -const fs = require('fs'); -const { promisify } = require('util'); const path = require('path'); +const esbuild = require('esbuild'); const uglifyJs = require('uglify-js'); -const readFile = promisify(fs.readFile); const packageJson = require('../package'); const baseTemplates = { @@ -53,7 +49,7 @@ function parseConf(conf) { global: 'jQuery', url: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js' }; - const disableLegacyTemplates = Boolean(conf.disableLegacyTemplates ?? false); + const disableLegacyTemplates = true; //Boolean(conf.disableLegacyTemplates ?? false); const transformedTemplates = transformTemplates(conf.templates); const templates = disableLegacyTemplates ? { @@ -72,68 +68,59 @@ function parseConf(conf) { }; } -function getFiles({ sync = false, conf }) { - const srcPath = '../src/'; - const vendorPath = '../vendor/'; - - const lPath = path.join(__dirname, vendorPath, 'l.js'); - const ocClientPath = path.join(__dirname, srcPath, 'oc-client.js'); - const replaceGlobals = x => - x - .replaceAll( - '__REGISTERED_TEMPLATES_PLACEHOLDER__', - JSON.stringify(conf.templates) - ) - .replaceAll('__EXTERNALS__', JSON.stringify(conf.externals)) - .replaceAll('__DEFAULT_RETRY_LIMIT__', conf.retryLimit) - .replaceAll('__DEFAULT_RETRY_INTERVAL__', conf.retryInterval) - .replaceAll('__DEFAULT_DISABLE_LOADER__', conf.disableLoader) - .replaceAll('__DISABLE_LEGACY_TEMPLATES__', conf.disableLegacyTemplates); - - if (sync) { - const l = fs.readFileSync(lPath, 'utf-8'); - const ocClient = replaceGlobals(fs.readFileSync(ocClientPath, 'utf-8')); - - return [l, ocClient]; - } else { - const lPromise = readFile(lPath, 'utf-8'); - const ocClientPromise = readFile(ocClientPath, 'utf-8').then( - replaceGlobals - ); - - return Promise.all([lPromise, ocClientPromise]); - } -} - -function compileFiles(l, ocClient) { +function getBuildOptions(conf = {}) { const version = packageJson.version; const licenseLink = 'https://github.com/opencomponents/oc-client-browser/tree/master/LICENSES'; const license = `/*! OpenComponents client v${version} | (c) 2015-${new Date().getFullYear()} OpenComponents community | ${licenseLink} */`; - const bundle = `${license}\n${l}\n;\n${ocClient}\n;\noc.clientVersion='${version}';`; + const parsedConf = parseConf(conf); - const compressed = uglifyJs.minify(bundle, { + return { + entryPoints: [path.join(__dirname, '../src/index.js')], + banner: { + js: license + }, + outfile: path.join(__dirname, '../dist/oc-client.min.js'), + define: { + __REGISTERED_TEMPLATES_PLACEHOLDER__: JSON.stringify( + parsedConf.templates + ), + __EXTERNALS__: JSON.stringify(parsedConf.externals), + __DEFAULT_RETRY_LIMIT__: JSON.stringify(parsedConf.retryLimit), + __DEFAULT_RETRY_INTERVAL__: JSON.stringify(parsedConf.retryInterval), + __DEFAULT_DISABLE_LOADER__: JSON.stringify(parsedConf.disableLoader), + __DISABLE_LEGACY_TEMPLATES__: JSON.stringify( + parsedConf.disableLegacyTemplates + ) + }, + bundle: true, + minify: false, + write: false + }; +} + +function prepareCompiled(text) { + const minified = uglifyJs.minify(text, { sourceMap: { filename: 'oc-client.min.js', url: 'oc-client.min.map' } }); - const compressedCode = `${license}\n${compressed.code}`; - - return { code: compressedCode, map: compressed.map, dev: bundle }; + return { + code: minified.code, + map: minified.map, + dev: text + }; } - -async function compile(conf = {}) { - const parsedConf = parseConf(conf); - const [l, ocClient] = await getFiles({ sync: false, conf: parsedConf }); - return compileFiles(l, ocClient); +function compileSync(conf = {}) { + const result = esbuild.buildSync(getBuildOptions(conf)); + return prepareCompiled(result.outputFiles[0].text); } -function compileSync(conf = {}) { - const parsedConf = parseConf(conf); - const [l, ocClient] = getFiles({ sync: true, conf: parsedConf }); - return compileFiles(l, ocClient); +async function compile(conf = {}) { + const result = await esbuild.build(getBuildOptions(conf)); + return prepareCompiled(result.outputFiles[0].text); } module.exports = {