diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generate-idb-version.js b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generate-idb-version.js new file mode 100644 index 0000000..5de7a4e --- /dev/null +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generate-idb-version.js @@ -0,0 +1,15 @@ +const fs = require('fs'); +const path = require('path'); + +const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')); +const idbVersion = packageJson.dependencies.idb; + +const outputDir = path.join(__dirname, 'generated'); +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +const content = `// AUTO-GENERATED from package.json - DO NOT EDIT\nexport const IDB_VERSION = "${idbVersion}";\n`; + +fs.writeFileSync(path.join(outputDir, 'idb-version.ts'), content); +console.log(`Generated idb-version.ts with version ${idbVersion}`); diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generated/idb-version.ts b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generated/idb-version.ts new file mode 100644 index 0000000..a1e7284 --- /dev/null +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/generated/idb-version.ts @@ -0,0 +1,2 @@ +// AUTO-GENERATED from package.json - DO NOT EDIT +export const IDB_VERSION = "8.0.3"; diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/idb-loader.ts b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/idb-loader.ts index 014eec4..2d73ee9 100644 --- a/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/idb-loader.ts +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/Scripts/idb-loader.ts @@ -1,3 +1,5 @@ +import { IDB_VERSION } from './generated/idb-version'; + let idbModule: any = null; let isLoading = false; let loadPromise: Promise | null = null; @@ -32,18 +34,20 @@ async function ensureIdbLoaded() { async function loadIdbWithFallback() { try { - // Try online CDN first for latest version + // Try online CDN first // @ts-ignore - Dynamic import from CDN - const onlineModule = await import('https://cdn.skypack.dev/idb'); + const onlineModule = await import(`https://cdn.jsdelivr.net/npm/idb@${IDB_VERSION}/+esm`); console.log('Loaded idb from online CDN'); return onlineModule; } catch (onlineError) { console.warn('Failed to load idb from CDN, falling back to bundled version:', onlineError); - + try { // Fallback to bundled version (will be available as static asset) - // In Blazor, this would be loaded via JS interop or as a module - const bundledModule = await import('../wwwroot/lib/index.js'); + // Use import.meta.url so the path resolves correctly at runtime regardless of + // deployment location (e.g., /_content/BlazorEssentials.IndexedDb/lib/index.js) + const libUrl = new URL('./lib/index.js', import.meta.url).href; + const bundledModule = await import(libUrl); console.log('Loaded idb from bundled version'); return bundledModule; } catch (localError) { diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/package.json b/src/CloudNimble.BlazorEssentials.IndexedDb/package.json index e39b8da..8ed185c 100644 --- a/src/CloudNimble.BlazorEssentials.IndexedDb/package.json +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/package.json @@ -7,9 +7,10 @@ "author": "CloudNimble, Inc.", "license": "ISC", "scripts": { + "prebuild": "node Scripts/generate-idb-version.js", "build": "tsc", "watch": "tsc --watch", - "clean": "rimraf wwwroot/*.js wwwroot/*.js.map" + "clean": "rimraf wwwroot/*.js wwwroot/*.js.map Scripts/generated" }, "devDependencies": { "@microsoft/dotnet-js-interop": "10.0.0", diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js new file mode 100644 index 0000000..18e6cd0 --- /dev/null +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js @@ -0,0 +1,3 @@ +// AUTO-GENERATED from package.json - DO NOT EDIT +export const IDB_VERSION = "8.0.3"; +//# sourceMappingURL=idb-version.js.map \ No newline at end of file diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js.map b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js.map new file mode 100644 index 0000000..d80f377 --- /dev/null +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/generated/idb-version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"idb-version.js","sourceRoot":"","sources":["../../Scripts/generated/idb-version.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"} \ No newline at end of file diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js index 05ff7f6..fe80a7f 100644 --- a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js @@ -1,3 +1,4 @@ +import { IDB_VERSION } from './generated/idb-version'; let idbModule = null; let isLoading = false; let loadPromise = null; @@ -28,9 +29,9 @@ async function ensureIdbLoaded() { } async function loadIdbWithFallback() { try { - // Try online CDN first for latest version + // Try online CDN first // @ts-ignore - Dynamic import from CDN - const onlineModule = await import('https://cdn.skypack.dev/idb'); + const onlineModule = await import(`https://cdn.jsdelivr.net/npm/idb@${IDB_VERSION}/+esm`); console.log('Loaded idb from online CDN'); return onlineModule; } @@ -38,8 +39,10 @@ async function loadIdbWithFallback() { console.warn('Failed to load idb from CDN, falling back to bundled version:', onlineError); try { // Fallback to bundled version (will be available as static asset) - // In Blazor, this would be loaded via JS interop or as a module - const bundledModule = await import('../wwwroot/lib/index.js'); + // Use import.meta.url so the path resolves correctly at runtime regardless of + // deployment location (e.g., /_content/BlazorEssentials.IndexedDb/lib/index.js) + const libUrl = new URL('./lib/index.js', import.meta.url).href; + const bundledModule = await import(libUrl); console.log('Loaded idb from bundled version'); return bundledModule; } diff --git a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js.map b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js.map index 66ee931..3890685 100644 --- a/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js.map +++ b/src/CloudNimble.BlazorEssentials.IndexedDb/wwwroot/idb-loader.js.map @@ -1 +1 @@ -{"version":3,"file":"idb-loader.js","sourceRoot":"","sources":["../Scripts/idb-loader.ts"],"names":[],"mappings":"AAAA,IAAI,SAAS,GAAQ,IAAI,CAAC;AAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,IAAI,WAAW,GAAwB,IAAI,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,MAAM,eAAe,EAAE,CAAC;IACxB,OAAO,SAAS,CAAC,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,eAAe,EAAE,CAAC;IACxB,OAAO,SAAS,CAAC,QAAQ,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,eAAe;IAC1B,IAAI,SAAS;QAAE,OAAO;IACtB,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC;QAClB,OAAO;IACX,CAAC;IAED,SAAS,GAAG,IAAI,CAAC;IACjB,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAEpC,IAAI,CAAC;QACD,SAAS,GAAG,MAAM,WAAW,CAAC;IAClC,CAAC;YAAS,CAAC;QACP,SAAS,GAAG,KAAK,CAAC;QAClB,WAAW,GAAG,IAAI,CAAC;IACvB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB;IAC9B,IAAI,CAAC;QACD,0CAA0C;QAC1C,uCAAuC;QACvC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC;IACxB,CAAC;IAAC,OAAO,WAAW,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,+DAA+D,EAAE,WAAW,CAAC,CAAC;QAE3F,IAAI,CAAC;YACD,kEAAkE;YAClE,gEAAgE;YAChE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,aAAa,CAAC;QACzB,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;AACL,CAAC"} \ No newline at end of file +{"version":3,"file":"idb-loader.js","sourceRoot":"","sources":["../Scripts/idb-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,IAAI,SAAS,GAAQ,IAAI,CAAC;AAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,IAAI,WAAW,GAAwB,IAAI,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,MAAM,eAAe,EAAE,CAAC;IACxB,OAAO,SAAS,CAAC,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,eAAe,EAAE,CAAC;IACxB,OAAO,SAAS,CAAC,QAAQ,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,eAAe;IAC1B,IAAI,SAAS;QAAE,OAAO;IACtB,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC;QAClB,OAAO;IACX,CAAC;IAED,SAAS,GAAG,IAAI,CAAC;IACjB,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAEpC,IAAI,CAAC;QACD,SAAS,GAAG,MAAM,WAAW,CAAC;IAClC,CAAC;YAAS,CAAC;QACP,SAAS,GAAG,KAAK,CAAC;QAClB,WAAW,GAAG,IAAI,CAAC;IACvB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB;IAC9B,IAAI,CAAC;QACD,uBAAuB;QACvB,uCAAuC;QACvC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,oCAAoC,WAAW,OAAO,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC;IACxB,CAAC;IAAC,OAAO,WAAW,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,+DAA+D,EAAE,WAAW,CAAC,CAAC;QAE3F,IAAI,CAAC;YACD,kEAAkE;YAClE,8EAA8E;YAC9E,gFAAgF;YAChF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC/D,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,aAAa,CAAC;QACzB,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;AACL,CAAC"} \ No newline at end of file