@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.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,22 @@ 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.timeout = 2000;
5651
+ xhr.send();
5652
+ if (xhr.status === 200) {
5653
+ window.__pa_v = JSON.parse(xhr.responseText).v || '1';
5654
+ }
5655
+ } catch(e) { window.__pa_v = '1'; }
5656
+ }
5657
+
5658
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5641
5659
  var LOCAL_PATH = "${localPath}";
5642
5660
 
5643
5661
  function loadJSSync(url) {
@@ -5706,7 +5724,8 @@ function buildJsBeforeOptions(config, metadata) {
5706
5724
  loadingClass: config.loadingClass,
5707
5725
  metadata: metadata ?? null,
5708
5726
  lrsBridge,
5709
- skin: config.skin
5727
+ skin: config.skin,
5728
+ assetVersionUrl: config.assetVersionUrl
5710
5729
  };
5711
5730
  }
5712
5731
 
@@ -5717,7 +5736,7 @@ function generateJsAfterLoader(options) {
5717
5736
  <script data-pa="js-after-loader">
5718
5737
  (function() {
5719
5738
  'use strict';
5720
- var REMOTE_URL = "${remoteUrl}";
5739
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5721
5740
  var LOCAL_PATH = "${localPath}";
5722
5741
  var TIMEOUT = ${timeout};
5723
5742
  var LOADING_CLASS = "${loadingClass}";
@@ -5827,7 +5846,7 @@ function generateSkinCssLoader(options) {
5827
5846
  <script data-pa="skin-css-loader">
5828
5847
  (function() {
5829
5848
  'use strict';
5830
- var REMOTE_URL = "${remoteUrl}";
5849
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5831
5850
  var LOCAL_PATH = "${localPath}";
5832
5851
  var TIMEOUT = ${timeout};
5833
5852
 
@@ -5901,9 +5920,8 @@ function generateSkinCssLoader(options) {
5901
5920
  }
5902
5921
  function buildSkinCssOptions(config) {
5903
5922
  if (!config.skin) return null;
5904
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5905
5923
  return {
5906
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css?v=${cacheBuster}`,
5924
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css`,
5907
5925
  localPath: `skin/${config.skin}/style.css`,
5908
5926
  timeout: config.cssAfter.timeout
5909
5927
  // reuse cssAfter timeout
@@ -5917,7 +5935,7 @@ function generateSkinJsLoader(options) {
5917
5935
  <script data-pa="skin-js-loader">
5918
5936
  (function() {
5919
5937
  'use strict';
5920
- var REMOTE_URL = "${remoteUrl}";
5938
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5921
5939
  var LOCAL_PATH = "${localPath}";
5922
5940
  var TIMEOUT = ${timeout};
5923
5941
 
@@ -6003,9 +6021,8 @@ function generateSkinJsLoader(options) {
6003
6021
  }
6004
6022
  function buildSkinJsOptions(config) {
6005
6023
  if (!config.skin) return null;
6006
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
6007
6024
  return {
6008
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js?v=${cacheBuster}`,
6025
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js`,
6009
6026
  localPath: `skin/${config.skin}/script.js`,
6010
6027
  timeout: config.jsAfter.timeout
6011
6028
  // reuse jsAfter timeout