@patch-adams/core 1.5.22 → 1.5.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs CHANGED
@@ -468,7 +468,9 @@ var PatchAdamsConfigSchema = zod.z.object({
468
468
  /** Plugin configurations - each plugin is keyed by its name */
469
469
  plugins: PluginsConfigSchema,
470
470
  /** Optional skin name — adds 'pa-skinned' + skin class to <html>, loads skin CSS/JS after core files */
471
- skin: zod.z.string().min(1).optional()
471
+ skin: zod.z.string().min(1).optional(),
472
+ /** URL for server-controlled asset cache version (e.g., https://api.example.com/create/skin/version) */
473
+ assetVersionUrl: zod.z.string().url().optional()
472
474
  });
473
475
 
474
476
  // src/config/defaults.ts
@@ -612,7 +614,8 @@ html.${htmlClass}.${loadingClass} body {
612
614
  <script data-pa="css-before-loader">
613
615
  (function() {
614
616
  'use strict';
615
- var REMOTE_URL = "${remoteUrl}";
617
+ var v = window.__pa_v || '';
618
+ var REMOTE_URL = "${remoteUrl}" + (v ? "?v=" + v : "");
616
619
  var LOCAL_PATH = "${localPath}";
617
620
 
618
621
  function loadCSSSync(url) {
@@ -655,7 +658,7 @@ function generateCssAfterLoader(options) {
655
658
  <script data-pa="css-after-loader">
656
659
  (function() {
657
660
  'use strict';
658
- var REMOTE_URL = "${remoteUrl}";
661
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
659
662
  var LOCAL_PATH = "${localPath}";
660
663
  var TIMEOUT = ${timeout};
661
664
 
@@ -5534,7 +5537,7 @@ function escapeJs(str) {
5534
5537
  return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r");
5535
5538
  }
5536
5539
  function generateJsBeforeLoader(options) {
5537
- const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin } = options;
5540
+ const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin, assetVersionUrl } = options;
5538
5541
  const lrsBridgeCode = generateLrsBridgeCode(lrsBridge);
5539
5542
  const courseLines = [];
5540
5543
  if (metadata) {
@@ -5637,7 +5640,21 @@ window.pa_patcher = window.pa_patcher || {
5637
5640
 
5638
5641
  (function() {
5639
5642
  'use strict';
5640
- var REMOTE_URL = "${remoteUrl}";
5643
+ // Fetch server-controlled cache version (sync, once)
5644
+ var ASSET_VERSION_URL = "${assetVersionUrl || ""}";
5645
+ window.__pa_v = '';
5646
+ if (ASSET_VERSION_URL) {
5647
+ try {
5648
+ var xhr = new XMLHttpRequest();
5649
+ xhr.open('GET', ASSET_VERSION_URL, false);
5650
+ xhr.send();
5651
+ if (xhr.status === 200) {
5652
+ window.__pa_v = JSON.parse(xhr.responseText).v || '1';
5653
+ }
5654
+ } catch(e) { window.__pa_v = '1'; }
5655
+ }
5656
+
5657
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5641
5658
  var LOCAL_PATH = "${localPath}";
5642
5659
 
5643
5660
  function loadJSSync(url) {
@@ -5706,7 +5723,8 @@ function buildJsBeforeOptions(config, metadata) {
5706
5723
  loadingClass: config.loadingClass,
5707
5724
  metadata: metadata ?? null,
5708
5725
  lrsBridge,
5709
- skin: config.skin
5726
+ skin: config.skin,
5727
+ assetVersionUrl: config.assetVersionUrl
5710
5728
  };
5711
5729
  }
5712
5730
 
@@ -5717,7 +5735,7 @@ function generateJsAfterLoader(options) {
5717
5735
  <script data-pa="js-after-loader">
5718
5736
  (function() {
5719
5737
  'use strict';
5720
- var REMOTE_URL = "${remoteUrl}";
5738
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5721
5739
  var LOCAL_PATH = "${localPath}";
5722
5740
  var TIMEOUT = ${timeout};
5723
5741
  var LOADING_CLASS = "${loadingClass}";
@@ -5827,7 +5845,7 @@ function generateSkinCssLoader(options) {
5827
5845
  <script data-pa="skin-css-loader">
5828
5846
  (function() {
5829
5847
  'use strict';
5830
- var REMOTE_URL = "${remoteUrl}";
5848
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5831
5849
  var LOCAL_PATH = "${localPath}";
5832
5850
  var TIMEOUT = ${timeout};
5833
5851
 
@@ -5901,9 +5919,8 @@ function generateSkinCssLoader(options) {
5901
5919
  }
5902
5920
  function buildSkinCssOptions(config) {
5903
5921
  if (!config.skin) return null;
5904
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5905
5922
  return {
5906
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css?v=${cacheBuster}`,
5923
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css`,
5907
5924
  localPath: `skin/${config.skin}/style.css`,
5908
5925
  timeout: config.cssAfter.timeout
5909
5926
  // reuse cssAfter timeout
@@ -5917,7 +5934,7 @@ function generateSkinJsLoader(options) {
5917
5934
  <script data-pa="skin-js-loader">
5918
5935
  (function() {
5919
5936
  'use strict';
5920
- var REMOTE_URL = "${remoteUrl}";
5937
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5921
5938
  var LOCAL_PATH = "${localPath}";
5922
5939
  var TIMEOUT = ${timeout};
5923
5940
 
@@ -6003,9 +6020,8 @@ function generateSkinJsLoader(options) {
6003
6020
  }
6004
6021
  function buildSkinJsOptions(config) {
6005
6022
  if (!config.skin) return null;
6006
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
6007
6023
  return {
6008
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js?v=${cacheBuster}`,
6024
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js`,
6009
6025
  localPath: `skin/${config.skin}/script.js`,
6010
6026
  timeout: config.jsAfter.timeout
6011
6027
  // reuse jsAfter timeout