diff --git a/crates/pack-core/src/library/chunking_context.rs b/crates/pack-core/src/library/chunking_context.rs index 1f415a7df..36fafe2e8 100644 --- a/crates/pack-core/src/library/chunking_context.rs +++ b/crates/pack-core/src/library/chunking_context.rs @@ -394,16 +394,23 @@ impl LibraryChunkingContext { let chunk_content_hash = self.ecmascript_chunk_content_hash(ecmascript_chunk).await?; let other_chunks = other_chunks.await?; - let content_hash = if other_chunks.is_empty() { - chunk_content_hash.to_string() - } else { - let mut hasher = Xxh3Hash64Hasher::new(); - hasher.write_value(chunk_content_hash.as_str()); - for asset in other_chunks.iter() { - hasher.write_value(asset.path().await?.path.as_str()); - } - encode_hex(hasher.finish()) - }; + // The entry wrapper publishes the library namespace and export path. + // Include its configuration even when there are no other chunks, so + // changed exports cannot reuse a URL that still serves an old wrapper. + // Shared non-entry chunks retain their module-only content hashes. + let mut hasher = Xxh3Hash64Hasher::new(); + hasher.write_value("library-evaluate-v1"); + hasher.write_value(chunk_content_hash.as_str()); + hasher.write_ref(&this.runtime_root); + hasher.write_ref(&this.runtime_export); + hasher.write_value(this.is_node_platform); + hasher.write_value(this.output_root_to_root_path.as_str()); + hasher.write_ref(&this.asset_base_path); + hasher.write_ref(&this.source_maps_type); + for asset in other_chunks.iter() { + hasher.write_value(asset.path().await?.path.as_str()); + } + let content_hash = encode_hex(hasher.finish()); filename = replace_content_hash_placeholder(&filename, &content_hash); }; AssetIdent::from_path(root.join(&filename)?) diff --git a/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.5d80c3de.js b/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.882b3b69.js similarity index 99% rename from crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.5d80c3de.js rename to crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.882b3b69.js index a8ee2a340..8a0616146 100644 --- a/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.5d80c3de.js +++ b/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/entries/server.882b3b69.js @@ -961,7 +961,7 @@ if (typeof exports === 'object' && typeof module === 'object') { for(var i in a) globalThis[i] = a[i]; } })([ -["entries/server.5d80c3de.js", +["entries/server.882b3b69.js", "[project]/basic/multi_server_entries/input/server.ts [server] (ecmascript)", ((__turbopack_context__) => { "use strict"; @@ -972,5 +972,5 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$basic$2f$multi_server_entrie console.log("server runtime", __TURBOPACK__imported__module__$5b$project$5d2f$basic$2f$multi_server_entries$2f$input$2f$shared$2e$ts__$5b$server$5d$__$28$ecmascript$29$__["shared"]); }), ], -["entries/server.5d80c3de.js", {"otherChunks":["chunks/server-shared.fbcd5f75.js","chunks/server-shared-0-1.1b081f62.js"],"runtimeModuleIds":["[project]/basic/multi_server_entries/input/server.ts [server] (ecmascript)"]}], +["entries/server.882b3b69.js", {"otherChunks":["chunks/server-shared.fbcd5f75.js","chunks/server-shared-0-1.1b081f62.js"],"runtimeModuleIds":["[project]/basic/multi_server_entries/input/server.ts [server] (ecmascript)"]}], ]); \ No newline at end of file diff --git a/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/stats.json b/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/stats.json index 81282c96b..fcb114925 100644 --- a/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/stats.json +++ b/crates/pack-tests/tests/snapshot/basic/multi_server_entries/output/server/stats.json @@ -4,14 +4,14 @@ "name": "detail-server", "chunks": [ "chunks/server-shared.fbcd5f75.js", - "entries/detail-server.5d841f26.js" + "entries/detail-server.b1ab83f5.js" ], "assets": [ { "name": "chunks/server-shared.fbcd5f75.js" }, { - "name": "entries/detail-server.5d841f26.js" + "name": "entries/detail-server.b1ab83f5.js" } ] }, @@ -20,7 +20,7 @@ "chunks": [ "chunks/server-shared-0-1.1b081f62.js", "chunks/server-shared.fbcd5f75.js", - "entries/index-server.5c83aa4e.js" + "entries/index-server.f88edfa9.js" ], "assets": [ { @@ -30,7 +30,7 @@ "name": "chunks/server-shared.fbcd5f75.js" }, { - "name": "entries/index-server.5c83aa4e.js" + "name": "entries/index-server.f88edfa9.js" } ] }, @@ -39,7 +39,7 @@ "chunks": [ "chunks/server-shared-0-1.1b081f62.js", "chunks/server-shared.fbcd5f75.js", - "entries/server.5d80c3de.js" + "entries/server.882b3b69.js" ], "assets": [ { @@ -49,7 +49,7 @@ "name": "chunks/server-shared.fbcd5f75.js" }, { - "name": "entries/server.5d80c3de.js" + "name": "entries/server.882b3b69.js" } ] } @@ -84,11 +84,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/detail-server.5d841f26.js", + "id": "entries/detail-server.b1ab83f5.js", "size": 39218, "hash": "", "files": [ - "entries/detail-server.5d841f26.js" + "entries/detail-server.b1ab83f5.js" ] }, { @@ -96,11 +96,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/index-server.5c83aa4e.js", + "id": "entries/index-server.f88edfa9.js", "size": 39230, "hash": "", "files": [ - "entries/index-server.5c83aa4e.js" + "entries/index-server.f88edfa9.js" ] }, { @@ -108,11 +108,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/server.5d80c3de.js", + "id": "entries/server.882b3b69.js", "size": 39197, "hash": "", "files": [ - "entries/server.5d80c3de.js" + "entries/server.882b3b69.js" ] } ], @@ -143,38 +143,38 @@ }, { "type": "asset", - "name": "entries/detail-server.5d841f26.js", + "name": "entries/detail-server.b1ab83f5.js", "info": {}, "size": 39218, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/detail-server.5d841f26.js" + "entries/detail-server.b1ab83f5.js" ] }, { "type": "asset", - "name": "entries/index-server.5c83aa4e.js", + "name": "entries/index-server.f88edfa9.js", "info": {}, "size": 39230, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/index-server.5c83aa4e.js" + "entries/index-server.f88edfa9.js" ] }, { "type": "asset", - "name": "entries/server.5d80c3de.js", + "name": "entries/server.882b3b69.js", "info": {}, "size": 39197, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/server.5d80c3de.js" + "entries/server.882b3b69.js" ] } ], @@ -183,7 +183,7 @@ "name": "basic/multi_server_entries/input/detail.server.ts", "id": "[project]/basic/multi_server_entries/input/detail.server.ts [server] (ecmascript)", "chunks": [ - "entries/detail-server.5d841f26.js" + "entries/detail-server.b1ab83f5.js" ], "size": 536 }, @@ -191,7 +191,7 @@ "name": "basic/multi_server_entries/input/index.server.ts", "id": "[project]/basic/multi_server_entries/input/index.server.ts [server] (ecmascript)", "chunks": [ - "entries/index-server.5c83aa4e.js" + "entries/index-server.f88edfa9.js" ], "size": 514 }, @@ -199,7 +199,7 @@ "name": "basic/multi_server_entries/input/server.ts", "id": "[project]/basic/multi_server_entries/input/server.ts [server] (ecmascript)", "chunks": [ - "entries/server.5d80c3de.js" + "entries/server.882b3b69.js" ], "size": 511 }, diff --git a/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.6de379ea.js b/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.ae483216.js similarity index 99% rename from crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.6de379ea.js rename to crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.ae483216.js index be7740c36..053419c3b 100644 --- a/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.6de379ea.js +++ b/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.ae483216.js @@ -961,7 +961,7 @@ if (typeof exports === 'object' && typeof module === 'object') { for(var i in a) globalThis[i] = a[i]; } })([ -["entries/server.6de379ea.js", +["entries/server.ae483216.js", "[project]/basic/multi_server_entries_sourcemap/input/server.ts [server] (ecmascript)", ((__turbopack_context__) => { "use strict"; @@ -972,8 +972,8 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$basic$2f$multi_server_entrie console.log("server runtime", __TURBOPACK__imported__module__$5b$project$5d2f$basic$2f$multi_server_entries_sourcemap$2f$input$2f$shared$2e$ts__$5b$server$5d$__$28$ecmascript$29$__["shared"]); }), ], -["entries/server.6de379ea.js", {"otherChunks":["chunks/server-shared.c1005744.js","chunks/server-shared-0-1.8d3d3911.js"],"runtimeModuleIds":["[project]/basic/multi_server_entries_sourcemap/input/server.ts [server] (ecmascript)"]}], +["entries/server.ae483216.js", {"otherChunks":["chunks/server-shared.c1005744.js","chunks/server-shared-0-1.8d3d3911.js"],"runtimeModuleIds":["[project]/basic/multi_server_entries_sourcemap/input/server.ts [server] (ecmascript)"]}], ]); -//# sourceMappingURL=server.6de379ea.js.map \ No newline at end of file +//# sourceMappingURL=server.ae483216.js.map \ No newline at end of file diff --git a/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.6de379ea.js.map b/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.ae483216.js.map similarity index 100% rename from crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.6de379ea.js.map rename to crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/entries/server.ae483216.js.map diff --git a/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/stats.json b/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/stats.json index d94cc653c..b7cf59ede 100644 --- a/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/stats.json +++ b/crates/pack-tests/tests/snapshot/basic/multi_server_entries_sourcemap/output/server/stats.json @@ -4,14 +4,14 @@ "name": "detail-server", "chunks": [ "chunks/server-shared.c1005744.js", - "entries/detail-server.2c817ca8.js" + "entries/detail-server.ee516a06.js" ], "assets": [ { "name": "chunks/server-shared.c1005744.js" }, { - "name": "entries/detail-server.2c817ca8.js" + "name": "entries/detail-server.ee516a06.js" } ] }, @@ -20,7 +20,7 @@ "chunks": [ "chunks/server-shared-0-1.8d3d3911.js", "chunks/server-shared.c1005744.js", - "entries/index-server.3095d849.js" + "entries/index-server.e774a8a8.js" ], "assets": [ { @@ -30,7 +30,7 @@ "name": "chunks/server-shared.c1005744.js" }, { - "name": "entries/index-server.3095d849.js" + "name": "entries/index-server.e774a8a8.js" } ] }, @@ -39,7 +39,7 @@ "chunks": [ "chunks/server-shared-0-1.8d3d3911.js", "chunks/server-shared.c1005744.js", - "entries/server.6de379ea.js" + "entries/server.ae483216.js" ], "assets": [ { @@ -49,7 +49,7 @@ "name": "chunks/server-shared.c1005744.js" }, { - "name": "entries/server.6de379ea.js" + "name": "entries/server.ae483216.js" } ] } @@ -84,11 +84,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/detail-server.2c817ca8.js", + "id": "entries/detail-server.ee516a06.js", "size": 39344, "hash": "", "files": [ - "entries/detail-server.2c817ca8.js" + "entries/detail-server.ee516a06.js" ] }, { @@ -96,11 +96,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/index-server.3095d849.js", + "id": "entries/index-server.e774a8a8.js", "size": 39355, "hash": "", "files": [ - "entries/index-server.3095d849.js" + "entries/index-server.e774a8a8.js" ] }, { @@ -108,11 +108,11 @@ "initial": false, "entry": false, "recorded": false, - "id": "entries/server.6de379ea.js", + "id": "entries/server.ae483216.js", "size": 39316, "hash": "", "files": [ - "entries/server.6de379ea.js" + "entries/server.ae483216.js" ] } ], @@ -167,74 +167,74 @@ }, { "type": "asset", - "name": "entries/detail-server.2c817ca8.js", + "name": "entries/detail-server.ee516a06.js", "info": {}, "size": 39344, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/detail-server.2c817ca8.js" + "entries/detail-server.ee516a06.js" ] }, { "type": "asset", - "name": "entries/detail-server.2c817ca8.js.map", + "name": "entries/detail-server.ee516a06.js.map", "info": {}, "size": 63290, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/detail-server.2c817ca8.js.map" + "entries/detail-server.ee516a06.js.map" ] }, { "type": "asset", - "name": "entries/index-server.3095d849.js", + "name": "entries/index-server.e774a8a8.js", "info": {}, "size": 39355, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/index-server.3095d849.js" + "entries/index-server.e774a8a8.js" ] }, { "type": "asset", - "name": "entries/index-server.3095d849.js.map", + "name": "entries/index-server.e774a8a8.js.map", "info": {}, "size": 63278, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/index-server.3095d849.js.map" + "entries/index-server.e774a8a8.js.map" ] }, { "type": "asset", - "name": "entries/server.6de379ea.js", + "name": "entries/server.ae483216.js", "info": {}, "size": 39316, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/server.6de379ea.js" + "entries/server.ae483216.js" ] }, { "type": "asset", - "name": "entries/server.6de379ea.js.map", + "name": "entries/server.ae483216.js.map", "info": {}, "size": 63269, "emitted": false, "comparedForEmit": false, "cached": false, "chunks": [ - "entries/server.6de379ea.js.map" + "entries/server.ae483216.js.map" ] } ], @@ -243,7 +243,7 @@ "name": "basic/multi_server_entries_sourcemap/input/detail.server.ts", "id": "[project]/basic/multi_server_entries_sourcemap/input/detail.server.ts [server] (ecmascript)", "chunks": [ - "entries/detail-server.2c817ca8.js" + "entries/detail-server.ee516a06.js" ], "size": 566 }, @@ -251,7 +251,7 @@ "name": "basic/multi_server_entries_sourcemap/input/index.server.ts", "id": "[project]/basic/multi_server_entries_sourcemap/input/index.server.ts [server] (ecmascript)", "chunks": [ - "entries/index-server.3095d849.js" + "entries/index-server.e774a8a8.js" ], "size": 544 }, @@ -259,7 +259,7 @@ "name": "basic/multi_server_entries_sourcemap/input/server.ts", "id": "[project]/basic/multi_server_entries_sourcemap/input/server.ts [server] (ecmascript)", "chunks": [ - "entries/server.6de379ea.js" + "entries/server.ae483216.js" ], "size": 541 }, diff --git a/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js b/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js similarity index 97% rename from crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js rename to crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js index 9c6b166b8..50b4d3c53 100644 --- a/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js +++ b/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js @@ -1,4 +1,4 @@ -/*! For license information please see main.91d2ac1b.js.LICENSE.txt */ -(e=>{let t,r;if(!Array.isArray(e))return;var n,o=((n=o||{})[n.Runtime=0]="Runtime",n[n.Parent=1]="Parent",n[n.Update=2]="Update",n);let l=new WeakMap;function i(e,t){this.m=e,this.e=t}let u=i.prototype,c=Object.prototype.hasOwnProperty,a="u">typeof Symbol&&Symbol.toStringTag;function f(e,t,r){c.call(e,t)||Object.defineProperty(e,t,r)}function s(e,t){let r=e.get(t);return void 0===r&&(r=p(t),e.set(t,r)),r}function p(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t,r){f(e,"__esModule",{value:!0}),a&&f(e,a,{value:"Module"});let n=0;for(;nr[n])}u.s=m,u.S=function(e,t){let r=[],n=0;for(;n{if("default"!==e){for(let t of r)if(c.call(t,e))return t}};e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(c.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);let r=n(t);return r&&Reflect.get(r,t)},set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,has:(e,t)=>!!Reflect.has(e,t)||"default"!==t&&"__esModule"!==t&&void 0!==n(t),ownKeys(e){let t=Reflect.ownKeys(e);for(let e of r)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t},getOwnPropertyDescriptor(e,t){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r||"default"===t||"__esModule"===t)return r;let o=n(t);if(o)return{enumerable:!0,configurable:!0,get:()=>Reflect.get(o,t)}}})}return r}(r,n);"object"==typeof e&&null!==e&&o.push(e)},u.v=function(e,t){(null!=t?s(this.c,t):this.m).exports=e};u.n=function(e,t){let r;(r=null!=t?s(this.c,t):this.m).exports=r.namespaceObject=e};let b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,b({}),b([]),b(b)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=b(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function O(e){return"function"==typeof e?function(...t){return e.apply(this,t)}:Object.create(null)}function j(e){let t=R(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,O(r),r&&r.__esModule)}function w(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}u.i=j,u.A=function(e){return this.r(e)(j.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return R(e,this.m).exports},u.f=function(e){function t(t){if(t=w(t),c.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=w(t),c.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let _=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};_.prototype=URL.prototype,u.U=_,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let x="u">typeof globalThis?globalThis.publicPath:void 0;Object.defineProperty(u,"runtimePublicPath",{get:()=>x,set:e=>{x=e}}),u.p=function(e){if("auto"===e){let e;if(void 0!==t)return t;if("object"==typeof document){let t=document.currentScript;if(!(e=t?.src)){let t=document.getElementsByTagName("script"),r=t[t.length-1];e=r?.src}}return!e&&"function"==typeof globalThis.importScripts&&globalThis.location&&(e=String(globalThis.location)),t=e?e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^/]*$/,"/"):""}if("string"==typeof x){let e=x;return e.endsWith("/")?e:`${e}/`}return"/"};let v=new Map;function M(e,t,r=!1){let n;try{n=t()}catch(t){throw Error(`Failed to load external module ${e}: ${t}`)}return!r||n.__esModule?n:g(n,O(n),!0)}u.M=v,M.resolve=(e,t)=>require.resolve(e,t),u.x=M,u.N=function(e){if(e&&e.__esModule)return e;let t=Object.create(null),r=e&&a&&"Module"===e[a];if(e&&("object"==typeof e||"function"==typeof e))for(let n in e)"__esModule"!==n&&(r||"default"!==n)&&Object.defineProperty(t,n,{enumerable:!0,get:function(e,t){return()=>e[t]}(e,n)});return r||Object.defineProperty(t,"default",{enumerable:!0,value:e}),Object.defineProperty(t,"__esModule",{value:!0}),a&&Object.defineProperty(t,a,{value:"Module"}),t};let P=new Map;u.c=P;let R=(e,t)=>{let r=P.get(e);if(r){if(r.error)throw r.error;return r}return $(e,o.Parent,t.id)};function $(e,t,r){let n=v.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:let o;throw Error(`Invariant: ${(o=t,`Unknown source type: ${o}`)}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=p(e),l=o.exports;P.set(e,o);let u=new i(o,l);try{n(u,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function E(e){let t;if(!Array.isArray(e))return r.registerChunk(void 0,e);let n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};throw Error("chunk path is empty")}(e[0]);return 2===e.length?t=e[1]:(t=void 0,!function e(t,r,n,o){let l=r,i=t[l];for(Array.isArray(i)&&(e(i,0,n,o),l++);l{let n=document.createElement("script");n.src=e,n.onload=()=>t(),n.onerror=()=>r(Error(`Failed to load script: ${e}`)),document.head.appendChild(n)}),k.set(e,t)),t},r={registerChunk(e,t){if(null!=t&&t.runtimeModuleIds.length>0)for(let r of t.runtimeModuleIds)!function(e,t){let r=P.get(t);if(r){if(r.error)throw r.error;return}$(t,o.Runtime,e)}(e,r)}};let T=e;function U(){let e,t=["[project]/library/extract-comments-sourcemap/input/index.js [library-client] (ecmascript)"];for(let r=0;r{"use strict";globalThis.__licenseCommentValue=42,globalThis.__duplicateLicenseCommentValue=42;let t=globalThis.__licenseCommentValue;e.s(["value",0,t])}],["main.91d2ac1b.js",{otherChunks:[],runtimeModuleIds:["[project]/library/extract-comments-sourcemap/input/index.js [library-client] (ecmascript)"]}]]); +/*! For license information please see main.ab5ee3cf.js.LICENSE.txt */ +(e=>{let t,r;if(!Array.isArray(e))return;var n,o=((n=o||{})[n.Runtime=0]="Runtime",n[n.Parent=1]="Parent",n[n.Update=2]="Update",n);let l=new WeakMap;function i(e,t){this.m=e,this.e=t}let u=i.prototype,c=Object.prototype.hasOwnProperty,a="u">typeof Symbol&&Symbol.toStringTag;function f(e,t,r){c.call(e,t)||Object.defineProperty(e,t,r)}function s(e,t){let r=e.get(t);return void 0===r&&(r=p(t),e.set(t,r)),r}function p(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t,r){f(e,"__esModule",{value:!0}),a&&f(e,a,{value:"Module"});let n=0;for(;nr[n])}u.s=m,u.S=function(e,t){let r=[],n=0;for(;n{if("default"!==e){for(let t of r)if(c.call(t,e))return t}};e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(c.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);let r=n(t);return r&&Reflect.get(r,t)},set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,has:(e,t)=>!!Reflect.has(e,t)||"default"!==t&&"__esModule"!==t&&void 0!==n(t),ownKeys(e){let t=Reflect.ownKeys(e);for(let e of r)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t},getOwnPropertyDescriptor(e,t){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r||"default"===t||"__esModule"===t)return r;let o=n(t);if(o)return{enumerable:!0,configurable:!0,get:()=>Reflect.get(o,t)}}})}return r}(r,n);"object"==typeof e&&null!==e&&o.push(e)},u.v=function(e,t){(null!=t?s(this.c,t):this.m).exports=e};u.n=function(e,t){let r;(r=null!=t?s(this.c,t):this.m).exports=r.namespaceObject=e};let b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,b({}),b([]),b(b)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=b(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function O(e){return"function"==typeof e?function(...t){return e.apply(this,t)}:Object.create(null)}function j(e){let t=R(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,O(r),r&&r.__esModule)}function w(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}u.i=j,u.A=function(e){return this.r(e)(j.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return R(e,this.m).exports},u.f=function(e){function t(t){if(t=w(t),c.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=w(t),c.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let _=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};_.prototype=URL.prototype,u.U=_,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let x="u">typeof globalThis?globalThis.publicPath:void 0;Object.defineProperty(u,"runtimePublicPath",{get:()=>x,set:e=>{x=e}}),u.p=function(e){if("auto"===e){let e;if(void 0!==t)return t;if("object"==typeof document){let t=document.currentScript;if(!(e=t?.src)){let t=document.getElementsByTagName("script"),r=t[t.length-1];e=r?.src}}return!e&&"function"==typeof globalThis.importScripts&&globalThis.location&&(e=String(globalThis.location)),t=e?e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^/]*$/,"/"):""}if("string"==typeof x){let e=x;return e.endsWith("/")?e:`${e}/`}return"/"};let v=new Map;function M(e,t,r=!1){let n;try{n=t()}catch(t){throw Error(`Failed to load external module ${e}: ${t}`)}return!r||n.__esModule?n:g(n,O(n),!0)}u.M=v,M.resolve=(e,t)=>require.resolve(e,t),u.x=M,u.N=function(e){if(e&&e.__esModule)return e;let t=Object.create(null),r=e&&a&&"Module"===e[a];if(e&&("object"==typeof e||"function"==typeof e))for(let n in e)"__esModule"!==n&&(r||"default"!==n)&&Object.defineProperty(t,n,{enumerable:!0,get:function(e,t){return()=>e[t]}(e,n)});return r||Object.defineProperty(t,"default",{enumerable:!0,value:e}),Object.defineProperty(t,"__esModule",{value:!0}),a&&Object.defineProperty(t,a,{value:"Module"}),t};let P=new Map;u.c=P;let R=(e,t)=>{let r=P.get(e);if(r){if(r.error)throw r.error;return r}return $(e,o.Parent,t.id)};function $(e,t,r){let n=v.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:let o;throw Error(`Invariant: ${(o=t,`Unknown source type: ${o}`)}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=p(e),l=o.exports;P.set(e,o);let u=new i(o,l);try{n(u,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function E(e){let t;if(!Array.isArray(e))return r.registerChunk(void 0,e);let n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};throw Error("chunk path is empty")}(e[0]);return 2===e.length?t=e[1]:(t=void 0,!function e(t,r,n,o){let l=r,i=t[l];for(Array.isArray(i)&&(e(i,0,n,o),l++);l{let n=document.createElement("script");n.src=e,n.onload=()=>t(),n.onerror=()=>r(Error(`Failed to load script: ${e}`)),document.head.appendChild(n)}),k.set(e,t)),t},r={registerChunk(e,t){if(null!=t&&t.runtimeModuleIds.length>0)for(let r of t.runtimeModuleIds)!function(e,t){let r=P.get(t);if(r){if(r.error)throw r.error;return}$(t,o.Runtime,e)}(e,r)}};let T=e;function U(){let e,t=["[project]/library/extract-comments-sourcemap/input/index.js [library-client] (ecmascript)"];for(let r=0;r{"use strict";globalThis.__licenseCommentValue=42,globalThis.__duplicateLicenseCommentValue=42;let t=globalThis.__licenseCommentValue;e.s(["value",0,t])}],["main.ab5ee3cf.js",{otherChunks:[],runtimeModuleIds:["[project]/library/extract-comments-sourcemap/input/index.js [library-client] (ecmascript)"]}]]); -//# sourceMappingURL=main.91d2ac1b.js.map \ No newline at end of file +//# sourceMappingURL=main.ab5ee3cf.js.map \ No newline at end of file diff --git a/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js.LICENSE.txt b/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js.LICENSE.txt similarity index 100% rename from crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js.LICENSE.txt rename to crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js.LICENSE.txt diff --git a/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js.map b/crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js.map similarity index 100% rename from crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.91d2ac1b.js.map rename to crates/pack-tests/tests/snapshot/library/extract-comments-sourcemap/output/main.ab5ee3cf.js.map diff --git a/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.936466c5.js b/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.188a777b.js similarity index 97% rename from crates/pack-tests/tests/snapshot/library/extract-comments/output/main.936466c5.js rename to crates/pack-tests/tests/snapshot/library/extract-comments/output/main.188a777b.js index 75ba7a07f..35eccc887 100644 --- a/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.936466c5.js +++ b/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.188a777b.js @@ -1,2 +1,2 @@ -/*! For license information please see main.936466c5.js.LICENSE.txt */ -(e=>{let t,r;if(!Array.isArray(e))return;var n,o=((n=o||{})[n.Runtime=0]="Runtime",n[n.Parent=1]="Parent",n[n.Update=2]="Update",n);let l=new WeakMap;function i(e,t){this.m=e,this.e=t}let u=i.prototype,c=Object.prototype.hasOwnProperty,a="u">typeof Symbol&&Symbol.toStringTag;function f(e,t,r){c.call(e,t)||Object.defineProperty(e,t,r)}function s(e,t){let r=e.get(t);return void 0===r&&(r=p(t),e.set(t,r)),r}function p(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t,r){f(e,"__esModule",{value:!0}),a&&f(e,a,{value:"Module"});let n=0;for(;nr[n])}u.s=m,u.S=function(e,t){let r=[],n=0;for(;n{if("default"!==e){for(let t of r)if(c.call(t,e))return t}};e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(c.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);let r=n(t);return r&&Reflect.get(r,t)},set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,has:(e,t)=>!!Reflect.has(e,t)||"default"!==t&&"__esModule"!==t&&void 0!==n(t),ownKeys(e){let t=Reflect.ownKeys(e);for(let e of r)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t},getOwnPropertyDescriptor(e,t){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r||"default"===t||"__esModule"===t)return r;let o=n(t);if(o)return{enumerable:!0,configurable:!0,get:()=>Reflect.get(o,t)}}})}return r}(r,n);"object"==typeof e&&null!==e&&o.push(e)},u.v=function(e,t){(null!=t?s(this.c,t):this.m).exports=e};u.n=function(e,t){let r;(r=null!=t?s(this.c,t):this.m).exports=r.namespaceObject=e};let b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,b({}),b([]),b(b)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=b(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function O(e){return"function"==typeof e?function(...t){return e.apply(this,t)}:Object.create(null)}function j(e){let t=R(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,O(r),r&&r.__esModule)}function w(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}u.i=j,u.A=function(e){return this.r(e)(j.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return R(e,this.m).exports},u.f=function(e){function t(t){if(t=w(t),c.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=w(t),c.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let _=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};_.prototype=URL.prototype,u.U=_,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let x="u">typeof globalThis?globalThis.publicPath:void 0;Object.defineProperty(u,"runtimePublicPath",{get:()=>x,set:e=>{x=e}}),u.p=function(e){if("auto"===e){let e;if(void 0!==t)return t;if("object"==typeof document){let t=document.currentScript;if(!(e=t?.src)){let t=document.getElementsByTagName("script"),r=t[t.length-1];e=r?.src}}return!e&&"function"==typeof globalThis.importScripts&&globalThis.location&&(e=String(globalThis.location)),t=e?e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^/]*$/,"/"):""}if("string"==typeof x){let e=x;return e.endsWith("/")?e:`${e}/`}return"/"};let v=new Map;function M(e,t,r=!1){let n;try{n=t()}catch(t){throw Error(`Failed to load external module ${e}: ${t}`)}return!r||n.__esModule?n:g(n,O(n),!0)}u.M=v,M.resolve=(e,t)=>require.resolve(e,t),u.x=M,u.N=function(e){if(e&&e.__esModule)return e;let t=Object.create(null),r=e&&a&&"Module"===e[a];if(e&&("object"==typeof e||"function"==typeof e))for(let n in e)"__esModule"!==n&&(r||"default"!==n)&&Object.defineProperty(t,n,{enumerable:!0,get:function(e,t){return()=>e[t]}(e,n)});return r||Object.defineProperty(t,"default",{enumerable:!0,value:e}),Object.defineProperty(t,"__esModule",{value:!0}),a&&Object.defineProperty(t,a,{value:"Module"}),t};let P=new Map;u.c=P;let R=(e,t)=>{let r=P.get(e);if(r){if(r.error)throw r.error;return r}return $(e,o.Parent,t.id)};function $(e,t,r){let n=v.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:let o;throw Error(`Invariant: ${(o=t,`Unknown source type: ${o}`)}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=p(e),l=o.exports;P.set(e,o);let u=new i(o,l);try{n(u,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function E(e){let t;if(!Array.isArray(e))return r.registerChunk(void 0,e);let n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};throw Error("chunk path is empty")}(e[0]);return 2===e.length?t=e[1]:(t=void 0,!function e(t,r,n,o){let l=r,i=t[l];for(Array.isArray(i)&&(e(i,0,n,o),l++);l{let n=document.createElement("script");n.src=e,n.onload=()=>t(),n.onerror=()=>r(Error(`Failed to load script: ${e}`)),document.head.appendChild(n)}),k.set(e,t)),t},r={registerChunk(e,t){if(null!=t&&t.runtimeModuleIds.length>0)for(let r of t.runtimeModuleIds)!function(e,t){let r=P.get(t);if(r){if(r.error)throw r.error;return}$(t,o.Runtime,e)}(e,r)}};let T=e;function U(){let e,t=["[project]/library/extract-comments/input/index.js [library-client] (ecmascript)"];for(let r=0;r{"use strict";globalThis.__licenseCommentValue=42,globalThis.__duplicateLicenseCommentValue=42;let t=globalThis.__licenseCommentValue;e.s(["value",0,t])}],["main.936466c5.js",{otherChunks:[],runtimeModuleIds:["[project]/library/extract-comments/input/index.js [library-client] (ecmascript)"]}]]); \ No newline at end of file +/*! For license information please see main.188a777b.js.LICENSE.txt */ +(e=>{let t,r;if(!Array.isArray(e))return;var n,o=((n=o||{})[n.Runtime=0]="Runtime",n[n.Parent=1]="Parent",n[n.Update=2]="Update",n);let l=new WeakMap;function i(e,t){this.m=e,this.e=t}let u=i.prototype,c=Object.prototype.hasOwnProperty,a="u">typeof Symbol&&Symbol.toStringTag;function f(e,t,r){c.call(e,t)||Object.defineProperty(e,t,r)}function s(e,t){let r=e.get(t);return void 0===r&&(r=p(t),e.set(t,r)),r}function p(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t,r){f(e,"__esModule",{value:!0}),a&&f(e,a,{value:"Module"});let n=0;for(;nr[n])}u.s=m,u.S=function(e,t){let r=[],n=0;for(;n{if("default"!==e){for(let t of r)if(c.call(t,e))return t}};e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(c.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);let r=n(t);return r&&Reflect.get(r,t)},set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,has:(e,t)=>!!Reflect.has(e,t)||"default"!==t&&"__esModule"!==t&&void 0!==n(t),ownKeys(e){let t=Reflect.ownKeys(e);for(let e of r)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t},getOwnPropertyDescriptor(e,t){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r||"default"===t||"__esModule"===t)return r;let o=n(t);if(o)return{enumerable:!0,configurable:!0,get:()=>Reflect.get(o,t)}}})}return r}(r,n);"object"==typeof e&&null!==e&&o.push(e)},u.v=function(e,t){(null!=t?s(this.c,t):this.m).exports=e};u.n=function(e,t){let r;(r=null!=t?s(this.c,t):this.m).exports=r.namespaceObject=e};let b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,b({}),b([]),b(b)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=b(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function O(e){return"function"==typeof e?function(...t){return e.apply(this,t)}:Object.create(null)}function j(e){let t=R(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,O(r),r&&r.__esModule)}function w(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}u.i=j,u.A=function(e){return this.r(e)(j.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return R(e,this.m).exports},u.f=function(e){function t(t){if(t=w(t),c.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=w(t),c.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let _=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};_.prototype=URL.prototype,u.U=_,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let x="u">typeof globalThis?globalThis.publicPath:void 0;Object.defineProperty(u,"runtimePublicPath",{get:()=>x,set:e=>{x=e}}),u.p=function(e){if("auto"===e){let e;if(void 0!==t)return t;if("object"==typeof document){let t=document.currentScript;if(!(e=t?.src)){let t=document.getElementsByTagName("script"),r=t[t.length-1];e=r?.src}}return!e&&"function"==typeof globalThis.importScripts&&globalThis.location&&(e=String(globalThis.location)),t=e?e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^/]*$/,"/"):""}if("string"==typeof x){let e=x;return e.endsWith("/")?e:`${e}/`}return"/"};let v=new Map;function M(e,t,r=!1){let n;try{n=t()}catch(t){throw Error(`Failed to load external module ${e}: ${t}`)}return!r||n.__esModule?n:g(n,O(n),!0)}u.M=v,M.resolve=(e,t)=>require.resolve(e,t),u.x=M,u.N=function(e){if(e&&e.__esModule)return e;let t=Object.create(null),r=e&&a&&"Module"===e[a];if(e&&("object"==typeof e||"function"==typeof e))for(let n in e)"__esModule"!==n&&(r||"default"!==n)&&Object.defineProperty(t,n,{enumerable:!0,get:function(e,t){return()=>e[t]}(e,n)});return r||Object.defineProperty(t,"default",{enumerable:!0,value:e}),Object.defineProperty(t,"__esModule",{value:!0}),a&&Object.defineProperty(t,a,{value:"Module"}),t};let P=new Map;u.c=P;let R=(e,t)=>{let r=P.get(e);if(r){if(r.error)throw r.error;return r}return $(e,o.Parent,t.id)};function $(e,t,r){let n=v.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:let o;throw Error(`Invariant: ${(o=t,`Unknown source type: ${o}`)}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=p(e),l=o.exports;P.set(e,o);let u=new i(o,l);try{n(u,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function E(e){let t;if(!Array.isArray(e))return r.registerChunk(void 0,e);let n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};throw Error("chunk path is empty")}(e[0]);return 2===e.length?t=e[1]:(t=void 0,!function e(t,r,n,o){let l=r,i=t[l];for(Array.isArray(i)&&(e(i,0,n,o),l++);l{let n=document.createElement("script");n.src=e,n.onload=()=>t(),n.onerror=()=>r(Error(`Failed to load script: ${e}`)),document.head.appendChild(n)}),k.set(e,t)),t},r={registerChunk(e,t){if(null!=t&&t.runtimeModuleIds.length>0)for(let r of t.runtimeModuleIds)!function(e,t){let r=P.get(t);if(r){if(r.error)throw r.error;return}$(t,o.Runtime,e)}(e,r)}};let T=e;function U(){let e,t=["[project]/library/extract-comments/input/index.js [library-client] (ecmascript)"];for(let r=0;r{"use strict";globalThis.__licenseCommentValue=42,globalThis.__duplicateLicenseCommentValue=42;let t=globalThis.__licenseCommentValue;e.s(["value",0,t])}],["main.188a777b.js",{otherChunks:[],runtimeModuleIds:["[project]/library/extract-comments/input/index.js [library-client] (ecmascript)"]}]]); \ No newline at end of file diff --git a/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.936466c5.js.LICENSE.txt b/crates/pack-tests/tests/snapshot/library/extract-comments/output/main.188a777b.js.LICENSE.txt similarity index 100% rename from crates/pack-tests/tests/snapshot/library/extract-comments/output/main.936466c5.js.LICENSE.txt rename to crates/pack-tests/tests/snapshot/library/extract-comments/output/main.188a777b.js.LICENSE.txt diff --git a/packages/pack/src/__test__/libraryContentHash.test.ts b/packages/pack/src/__test__/libraryContentHash.test.ts new file mode 100644 index 000000000..cc174e544 --- /dev/null +++ b/packages/pack/src/__test__/libraryContentHash.test.ts @@ -0,0 +1,113 @@ +import { spawn } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const testDir = path.dirname(fileURLToPath(import.meta.url)); +const packageRoot = path.resolve(testDir, "../.."); +const repoRoot = path.resolve(packageRoot, "../.."); +const childScript = path.join(testDir, "libraryContentHashChild.ts"); +const viteNode = path.join(repoRoot, "node_modules/vite-node/vite-node.mjs"); + +function runLibraryContentHashFixture() { + return new Promise((resolve, reject) => { + const targetDir = path.join(repoRoot, "target"); + fs.mkdirSync(targetDir, { recursive: true }); + const projectPath = fs.mkdtempSync( + path.join(targetDir, "library-content-hash-"), + ); + const child = spawn( + process.execPath, + [viteNode, childScript, projectPath], + { + cwd: packageRoot, + env: { + ...process.env, + NODE_PATH: [ + path.join(packageRoot, "node_modules"), + path.join(repoRoot, "node_modules"), + process.env.NODE_PATH, + ] + .filter(Boolean) + .join(path.delimiter), + }, + stdio: ["ignore", "pipe", "pipe"], + }, + ); + + let stdout = ""; + let stderr = ""; + let settled = false; + let timedOut = false; + const timer = setTimeout(() => { + timedOut = true; + child.kill("SIGKILL"); + }, 25_000); + child.stdout.on("data", (chunk) => { + stdout += chunk; + }); + child.stderr.on("data", (chunk) => { + stderr += chunk; + }); + const settle = (error: unknown | null, result?: unknown) => { + if (settled) return; + settled = true; + clearTimeout(timer); + try { + fs.rmSync(projectPath, { recursive: true, force: true }); + } catch (cleanupError) { + error ??= cleanupError; + } + if (error) reject(error); + else resolve(result); + }; + + child.once("error", (error) => { + settle(error); + }); + child.once("close", (code, signal) => { + if (settled) return; + try { + if (timedOut) { + throw new Error("library content hash fixture timed out after 25s"); + } + if (code !== 0) { + throw new Error( + `library content hash fixture failed with code ${code}, signal ${signal}\n${stderr}\n${stdout}`, + ); + } + const line = stdout + .split(/\r?\n/) + .find((value) => value.startsWith("__LIBRARY_CONTENT_HASH__")); + if (!line) { + throw new Error( + `library content hash fixture did not print results\n${stderr}\n${stdout}`, + ); + } + settle(null, JSON.parse(line.slice("__LIBRARY_CONTENT_HASH__".length))); + } catch (error) { + settle(error); + } + }); + }); +} + +describe("library content hashes", () => { + it("tracks the runtime library name and export path while identical builds remain stable", async () => { + await expect(runLibraryContentHashFixture()).resolves.toEqual({ + sameConfigStableFilename: true, + sameConfigStableBody: true, + libraryNameChangesFilename: true, + libraryNameChangesBody: true, + exportPathChangesFilename: true, + exportPathChangesBody: true, + exports: [ + { type: "function", value: "default-widget" }, + { type: "function", value: "default-widget" }, + { type: "function", value: "default-widget" }, + { type: "function", value: "nested-widget" }, + ], + }); + }, 30_000); +}); diff --git a/packages/pack/src/__test__/libraryContentHashChild.ts b/packages/pack/src/__test__/libraryContentHashChild.ts new file mode 100644 index 000000000..fcbc56918 --- /dev/null +++ b/packages/pack/src/__test__/libraryContentHashChild.ts @@ -0,0 +1,104 @@ +import fs from "node:fs"; +import path from "node:path"; +import vm from "node:vm"; +import { build } from "../commands/build"; + +async function main() { + const projectPath = process.argv[2]; + if (!projectPath || !path.isAbsolute(projectPath)) { + throw new Error("An absolute fixture directory is required"); + } + + fs.mkdirSync(path.join(projectPath, "input"), { recursive: true }); + fs.writeFileSync( + path.join(projectPath, "input/index.js"), + `function RootWidget() { return "default-widget"; } +RootWidget.nested = { + Widget: function NestedWidget() { return "nested-widget"; } +}; +export default RootWidget; +`, + ); + + async function buildLibrary( + directory: string, + libraryName: string, + exportPath: string[], + ) { + const outputPath = path.join(projectPath, directory); + await build( + { + buildId: "library-content-hash-test", + tracing: false, + config: { + entry: [ + { + name: "index", + import: "./input/index.js", + library: { name: libraryName, export: exportPath }, + }, + ], + mode: "production", + persistentCaching: false, + cacheDirectory: path.join(projectPath, ".cache"), + sourceMaps: false, + output: { + path: outputPath, + filename: "index.[contenthash:8].umd.min.js", + }, + optimization: { minify: true, moduleIds: "named" }, + }, + }, + projectPath, + projectPath, + ); + + const scripts = fs + .readdirSync(outputPath) + .filter((file) => file.endsWith(".js")); + if (scripts.length !== 1) { + throw new Error("Expected one self-contained library script"); + } + const filename = scripts[0]; + const body = fs.readFileSync(path.join(outputPath, filename), "utf8"); + const context: Record = { URL }; + vm.runInNewContext(body, context, { timeout: 1000 }); + const exported = context[libraryName]; + + return { + filename, + body, + exportedType: typeof exported, + exportedValue: typeof exported === "function" ? exported() : undefined, + }; + } + + const first = await buildLibrary("first", "WidgetBuildA", ["default"]); + const repeated = await buildLibrary("repeated", "WidgetBuildA", ["default"]); + const renamed = await buildLibrary("renamed", "WidgetBuildB", ["default"]); + const changedExport = await buildLibrary("changed-export", "WidgetBuildA", [ + "default", + "nested", + "Widget", + ]); + + console.log( + `__LIBRARY_CONTENT_HASH__${JSON.stringify({ + sameConfigStableFilename: first.filename === repeated.filename, + sameConfigStableBody: first.body === repeated.body, + libraryNameChangesFilename: first.filename !== renamed.filename, + libraryNameChangesBody: first.body !== renamed.body, + exportPathChangesFilename: first.filename !== changedExport.filename, + exportPathChangesBody: first.body !== changedExport.body, + exports: [first, repeated, renamed, changedExport].map((result) => ({ + type: result.exportedType, + value: result.exportedValue, + })), + })}`, + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +});