{"version":3,"sources":["jsdelivr-header.js","/npm/aemsync@5.2.4/src/api.js"],"names":[],"mappings":"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","file":"/npm/aemsync@5.2.4/src/api.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/aemsync@5.2.4/src/api.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import fs from 'node:fs'\nimport xmlToJson from 'xml-to-json-stream'\nimport * as log from './log.js'\nimport Package from './package.js'\nimport watch from './watch.js'\n\nconst ZIP_RETRY_DELAY = 3000\n\nexport const DEFAULTS = {\n  workingDir: '.',\n  exclude: [\n    // AEM root folders (we do not want to accidentally delete them).\n    '**/jcr_root/*',\n    // Special files.\n    '**/@(.*|target|[Tt]humbs.db|[Dd]esktop.ini)',\n    // Special folders.\n    '**/@(.*|target)/**'\n  ],\n  packmgrPath: '/crx/packmgr/service.jsp',\n  targets: ['http://admin:admin@localhost:4502'],\n  delay: 300,\n  checkIfUp: false,\n  postHandler: post,\n  verbose: false\n}\n\n// =============================================================================\n// Helper functions.\n// =============================================================================\n\nasync function post ({ archivePath, target, packmgrPath, checkIfUp }) {\n  const form = new FormData()\n  form.set('file', new File([fs.readFileSync(archivePath)], { type: 'text/plain' }))\n  form.set('force', 'true')\n  form.set('install', 'true')\n\n  // Check if AEM is up and running.\n  if (checkIfUp && !await check(target)) {\n    return { target, err: new Error('AEM not ready') }\n  }\n\n  const result = { target }\n  try {\n    const [url, headers] = extractBasicAuth(target + packmgrPath)\n    const res = await fetch(url, { method: 'POST', body: form, headers })\n\n    if (res.ok) {\n      const text = await res.text()\n\n      // Handle errors with AEM response.\n      try {\n        const obj = await parseXml(text)\n        result.log = obj.crx.response.data.log\n        const errorLines = [...new Set(result.log.split('\\n').filter(line => line.startsWith('E')))]\n\n        // Errors when installing selected nodes.\n        if (errorLines.length) {\n          result.err = new Error('Error installing nodes:\\n' + errorLines.join('\\n'))\n        } else if (obj.crx.response.status.code !== '200') {\n          // Error code in status.\n          result.err = new Error(obj.crx.response.status.textNode)\n        }\n      } catch (err) {\n        // Unexpected response format.\n        throw new Error('Unexpected response text format')\n      }\n    } else {\n      // Handle errors with the failed request.\n      result.err = new Error(res.statusText)\n    }\n  } catch (err) {\n    // Handle unexpected errors.\n    result.err = err\n  }\n\n  return result\n}\n\nasync function check (target) {\n  try {\n    const [url, headers] = extractBasicAuth(target)\n    const res = await fetch(url, { headers })\n    return res.status === 200\n  } catch (err) {\n    log.debug(err.message)\n    return false\n  }\n}\n\nfunction extractBasicAuth (url) {\n  const urlObj = new URL(url)\n  let headers\n\n  if (urlObj.username || urlObj.password) {\n    const credentials = `${decodeURIComponent(urlObj.username)}:${decodeURIComponent(urlObj.password)}`\n    headers = { Authorization: `Basic ${Buffer.from(credentials).toString('base64')}` }\n  }\n\n  urlObj.username = ''\n  urlObj.password = ''\n\n  return [urlObj.toString(), headers]\n}\n\nfunction parseXml (xml) {\n  return new Promise(resolve => {\n    xmlToJson().xmlToJson(xml, (err, json) => err ? resolve({}) : resolve(json))\n  })\n}\n\nasync function wait (ms) {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n\n// =============================================================================\n// Main API.\n// =============================================================================\n\nexport async function * push (args) {\n  const { payload, exclude, targets, packmgrPath, checkIfUp, postHandler, breakStuff } = { ...DEFAULTS, ...args }\n\n  // Get archive as many times as necessary.\n  let archive\n  while (true) {\n    const pack = new Package(exclude)\n    for (const localPath of payload) {\n      const item = pack.add(localPath)\n      item && log.info(item.exists ? '+' : '-', item.zipPath)\n    }\n\n    // Ability to break stuff when testing.\n    // This is to simulate changes between change reported and archive creation.\n    breakStuff && await breakStuff()\n\n    archive = pack.save()\n    if (archive.err) {\n      log.debug(archive.err)\n      await wait(ZIP_RETRY_DELAY)\n      log.info('Failed to create ZIP, retrying...')\n    } else {\n      break\n    }\n  }\n\n  // Archive may not be created if items added are on the exclude path.\n  if (archive.path) {\n    for (const target of targets) {\n      const response = await postHandler({ archivePath: archive.path, target, packmgrPath, checkIfUp })\n      log.info(log.gray(`${response.target} > ${response.err ? response.err.message : 'OK'}`))\n      yield { archive, response }\n    }\n  } else {\n    yield {}\n  }\n}\n\nexport async function * aemsync (args) {\n  const { workingDir, delay } = { ...DEFAULTS, ...args }\n  for await (const payload of watch(workingDir, { delay })) {\n    for await (const result of push({ ...args, payload })) {\n      yield result\n    }\n  }\n}\n"]}