diff --git a/package-lock.json b/package-lock.json index bd37b40..d4b12e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "typedoc": "^0.25.12", "typedoc-plugin-markdown": "^3.17.1", "typedoc-plugin-missing-exports": "^2.2.0", + "unplugin-replace": "^0.2.1", "vite": "^5.1.6", "vite-bundle-visualizer": "^1.1.0", "vite-plugin-dts": "^3.7.3", @@ -6195,6 +6196,35 @@ "node": ">= 4.0.0" } }, + "node_modules/unplugin": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz", + "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.6.0", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin-replace": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/unplugin-replace/-/unplugin-replace-0.2.1.tgz", + "integrity": "sha512-IetZdFIaYp8Eml7UYOBC1yAqW5Ti2pRUYpm5IpZ5n5XsdLExaJP5DTFA8Ax425FRrn8vT7G8LvfIBkFwrmYU2g==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "magic-string": "^0.30.8", + "unplugin": "^1.8.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -6488,6 +6518,21 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, "node_modules/whatwg-fetch": { "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", diff --git a/package.json b/package.json index 71109c5..e39ce79 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "typedoc": "^0.25.12", "typedoc-plugin-markdown": "^3.17.1", "typedoc-plugin-missing-exports": "^2.2.0", + "unplugin-replace": "^0.2.1", "vite": "^5.1.6", "vite-bundle-visualizer": "^1.1.0", "vite-plugin-dts": "^3.7.3", diff --git a/src/cdn/cdn-client.ts b/src/cdn/cdn-client.ts index 1574853..52f56fe 100644 --- a/src/cdn/cdn-client.ts +++ b/src/cdn/cdn-client.ts @@ -16,6 +16,8 @@ export class CdnClient { protected context: Context; + public static version = '__CLIENT_VERSION__'; + protected constructor(options: CdnClientOptions) { const metafileContext: MetafileContext = new MetafileContext(options); const client: FetchHttpAdapter = new FetchHttpAdapter(metafileContext.params.baseUrl); diff --git a/vite.config.ts b/vite.config.ts index 7a3bfa2..2d601e2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'vite'; import { resolve } from 'node:path'; import dts from 'vite-plugin-dts'; // Generate index.d.ts file import terser from '@rollup/plugin-terser'; // Minify output +import Replace from 'unplugin-replace/vite'; // Replace variables in files import pkg from './package.json'; const banner: string = `/* ${pkg.name}@${pkg.version} @@ -24,42 +25,29 @@ export default defineConfig({ sourcemap: true, rollupOptions: { output: [ + // Node ES Module { format: 'esm', entryFileNames: 'localazy-cdn-client.js', banner, }, - { - format: 'esm', - entryFileNames: 'localazy-cdn-client.min.js', - banner, - plugins: [ - terser(), - ], - }, + // Node CommonJS { format: 'cjs', dir: 'dist/node', entryFileNames: 'localazy-cdn-client.cjs', banner, }, + // Browser ES Module { - format: 'cjs', - dir: 'dist/node', - entryFileNames: 'localazy-cdn-client.min.cjs', + format: 'esm', + entryFileNames: 'localazy-cdn-client.min.js', banner, plugins: [ terser(), ], }, - { - format: 'umd', - dir: 'dist/browser', - entryFileNames: 'localazy-cdn-client.umd.js', - banner, - name: 'LocalazyCDN', - esModule: false, - }, + // Browser UMD + JS CDNs { format: 'umd', dir: 'dist/browser', @@ -81,5 +69,12 @@ export default defineConfig({ plugins: [ dts({ rollupTypes: true }), + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + Replace({ + values: { + __CLIENT_VERSION__: pkg.version, + }, + }), ], });