@patch-adams/core 1.5.22 → 1.5.23

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.js CHANGED
@@ -458,7 +458,9 @@ var PatchAdamsConfigSchema = z.object({
458
458
  /** Plugin configurations - each plugin is keyed by its name */
459
459
  plugins: PluginsConfigSchema,
460
460
  /** Optional skin name — adds 'pa-skinned' + skin class to <html>, loads skin CSS/JS after core files */
461
- skin: z.string().min(1).optional()
461
+ skin: z.string().min(1).optional(),
462
+ /** URL for server-controlled asset cache version (e.g., https://api.example.com/create/skin/version) */
463
+ assetVersionUrl: z.string().url().optional()
462
464
  });
463
465
 
464
466
  // src/config/defaults.ts
@@ -602,7 +604,8 @@ html.${htmlClass}.${loadingClass} body {
602
604
  <script data-pa="css-before-loader">
603
605
  (function() {
604
606
  'use strict';
605
- var REMOTE_URL = "${remoteUrl}";
607
+ var v = window.__pa_v || '';
608
+ var REMOTE_URL = "${remoteUrl}" + (v ? "?v=" + v : "");
606
609
  var LOCAL_PATH = "${localPath}";
607
610
 
608
611
  function loadCSSSync(url) {
@@ -645,7 +648,7 @@ function generateCssAfterLoader(options) {
645
648
  <script data-pa="css-after-loader">
646
649
  (function() {
647
650
  'use strict';
648
- var REMOTE_URL = "${remoteUrl}";
651
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
649
652
  var LOCAL_PATH = "${localPath}";
650
653
  var TIMEOUT = ${timeout};
651
654
 
@@ -5524,7 +5527,7 @@ function escapeJs(str) {
5524
5527
  return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r");
5525
5528
  }
5526
5529
  function generateJsBeforeLoader(options) {
5527
- const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin } = options;
5530
+ const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin, assetVersionUrl } = options;
5528
5531
  const lrsBridgeCode = generateLrsBridgeCode(lrsBridge);
5529
5532
  const courseLines = [];
5530
5533
  if (metadata) {
@@ -5627,7 +5630,22 @@ window.pa_patcher = window.pa_patcher || {
5627
5630
 
5628
5631
  (function() {
5629
5632
  'use strict';
5630
- var REMOTE_URL = "${remoteUrl}";
5633
+ // Fetch server-controlled cache version (sync, once)
5634
+ var ASSET_VERSION_URL = "${assetVersionUrl || ""}";
5635
+ window.__pa_v = '';
5636
+ if (ASSET_VERSION_URL) {
5637
+ try {
5638
+ var xhr = new XMLHttpRequest();
5639
+ xhr.open('GET', ASSET_VERSION_URL, false);
5640
+ xhr.timeout = 2000;
5641
+ xhr.send();
5642
+ if (xhr.status === 200) {
5643
+ window.__pa_v = JSON.parse(xhr.responseText).v || '1';
5644
+ }
5645
+ } catch(e) { window.__pa_v = '1'; }
5646
+ }
5647
+
5648
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5631
5649
  var LOCAL_PATH = "${localPath}";
5632
5650
 
5633
5651
  function loadJSSync(url) {
@@ -5696,7 +5714,8 @@ function buildJsBeforeOptions(config, metadata) {
5696
5714
  loadingClass: config.loadingClass,
5697
5715
  metadata: metadata ?? null,
5698
5716
  lrsBridge,
5699
- skin: config.skin
5717
+ skin: config.skin,
5718
+ assetVersionUrl: config.assetVersionUrl
5700
5719
  };
5701
5720
  }
5702
5721
 
@@ -5707,7 +5726,7 @@ function generateJsAfterLoader(options) {
5707
5726
  <script data-pa="js-after-loader">
5708
5727
  (function() {
5709
5728
  'use strict';
5710
- var REMOTE_URL = "${remoteUrl}";
5729
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5711
5730
  var LOCAL_PATH = "${localPath}";
5712
5731
  var TIMEOUT = ${timeout};
5713
5732
  var LOADING_CLASS = "${loadingClass}";
@@ -5817,7 +5836,7 @@ function generateSkinCssLoader(options) {
5817
5836
  <script data-pa="skin-css-loader">
5818
5837
  (function() {
5819
5838
  'use strict';
5820
- var REMOTE_URL = "${remoteUrl}";
5839
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5821
5840
  var LOCAL_PATH = "${localPath}";
5822
5841
  var TIMEOUT = ${timeout};
5823
5842
 
@@ -5891,9 +5910,8 @@ function generateSkinCssLoader(options) {
5891
5910
  }
5892
5911
  function buildSkinCssOptions(config) {
5893
5912
  if (!config.skin) return null;
5894
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5895
5913
  return {
5896
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css?v=${cacheBuster}`,
5914
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css`,
5897
5915
  localPath: `skin/${config.skin}/style.css`,
5898
5916
  timeout: config.cssAfter.timeout
5899
5917
  // reuse cssAfter timeout
@@ -5907,7 +5925,7 @@ function generateSkinJsLoader(options) {
5907
5925
  <script data-pa="skin-js-loader">
5908
5926
  (function() {
5909
5927
  'use strict';
5910
- var REMOTE_URL = "${remoteUrl}";
5928
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5911
5929
  var LOCAL_PATH = "${localPath}";
5912
5930
  var TIMEOUT = ${timeout};
5913
5931
 
@@ -5993,9 +6011,8 @@ function generateSkinJsLoader(options) {
5993
6011
  }
5994
6012
  function buildSkinJsOptions(config) {
5995
6013
  if (!config.skin) return null;
5996
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5997
6014
  return {
5998
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js?v=${cacheBuster}`,
6015
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js`,
5999
6016
  localPath: `skin/${config.skin}/script.js`,
6000
6017
  timeout: config.jsAfter.timeout
6001
6018
  // reuse jsAfter timeout