@prismicio/cli 0.0.3-beta.11 → 0.0.3-beta.13

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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { r } from "./cli-DhqlE1U5.js";
1
+ import { r } from "./cli-DDs8_xoz.js";
2
2
  export {
3
3
  r as run
4
4
  };
@@ -1,4 +1,4 @@
1
- import { F as FormData, a as File2 } from "./cli-DhqlE1U5.js";
1
+ import { F as FormData, a as File2 } from "./cli-DDs8_xoz.js";
2
2
  let s = 0;
3
3
  const S = {
4
4
  START_BOUNDARY: s++,
@@ -351,4 +351,4 @@ async function toFormData(Body, ct) {
351
351
  export {
352
352
  toFormData
353
353
  };
354
- //# sourceMappingURL=multipart-parser-Ddo0in9P.js.map
354
+ //# sourceMappingURL=multipart-parser-BFd74IrK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multipart-parser-Ddo0in9P.js","sources":["../../manager/dist/_node_modules/node-fetch/src/utils/multipart-parser.js"],"sourcesContent":["import \"../../../fetch-blob/from.js\";\nimport { FormData } from \"../../../formdata-polyfill/esm.min.js\";\nimport { File } from \"../../../fetch-blob/file.js\";\nlet s = 0;\nconst S = {\n START_BOUNDARY: s++,\n HEADER_FIELD_START: s++,\n HEADER_FIELD: s++,\n HEADER_VALUE_START: s++,\n HEADER_VALUE: s++,\n HEADER_VALUE_ALMOST_DONE: s++,\n HEADERS_ALMOST_DONE: s++,\n PART_DATA_START: s++,\n PART_DATA: s++,\n END: s++\n};\nlet f = 1;\nconst F = {\n PART_BOUNDARY: f,\n LAST_BOUNDARY: f *= 2\n};\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\nconst lower = (c) => c | 32;\nconst noop = () => {\n};\nclass MultipartParser {\n /**\n * @param {string} boundary\n */\n constructor(boundary) {\n this.index = 0;\n this.flags = 0;\n this.onHeaderEnd = noop;\n this.onHeaderField = noop;\n this.onHeadersEnd = noop;\n this.onHeaderValue = noop;\n this.onPartBegin = noop;\n this.onPartData = noop;\n this.onPartEnd = noop;\n this.boundaryChars = {};\n boundary = \"\\r\\n--\" + boundary;\n const ui8a = new Uint8Array(boundary.length);\n for (let i = 0; i < boundary.length; i++) {\n ui8a[i] = boundary.charCodeAt(i);\n this.boundaryChars[ui8a[i]] = true;\n }\n this.boundary = ui8a;\n this.lookbehind = new Uint8Array(this.boundary.length + 8);\n this.state = S.START_BOUNDARY;\n }\n /**\n * @param {Uint8Array} data\n */\n write(data) {\n let i = 0;\n const length_ = data.length;\n let previousIndex = this.index;\n let { lookbehind, boundary, boundaryChars, index, state, flags } = this;\n const boundaryLength = this.boundary.length;\n const boundaryEnd = boundaryLength - 1;\n const bufferLength = data.length;\n let c;\n let cl;\n const mark = (name) => {\n this[name + \"Mark\"] = i;\n };\n const clear = (name) => {\n delete this[name + \"Mark\"];\n };\n const callback = (callbackSymbol, start, end, ui8a) => {\n if (start === void 0 || start !== end) {\n this[callbackSymbol](ui8a && ui8a.subarray(start, end));\n }\n };\n const dataCallback = (name, clear2) => {\n const markSymbol = name + \"Mark\";\n if (!(markSymbol in this)) {\n return;\n }\n if (clear2) {\n callback(name, this[markSymbol], i, data);\n delete this[markSymbol];\n } else {\n callback(name, this[markSymbol], data.length, data);\n this[markSymbol] = 0;\n }\n };\n for (i = 0; i < length_; i++) {\n c = data[i];\n switch (state) {\n case S.START_BOUNDARY:\n if (index === boundary.length - 2) {\n if (c === HYPHEN) {\n flags |= F.LAST_BOUNDARY;\n } else if (c !== CR) {\n return;\n }\n index++;\n break;\n } else if (index - 1 === boundary.length - 2) {\n if (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n state = S.END;\n flags = 0;\n } else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n index = 0;\n callback(\"onPartBegin\");\n state = S.HEADER_FIELD_START;\n } else {\n return;\n }\n break;\n }\n if (c !== boundary[index + 2]) {\n index = -2;\n }\n if (c === boundary[index + 2]) {\n index++;\n }\n break;\n case S.HEADER_FIELD_START:\n state = S.HEADER_FIELD;\n mark(\"onHeaderField\");\n index = 0;\n // falls through\n case S.HEADER_FIELD:\n if (c === CR) {\n clear(\"onHeaderField\");\n state = S.HEADERS_ALMOST_DONE;\n break;\n }\n index++;\n if (c === HYPHEN) {\n break;\n }\n if (c === COLON) {\n if (index === 1) {\n return;\n }\n dataCallback(\"onHeaderField\", true);\n state = S.HEADER_VALUE_START;\n break;\n }\n cl = lower(c);\n if (cl < A || cl > Z) {\n return;\n }\n break;\n case S.HEADER_VALUE_START:\n if (c === SPACE) {\n break;\n }\n mark(\"onHeaderValue\");\n state = S.HEADER_VALUE;\n // falls through\n case S.HEADER_VALUE:\n if (c === CR) {\n dataCallback(\"onHeaderValue\", true);\n callback(\"onHeaderEnd\");\n state = S.HEADER_VALUE_ALMOST_DONE;\n }\n break;\n case S.HEADER_VALUE_ALMOST_DONE:\n if (c !== LF) {\n return;\n }\n state = S.HEADER_FIELD_START;\n break;\n case S.HEADERS_ALMOST_DONE:\n if (c !== LF) {\n return;\n }\n callback(\"onHeadersEnd\");\n state = S.PART_DATA_START;\n break;\n case S.PART_DATA_START:\n state = S.PART_DATA;\n mark(\"onPartData\");\n // falls through\n case S.PART_DATA:\n previousIndex = index;\n if (index === 0) {\n i += boundaryEnd;\n while (i < bufferLength && !(data[i] in boundaryChars)) {\n i += boundaryLength;\n }\n i -= boundaryEnd;\n c = data[i];\n }\n if (index < boundary.length) {\n if (boundary[index] === c) {\n if (index === 0) {\n dataCallback(\"onPartData\", true);\n }\n index++;\n } else {\n index = 0;\n }\n } else if (index === boundary.length) {\n index++;\n if (c === CR) {\n flags |= F.PART_BOUNDARY;\n } else if (c === HYPHEN) {\n flags |= F.LAST_BOUNDARY;\n } else {\n index = 0;\n }\n } else if (index - 1 === boundary.length) {\n if (flags & F.PART_BOUNDARY) {\n index = 0;\n if (c === LF) {\n flags &= ~F.PART_BOUNDARY;\n callback(\"onPartEnd\");\n callback(\"onPartBegin\");\n state = S.HEADER_FIELD_START;\n break;\n }\n } else if (flags & F.LAST_BOUNDARY) {\n if (c === HYPHEN) {\n callback(\"onPartEnd\");\n state = S.END;\n flags = 0;\n } else {\n index = 0;\n }\n } else {\n index = 0;\n }\n }\n if (index > 0) {\n lookbehind[index - 1] = c;\n } else if (previousIndex > 0) {\n const _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);\n callback(\"onPartData\", 0, previousIndex, _lookbehind);\n previousIndex = 0;\n mark(\"onPartData\");\n i--;\n }\n break;\n case S.END:\n break;\n default:\n throw new Error(`Unexpected state entered: ${state}`);\n }\n }\n dataCallback(\"onHeaderField\");\n dataCallback(\"onHeaderValue\");\n dataCallback(\"onPartData\");\n this.index = index;\n this.state = state;\n this.flags = flags;\n }\n end() {\n if (this.state === S.HEADER_FIELD_START && this.index === 0 || this.state === S.PART_DATA && this.index === this.boundary.length) {\n this.onPartEnd();\n } else if (this.state !== S.END) {\n throw new Error(\"MultipartParser.end(): stream ended unexpectedly\");\n }\n }\n}\nfunction _fileName(headerValue) {\n const m = headerValue.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);\n if (!m) {\n return;\n }\n const match = m[2] || m[3] || \"\";\n let filename = match.slice(match.lastIndexOf(\"\\\\\") + 1);\n filename = filename.replace(/%22/g, '\"');\n filename = filename.replace(/&#(\\d{4});/g, (m2, code) => {\n return String.fromCharCode(code);\n });\n return filename;\n}\nasync function toFormData(Body, ct) {\n if (!/multipart/i.test(ct)) {\n throw new TypeError(\"Failed to fetch\");\n }\n const m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n if (!m) {\n throw new TypeError(\"no or bad content-type header, no multipart boundary\");\n }\n const parser = new MultipartParser(m[1] || m[2]);\n let headerField;\n let headerValue;\n let entryValue;\n let entryName;\n let contentType;\n let filename;\n const entryChunks = [];\n const formData = new FormData();\n const onPartData = (ui8a) => {\n entryValue += decoder.decode(ui8a, { stream: true });\n };\n const appendToFile = (ui8a) => {\n entryChunks.push(ui8a);\n };\n const appendFileToFormData = () => {\n const file = new File(entryChunks, filename, { type: contentType });\n formData.append(entryName, file);\n };\n const appendEntryToFormData = () => {\n formData.append(entryName, entryValue);\n };\n const decoder = new TextDecoder(\"utf-8\");\n decoder.decode();\n parser.onPartBegin = function() {\n parser.onPartData = onPartData;\n parser.onPartEnd = appendEntryToFormData;\n headerField = \"\";\n headerValue = \"\";\n entryValue = \"\";\n entryName = \"\";\n contentType = \"\";\n filename = null;\n entryChunks.length = 0;\n };\n parser.onHeaderField = function(ui8a) {\n headerField += decoder.decode(ui8a, { stream: true });\n };\n parser.onHeaderValue = function(ui8a) {\n headerValue += decoder.decode(ui8a, { stream: true });\n };\n parser.onHeaderEnd = function() {\n headerValue += decoder.decode();\n headerField = headerField.toLowerCase();\n if (headerField === \"content-disposition\") {\n const m2 = headerValue.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);\n if (m2) {\n entryName = m2[2] || m2[3] || \"\";\n }\n filename = _fileName(headerValue);\n if (filename) {\n parser.onPartData = appendToFile;\n parser.onPartEnd = appendFileToFormData;\n }\n } else if (headerField === \"content-type\") {\n contentType = headerValue;\n }\n headerValue = \"\";\n headerField = \"\";\n };\n for await (const chunk of Body) {\n parser.write(chunk);\n }\n parser.end();\n return formData;\n}\nexport {\n toFormData\n};\n//# sourceMappingURL=multipart-parser.js.map\n"],"names":["File"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"multipart-parser-BFd74IrK.js","sources":["../../manager/dist/_node_modules/node-fetch/src/utils/multipart-parser.js"],"sourcesContent":["import \"../../../fetch-blob/from.js\";\nimport { FormData } from \"../../../formdata-polyfill/esm.min.js\";\nimport { File } from \"../../../fetch-blob/file.js\";\nlet s = 0;\nconst S = {\n START_BOUNDARY: s++,\n HEADER_FIELD_START: s++,\n HEADER_FIELD: s++,\n HEADER_VALUE_START: s++,\n HEADER_VALUE: s++,\n HEADER_VALUE_ALMOST_DONE: s++,\n HEADERS_ALMOST_DONE: s++,\n PART_DATA_START: s++,\n PART_DATA: s++,\n END: s++\n};\nlet f = 1;\nconst F = {\n PART_BOUNDARY: f,\n LAST_BOUNDARY: f *= 2\n};\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\nconst lower = (c) => c | 32;\nconst noop = () => {\n};\nclass MultipartParser {\n /**\n * @param {string} boundary\n */\n constructor(boundary) {\n this.index = 0;\n this.flags = 0;\n this.onHeaderEnd = noop;\n this.onHeaderField = noop;\n this.onHeadersEnd = noop;\n this.onHeaderValue = noop;\n this.onPartBegin = noop;\n this.onPartData = noop;\n this.onPartEnd = noop;\n this.boundaryChars = {};\n boundary = \"\\r\\n--\" + boundary;\n const ui8a = new Uint8Array(boundary.length);\n for (let i = 0; i < boundary.length; i++) {\n ui8a[i] = boundary.charCodeAt(i);\n this.boundaryChars[ui8a[i]] = true;\n }\n this.boundary = ui8a;\n this.lookbehind = new Uint8Array(this.boundary.length + 8);\n this.state = S.START_BOUNDARY;\n }\n /**\n * @param {Uint8Array} data\n */\n write(data) {\n let i = 0;\n const length_ = data.length;\n let previousIndex = this.index;\n let { lookbehind, boundary, boundaryChars, index, state, flags } = this;\n const boundaryLength = this.boundary.length;\n const boundaryEnd = boundaryLength - 1;\n const bufferLength = data.length;\n let c;\n let cl;\n const mark = (name) => {\n this[name + \"Mark\"] = i;\n };\n const clear = (name) => {\n delete this[name + \"Mark\"];\n };\n const callback = (callbackSymbol, start, end, ui8a) => {\n if (start === void 0 || start !== end) {\n this[callbackSymbol](ui8a && ui8a.subarray(start, end));\n }\n };\n const dataCallback = (name, clear2) => {\n const markSymbol = name + \"Mark\";\n if (!(markSymbol in this)) {\n return;\n }\n if (clear2) {\n callback(name, this[markSymbol], i, data);\n delete this[markSymbol];\n } else {\n callback(name, this[markSymbol], data.length, data);\n this[markSymbol] = 0;\n }\n };\n for (i = 0; i < length_; i++) {\n c = data[i];\n switch (state) {\n case S.START_BOUNDARY:\n if (index === boundary.length - 2) {\n if (c === HYPHEN) {\n flags |= F.LAST_BOUNDARY;\n } else if (c !== CR) {\n return;\n }\n index++;\n break;\n } else if (index - 1 === boundary.length - 2) {\n if (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n state = S.END;\n flags = 0;\n } else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n index = 0;\n callback(\"onPartBegin\");\n state = S.HEADER_FIELD_START;\n } else {\n return;\n }\n break;\n }\n if (c !== boundary[index + 2]) {\n index = -2;\n }\n if (c === boundary[index + 2]) {\n index++;\n }\n break;\n case S.HEADER_FIELD_START:\n state = S.HEADER_FIELD;\n mark(\"onHeaderField\");\n index = 0;\n // falls through\n case S.HEADER_FIELD:\n if (c === CR) {\n clear(\"onHeaderField\");\n state = S.HEADERS_ALMOST_DONE;\n break;\n }\n index++;\n if (c === HYPHEN) {\n break;\n }\n if (c === COLON) {\n if (index === 1) {\n return;\n }\n dataCallback(\"onHeaderField\", true);\n state = S.HEADER_VALUE_START;\n break;\n }\n cl = lower(c);\n if (cl < A || cl > Z) {\n return;\n }\n break;\n case S.HEADER_VALUE_START:\n if (c === SPACE) {\n break;\n }\n mark(\"onHeaderValue\");\n state = S.HEADER_VALUE;\n // falls through\n case S.HEADER_VALUE:\n if (c === CR) {\n dataCallback(\"onHeaderValue\", true);\n callback(\"onHeaderEnd\");\n state = S.HEADER_VALUE_ALMOST_DONE;\n }\n break;\n case S.HEADER_VALUE_ALMOST_DONE:\n if (c !== LF) {\n return;\n }\n state = S.HEADER_FIELD_START;\n break;\n case S.HEADERS_ALMOST_DONE:\n if (c !== LF) {\n return;\n }\n callback(\"onHeadersEnd\");\n state = S.PART_DATA_START;\n break;\n case S.PART_DATA_START:\n state = S.PART_DATA;\n mark(\"onPartData\");\n // falls through\n case S.PART_DATA:\n previousIndex = index;\n if (index === 0) {\n i += boundaryEnd;\n while (i < bufferLength && !(data[i] in boundaryChars)) {\n i += boundaryLength;\n }\n i -= boundaryEnd;\n c = data[i];\n }\n if (index < boundary.length) {\n if (boundary[index] === c) {\n if (index === 0) {\n dataCallback(\"onPartData\", true);\n }\n index++;\n } else {\n index = 0;\n }\n } else if (index === boundary.length) {\n index++;\n if (c === CR) {\n flags |= F.PART_BOUNDARY;\n } else if (c === HYPHEN) {\n flags |= F.LAST_BOUNDARY;\n } else {\n index = 0;\n }\n } else if (index - 1 === boundary.length) {\n if (flags & F.PART_BOUNDARY) {\n index = 0;\n if (c === LF) {\n flags &= ~F.PART_BOUNDARY;\n callback(\"onPartEnd\");\n callback(\"onPartBegin\");\n state = S.HEADER_FIELD_START;\n break;\n }\n } else if (flags & F.LAST_BOUNDARY) {\n if (c === HYPHEN) {\n callback(\"onPartEnd\");\n state = S.END;\n flags = 0;\n } else {\n index = 0;\n }\n } else {\n index = 0;\n }\n }\n if (index > 0) {\n lookbehind[index - 1] = c;\n } else if (previousIndex > 0) {\n const _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);\n callback(\"onPartData\", 0, previousIndex, _lookbehind);\n previousIndex = 0;\n mark(\"onPartData\");\n i--;\n }\n break;\n case S.END:\n break;\n default:\n throw new Error(`Unexpected state entered: ${state}`);\n }\n }\n dataCallback(\"onHeaderField\");\n dataCallback(\"onHeaderValue\");\n dataCallback(\"onPartData\");\n this.index = index;\n this.state = state;\n this.flags = flags;\n }\n end() {\n if (this.state === S.HEADER_FIELD_START && this.index === 0 || this.state === S.PART_DATA && this.index === this.boundary.length) {\n this.onPartEnd();\n } else if (this.state !== S.END) {\n throw new Error(\"MultipartParser.end(): stream ended unexpectedly\");\n }\n }\n}\nfunction _fileName(headerValue) {\n const m = headerValue.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);\n if (!m) {\n return;\n }\n const match = m[2] || m[3] || \"\";\n let filename = match.slice(match.lastIndexOf(\"\\\\\") + 1);\n filename = filename.replace(/%22/g, '\"');\n filename = filename.replace(/&#(\\d{4});/g, (m2, code) => {\n return String.fromCharCode(code);\n });\n return filename;\n}\nasync function toFormData(Body, ct) {\n if (!/multipart/i.test(ct)) {\n throw new TypeError(\"Failed to fetch\");\n }\n const m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n if (!m) {\n throw new TypeError(\"no or bad content-type header, no multipart boundary\");\n }\n const parser = new MultipartParser(m[1] || m[2]);\n let headerField;\n let headerValue;\n let entryValue;\n let entryName;\n let contentType;\n let filename;\n const entryChunks = [];\n const formData = new FormData();\n const onPartData = (ui8a) => {\n entryValue += decoder.decode(ui8a, { stream: true });\n };\n const appendToFile = (ui8a) => {\n entryChunks.push(ui8a);\n };\n const appendFileToFormData = () => {\n const file = new File(entryChunks, filename, { type: contentType });\n formData.append(entryName, file);\n };\n const appendEntryToFormData = () => {\n formData.append(entryName, entryValue);\n };\n const decoder = new TextDecoder(\"utf-8\");\n decoder.decode();\n parser.onPartBegin = function() {\n parser.onPartData = onPartData;\n parser.onPartEnd = appendEntryToFormData;\n headerField = \"\";\n headerValue = \"\";\n entryValue = \"\";\n entryName = \"\";\n contentType = \"\";\n filename = null;\n entryChunks.length = 0;\n };\n parser.onHeaderField = function(ui8a) {\n headerField += decoder.decode(ui8a, { stream: true });\n };\n parser.onHeaderValue = function(ui8a) {\n headerValue += decoder.decode(ui8a, { stream: true });\n };\n parser.onHeaderEnd = function() {\n headerValue += decoder.decode();\n headerField = headerField.toLowerCase();\n if (headerField === \"content-disposition\") {\n const m2 = headerValue.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);\n if (m2) {\n entryName = m2[2] || m2[3] || \"\";\n }\n filename = _fileName(headerValue);\n if (filename) {\n parser.onPartData = appendToFile;\n parser.onPartEnd = appendFileToFormData;\n }\n } else if (headerField === \"content-type\") {\n contentType = headerValue;\n }\n headerValue = \"\";\n headerField = \"\";\n };\n for await (const chunk of Body) {\n parser.write(chunk);\n }\n parser.end();\n return formData;\n}\nexport {\n toFormData\n};\n//# sourceMappingURL=multipart-parser.js.map\n"],"names":["File"],"mappings":";AAGA,IAAI,IAAI;AACR,MAAM,IAAI;AAAA,EACR,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,KAAK;AACP;AACA,IAAI,IAAI;AACR,MAAM,IAAI;AAAA,EACR,eAAe;AAAA,EACf,eAAe,KAAK;AACtB;AACA,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,QAAQ;AACd,MAAM,IAAI;AACV,MAAM,IAAI;AACV,MAAM,QAAQ,CAAC,MAAM,IAAI;AACzB,MAAM,OAAO,MAAM;AACnB;AACA,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIpB,YAAY,UAAU;AACpB,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,gBAAgB,CAAA;AACrB,eAAW,WAAW;AACtB,UAAM,OAAO,IAAI,WAAW,SAAS,MAAM;AAC3C,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,WAAK,CAAC,IAAI,SAAS,WAAW,CAAC;AAC/B,WAAK,cAAc,KAAK,CAAC,CAAC,IAAI;AAAA,IAChC;AACA,SAAK,WAAW;AAChB,SAAK,aAAa,IAAI,WAAW,KAAK,SAAS,SAAS,CAAC;AACzD,SAAK,QAAQ,EAAE;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,MAAM;AACV,QAAI,IAAI;AACR,UAAM,UAAU,KAAK;AACrB,QAAI,gBAAgB,KAAK;AACzB,QAAI,EAAE,YAAY,UAAU,eAAe,OAAO,OAAO,MAAK,IAAK;AACnE,UAAM,iBAAiB,KAAK,SAAS;AACrC,UAAM,cAAc,iBAAiB;AACrC,UAAM,eAAe,KAAK;AAC1B,QAAI;AACJ,QAAI;AACJ,UAAM,OAAO,CAAC,SAAS;AACrB,WAAK,OAAO,MAAM,IAAI;AAAA,IACxB;AACA,UAAM,QAAQ,CAAC,SAAS;AACtB,aAAO,KAAK,OAAO,MAAM;AAAA,IAC3B;AACA,UAAM,WAAW,CAAC,gBAAgB,OAAO,KAAK,SAAS;AACrD,UAAI,UAAU,UAAU,UAAU,KAAK;AACrC,aAAK,cAAc,EAAE,QAAQ,KAAK,SAAS,OAAO,GAAG,CAAC;AAAA,MACxD;AAAA,IACF;AACA,UAAM,eAAe,CAAC,MAAM,WAAW;AACrC,YAAM,aAAa,OAAO;AAC1B,UAAI,EAAE,cAAc,OAAO;AACzB;AAAA,MACF;AACA,UAAI,QAAQ;AACV,iBAAS,MAAM,KAAK,UAAU,GAAG,GAAG,IAAI;AACxC,eAAO,KAAK,UAAU;AAAA,MACxB,OAAO;AACL,iBAAS,MAAM,KAAK,UAAU,GAAG,KAAK,QAAQ,IAAI;AAClD,aAAK,UAAU,IAAI;AAAA,MACrB;AAAA,IACF;AACA,SAAK,IAAI,GAAG,IAAI,SAAS,KAAK;AAC5B,UAAI,KAAK,CAAC;AACV,cAAQ,OAAK;AAAA,QACX,KAAK,EAAE;AACL,cAAI,UAAU,SAAS,SAAS,GAAG;AACjC,gBAAI,MAAM,QAAQ;AAChB,uBAAS,EAAE;AAAA,YACb,WAAW,MAAM,IAAI;AACnB;AAAA,YACF;AACA;AACA;AAAA,UACF,WAAW,QAAQ,MAAM,SAAS,SAAS,GAAG;AAC5C,gBAAI,QAAQ,EAAE,iBAAiB,MAAM,QAAQ;AAC3C,sBAAQ,EAAE;AACV,sBAAQ;AAAA,YACV,WAAW,EAAE,QAAQ,EAAE,kBAAkB,MAAM,IAAI;AACjD,sBAAQ;AACR,uBAAS,aAAa;AACtB,sBAAQ,EAAE;AAAA,YACZ,OAAO;AACL;AAAA,YACF;AACA;AAAA,UACF;AACA,cAAI,MAAM,SAAS,QAAQ,CAAC,GAAG;AAC7B,oBAAQ;AAAA,UACV;AACA,cAAI,MAAM,SAAS,QAAQ,CAAC,GAAG;AAC7B;AAAA,UACF;AACA;AAAA,QACF,KAAK,EAAE;AACL,kBAAQ,EAAE;AACV,eAAK,eAAe;AACpB,kBAAQ;AAAA;AAAA,QAEV,KAAK,EAAE;AACL,cAAI,MAAM,IAAI;AACZ,kBAAM,eAAe;AACrB,oBAAQ,EAAE;AACV;AAAA,UACF;AACA;AACA,cAAI,MAAM,QAAQ;AAChB;AAAA,UACF;AACA,cAAI,MAAM,OAAO;AACf,gBAAI,UAAU,GAAG;AACf;AAAA,YACF;AACA,yBAAa,iBAAiB,IAAI;AAClC,oBAAQ,EAAE;AACV;AAAA,UACF;AACA,eAAK,MAAM,CAAC;AACZ,cAAI,KAAK,KAAK,KAAK,GAAG;AACpB;AAAA,UACF;AACA;AAAA,QACF,KAAK,EAAE;AACL,cAAI,MAAM,OAAO;AACf;AAAA,UACF;AACA,eAAK,eAAe;AACpB,kBAAQ,EAAE;AAAA;AAAA,QAEZ,KAAK,EAAE;AACL,cAAI,MAAM,IAAI;AACZ,yBAAa,iBAAiB,IAAI;AAClC,qBAAS,aAAa;AACtB,oBAAQ,EAAE;AAAA,UACZ;AACA;AAAA,QACF,KAAK,EAAE;AACL,cAAI,MAAM,IAAI;AACZ;AAAA,UACF;AACA,kBAAQ,EAAE;AACV;AAAA,QACF,KAAK,EAAE;AACL,cAAI,MAAM,IAAI;AACZ;AAAA,UACF;AACA,mBAAS,cAAc;AACvB,kBAAQ,EAAE;AACV;AAAA,QACF,KAAK,EAAE;AACL,kBAAQ,EAAE;AACV,eAAK,YAAY;AAAA;AAAA,QAEnB,KAAK,EAAE;AACL,0BAAgB;AAChB,cAAI,UAAU,GAAG;AACf,iBAAK;AACL,mBAAO,IAAI,gBAAgB,EAAE,KAAK,CAAC,KAAK,gBAAgB;AACtD,mBAAK;AAAA,YACP;AACA,iBAAK;AACL,gBAAI,KAAK,CAAC;AAAA,UACZ;AACA,cAAI,QAAQ,SAAS,QAAQ;AAC3B,gBAAI,SAAS,KAAK,MAAM,GAAG;AACzB,kBAAI,UAAU,GAAG;AACf,6BAAa,cAAc,IAAI;AAAA,cACjC;AACA;AAAA,YACF,OAAO;AACL,sBAAQ;AAAA,YACV;AAAA,UACF,WAAW,UAAU,SAAS,QAAQ;AACpC;AACA,gBAAI,MAAM,IAAI;AACZ,uBAAS,EAAE;AAAA,YACb,WAAW,MAAM,QAAQ;AACvB,uBAAS,EAAE;AAAA,YACb,OAAO;AACL,sBAAQ;AAAA,YACV;AAAA,UACF,WAAW,QAAQ,MAAM,SAAS,QAAQ;AACxC,gBAAI,QAAQ,EAAE,eAAe;AAC3B,sBAAQ;AACR,kBAAI,MAAM,IAAI;AACZ,yBAAS,CAAC,EAAE;AACZ,yBAAS,WAAW;AACpB,yBAAS,aAAa;AACtB,wBAAQ,EAAE;AACV;AAAA,cACF;AAAA,YACF,WAAW,QAAQ,EAAE,eAAe;AAClC,kBAAI,MAAM,QAAQ;AAChB,yBAAS,WAAW;AACpB,wBAAQ,EAAE;AACV,wBAAQ;AAAA,cACV,OAAO;AACL,wBAAQ;AAAA,cACV;AAAA,YACF,OAAO;AACL,sBAAQ;AAAA,YACV;AAAA,UACF;AACA,cAAI,QAAQ,GAAG;AACb,uBAAW,QAAQ,CAAC,IAAI;AAAA,UAC1B,WAAW,gBAAgB,GAAG;AAC5B,kBAAM,cAAc,IAAI,WAAW,WAAW,QAAQ,WAAW,YAAY,WAAW,UAAU;AAClG,qBAAS,cAAc,GAAG,eAAe,WAAW;AACpD,4BAAgB;AAChB,iBAAK,YAAY;AACjB;AAAA,UACF;AACA;AAAA,QACF,KAAK,EAAE;AACL;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,MAC9D;AAAA,IACI;AACA,iBAAa,eAAe;AAC5B,iBAAa,eAAe;AAC5B,iBAAa,YAAY;AACzB,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EACA,MAAM;AACJ,QAAI,KAAK,UAAU,EAAE,sBAAsB,KAAK,UAAU,KAAK,KAAK,UAAU,EAAE,aAAa,KAAK,UAAU,KAAK,SAAS,QAAQ;AAChI,WAAK,UAAS;AAAA,IAChB,WAAW,KAAK,UAAU,EAAE,KAAK;AAC/B,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAAA,EACF;AACF;AACA,SAAS,UAAU,aAAa;AAC9B,QAAM,IAAI,YAAY,MAAM,4DAA4D;AACxF,MAAI,CAAC,GAAG;AACN;AAAA,EACF;AACA,QAAM,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK;AAC9B,MAAI,WAAW,MAAM,MAAM,MAAM,YAAY,IAAI,IAAI,CAAC;AACtD,aAAW,SAAS,QAAQ,QAAQ,GAAG;AACvC,aAAW,SAAS,QAAQ,eAAe,CAAC,IAAI,SAAS;AACvD,WAAO,OAAO,aAAa,IAAI;AAAA,EACjC,CAAC;AACD,SAAO;AACT;AACA,eAAe,WAAW,MAAM,IAAI;AAClC,MAAI,CAAC,aAAa,KAAK,EAAE,GAAG;AAC1B,UAAM,IAAI,UAAU,iBAAiB;AAAA,EACvC;AACA,QAAM,IAAI,GAAG,MAAM,iCAAiC;AACpD,MAAI,CAAC,GAAG;AACN,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AACA,QAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/C,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,QAAM,cAAc,CAAA;AACpB,QAAM,WAAW,IAAI,SAAQ;AAC7B,QAAM,aAAa,CAAC,SAAS;AAC3B,kBAAc,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM;AAAA,EACrD;AACA,QAAM,eAAe,CAAC,SAAS;AAC7B,gBAAY,KAAK,IAAI;AAAA,EACvB;AACA,QAAM,uBAAuB,MAAM;AACjC,UAAM,OAAO,IAAIA,MAAK,aAAa,UAAU,EAAE,MAAM,aAAa;AAClE,aAAS,OAAO,WAAW,IAAI;AAAA,EACjC;AACA,QAAM,wBAAwB,MAAM;AAClC,aAAS,OAAO,WAAW,UAAU;AAAA,EACvC;AACA,QAAM,UAAU,IAAI,YAAY,OAAO;AACvC,UAAQ,OAAM;AACd,SAAO,cAAc,WAAW;AAC9B,WAAO,aAAa;AACpB,WAAO,YAAY;AACnB,kBAAc;AACd,kBAAc;AACd,iBAAa;AACb,gBAAY;AACZ,kBAAc;AACd,eAAW;AACX,gBAAY,SAAS;AAAA,EACvB;AACA,SAAO,gBAAgB,SAAS,MAAM;AACpC,mBAAe,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtD;AACA,SAAO,gBAAgB,SAAS,MAAM;AACpC,mBAAe,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtD;AACA,SAAO,cAAc,WAAW;AAC9B,mBAAe,QAAQ,OAAM;AAC7B,kBAAc,YAAY,YAAW;AACrC,QAAI,gBAAgB,uBAAuB;AACzC,YAAM,KAAK,YAAY,MAAM,mDAAmD;AAChF,UAAI,IAAI;AACN,oBAAY,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK;AAAA,MAChC;AACA,iBAAW,UAAU,WAAW;AAChC,UAAI,UAAU;AACZ,eAAO,aAAa;AACpB,eAAO,YAAY;AAAA,MACrB;AAAA,IACF,WAAW,gBAAgB,gBAAgB;AACzC,oBAAc;AAAA,IAChB;AACA,kBAAc;AACd,kBAAc;AAAA,EAChB;AACA,mBAAiB,SAAS,MAAM;AAC9B,WAAO,MAAM,KAAK;AAAA,EACpB;AACA,SAAO,IAAG;AACV,SAAO;AACT;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismicio/cli",
3
- "version": "0.0.3-beta.11",
3
+ "version": "0.0.3-beta.13",
4
4
  "description": "Prismic CLI",
5
5
  "keywords": [
6
6
  "typescript",
@@ -54,11 +54,10 @@
54
54
  },
55
55
  "devDependencies": {
56
56
  "@eslint/js": "9.39.1",
57
- "@prismicio/adapter-next": "0.0.3-beta.13",
58
- "@prismicio/adapter-nuxt": "0.0.3-beta.13",
59
- "@prismicio/adapter-nuxt2": "0.0.3-beta.12",
60
- "@prismicio/adapter-sveltekit": "0.0.3-beta.11",
61
- "@prismicio/manager": "0.0.3-beta.11",
57
+ "@prismicio/adapter-next": "0.0.3-beta.15",
58
+ "@prismicio/adapter-nuxt": "0.0.3-beta.15",
59
+ "@prismicio/adapter-sveltekit": "0.0.3-beta.13",
60
+ "@prismicio/manager": "0.0.3-beta.13",
62
61
  "@sentry/node": "10.28.0",
63
62
  "@trivago/prettier-plugin-sort-imports": "6.0.0",
64
63
  "@types/semver": "7.7.1",
package/src/cli.ts CHANGED
@@ -23,9 +23,11 @@ VERSION
23
23
  USAGE
24
24
  $ npx prismic@latest init --repository <repository-id>
25
25
  $ npx prismic@latest sync
26
+ $ npx prismic@latest sync --watch
26
27
 
27
28
  OPTIONS
28
29
  --repository, -r Specify a Prismic repository to use when initializing a project
30
+ --watch, -w Watch for changes and sync continuously (polls every 5s)
29
31
 
30
32
  --help, -h Display CLI help
31
33
  --version, -v Display CLI version
@@ -37,6 +39,11 @@ OPTIONS
37
39
  type: "string",
38
40
  shortFlag: "r",
39
41
  },
42
+ watch: {
43
+ type: "boolean",
44
+ shortFlag: "w",
45
+ default: false,
46
+ },
40
47
  help: {
41
48
  type: "boolean",
42
49
  shortFlag: "h",
@@ -68,6 +75,7 @@ export const CLIArgs = z.discriminatedUnion("commandType", [
68
75
  commandType: z.literal("sync"),
69
76
  help: z.boolean().optional(),
70
77
  version: z.boolean().optional(),
78
+ watch: z.boolean().optional(),
71
79
  }),
72
80
  ]);
73
81
 
@@ -156,7 +164,7 @@ export async function run(): Promise<void> {
156
164
  }
157
165
 
158
166
  if (commandType === "sync") {
159
- await sync({ manager });
167
+ await sync({ manager, watch: cliArgs.data.watch });
160
168
  process.exit(0);
161
169
  }
162
170
 
@@ -7,14 +7,16 @@ import { detectProjectContext, detectProjectState } from "../core/project";
7
7
  import { validateRepository } from "../core/repository";
8
8
  import { saveSlices } from "../core/slices";
9
9
  import { checkCLIVersion } from "../core/version";
10
+ import { watchForChanges } from "../core/watch";
10
11
  import { displaySuccess } from "../utils/output";
11
12
 
12
13
  type SyncArgs = {
13
14
  manager: PrismicManager;
15
+ watch?: boolean;
14
16
  };
15
17
 
16
18
  export async function sync(args: SyncArgs): Promise<void> {
17
- const { manager } = args;
19
+ const { manager, watch = false } = args;
18
20
 
19
21
  // Authentication - Also updates Sentry context
20
22
  await login(manager);
@@ -37,22 +39,26 @@ export async function sync(args: SyncArgs): Promise<void> {
37
39
  // Initialize the plugin system
38
40
  await manager.plugins.initPlugins();
39
41
 
40
- // Save Prismic slices locally
41
- await saveSlices({ manager });
42
+ if (watch) {
43
+ // Watch mode: sync then poll for changes continuously
44
+ await watchForChanges({ manager, repositoryName });
45
+ } else {
46
+ // One-time sync
47
+ await saveSlices({ manager });
48
+ await saveCustomTypes({ manager });
42
49
 
43
- // Save Prismic custom types locally
44
- await saveCustomTypes({ manager });
50
+ await manager.telemetry.track({
51
+ event: "prismic-cli:end",
52
+ commandType: "sync",
53
+ repository: repositoryName,
54
+ fullCommand: process.argv.join(" "),
55
+ success: true,
56
+ watch: false,
57
+ });
45
58
 
46
- await manager.telemetry.track({
47
- event: "prismic-cli:end",
48
- commandType: "sync",
49
- repository: repositoryName,
50
- fullCommand: process.argv.join(" "),
51
- success: true,
52
- });
53
-
54
- displaySuccess(
55
- "Sync completed successfully!",
56
- "Your local types are up to date.",
57
- );
59
+ displaySuccess(
60
+ "Sync completed successfully!",
61
+ "Your local types are up to date.",
62
+ );
63
+ }
58
64
  }
@@ -3,7 +3,6 @@ import { join } from "node:path";
3
3
 
4
4
  import adapterNextPlugin from "@prismicio/adapter-next";
5
5
  import adapterNuxtPlugin from "@prismicio/adapter-nuxt";
6
- import adapterNuxt2Plugin from "@prismicio/adapter-nuxt2";
7
6
  import adapterSveltekitPlugin from "@prismicio/adapter-sveltekit";
8
7
  import { type PrismicManager } from "@prismicio/manager";
9
8
  import semver from "semver";
@@ -19,9 +18,9 @@ export type Framework = {
19
18
  name: string;
20
19
 
21
20
  /**
22
- * Framework 's id sent to Segment from Slice Machine
21
+ * Framework 's id sent to Segment
23
22
  */
24
- telemetryID: "next" | "nuxt-2" | "nuxt" | "sveltekit-1" | "sveltekit-2";
23
+ telemetryID: "next" | "nuxt" | "sveltekit-1" | "sveltekit-2";
25
24
 
26
25
  /**
27
26
  * Package name of the adapter responsible for this framework
@@ -42,14 +41,6 @@ export type Framework = {
42
41
  * higher it is the more priority it has in case multiple matches)
43
42
  */
44
43
  export const FRAMEWORKS: Record<string, Framework> = {
45
- "nuxt-2": {
46
- name: "Nuxt 2",
47
- telemetryID: "nuxt-2",
48
- adapterName: "@prismicio/adapter-nuxt2",
49
- compatibility: {
50
- nuxt: "^2.0.0",
51
- },
52
- },
53
44
  nuxt: {
54
45
  name: "Nuxt",
55
46
  telemetryID: "nuxt",
@@ -175,6 +166,5 @@ export async function initFramework(args: InitFrameworkArgs): Promise<void> {
175
166
  export const FRAMEWORK_PLUGINS = {
176
167
  "@prismicio/adapter-next": adapterNextPlugin,
177
168
  "@prismicio/adapter-nuxt": adapterNuxtPlugin,
178
- "@prismicio/adapter-nuxt2": adapterNuxt2Plugin,
179
169
  "@prismicio/adapter-sveltekit": adapterSveltekitPlugin,
180
170
  };
@@ -0,0 +1,181 @@
1
+ import type { PrismicManager } from "@prismicio/manager";
2
+ import chalk from "chalk";
3
+ import crypto from "crypto";
4
+
5
+ import { displaySuccess } from "../utils/output";
6
+
7
+ import { saveCustomTypes } from "./customType";
8
+ import { saveSlices } from "./slices";
9
+
10
+ // 5 seconds balances responsiveness with API load
11
+ const POLL_INTERVAL_MS = 5000;
12
+ const MAX_BACKOFF_MS = 60000; // Cap backoff at 1 minute
13
+ const MAX_CONSECUTIVE_ERRORS = 10;
14
+ const SHUTDOWN_TIMEOUT_MS = 3000; // Max time to wait for telemetry on shutdown
15
+
16
+ type WatchForChangesArgs = {
17
+ manager: PrismicManager;
18
+ repositoryName: string;
19
+ };
20
+
21
+ export async function watchForChanges(
22
+ args: WatchForChangesArgs,
23
+ ): Promise<void> {
24
+ const { manager, repositoryName } = args;
25
+
26
+ // Perform initial sync and capture hashes
27
+ const initialSlices = await manager.slices.fetchRemoteSlices();
28
+ const initialCustomTypes = await manager.customTypes.fetchRemoteCustomTypes();
29
+
30
+ await saveSlices({ manager });
31
+ await saveCustomTypes({ manager });
32
+
33
+ let lastSlicesHash = computeHash(initialSlices);
34
+ let lastCustomTypesHash = computeHash(initialCustomTypes);
35
+
36
+ displaySuccess("Initial sync completed!", "Now watching for changes...");
37
+ displayWatching({ intervalMs: POLL_INTERVAL_MS });
38
+
39
+ // Graceful shutdown handling
40
+ const shutdown = async () => {
41
+ displayStandout("Watch stopped. Goodbye!");
42
+
43
+ // Best-effort telemetry with timeout (don't hang forever if telemetry fails)
44
+ await Promise.race([
45
+ manager.telemetry.track({
46
+ event: "prismic-cli:end",
47
+ commandType: "sync",
48
+ repository: repositoryName,
49
+ fullCommand: process.argv.join(" "),
50
+ success: true,
51
+ watch: true,
52
+ }),
53
+ new Promise((resolve) => setTimeout(resolve, SHUTDOWN_TIMEOUT_MS)),
54
+ ]);
55
+
56
+ process.exit(0);
57
+ };
58
+
59
+ // Handle all common termination signals
60
+ process.on("SIGINT", shutdown); // Ctrl+C
61
+ process.on("SIGTERM", shutdown); // kill command
62
+ process.on("SIGHUP", shutdown); // terminal closed
63
+ process.on("SIGQUIT", shutdown); // Ctrl+\
64
+ if (process.platform === "win32") {
65
+ process.on("SIGBREAK", shutdown); // Windows Ctrl+Break
66
+ }
67
+
68
+ let consecutiveErrors = 0;
69
+
70
+ // Watch loop - runs indefinitely until terminated by signal (Ctrl+C, etc.)
71
+ while (true) {
72
+ await sleep(consecutiveErrors);
73
+
74
+ try {
75
+ const remoteSlices = await manager.slices.fetchRemoteSlices();
76
+ const remoteCustomTypes =
77
+ await manager.customTypes.fetchRemoteCustomTypes();
78
+
79
+ const slicesHash = computeHash(remoteSlices);
80
+ const customTypesHash = computeHash(remoteCustomTypes);
81
+
82
+ const slicesChanged = slicesHash !== lastSlicesHash;
83
+ const customTypesChanged = customTypesHash !== lastCustomTypesHash;
84
+
85
+ if (slicesChanged || customTypesChanged) {
86
+ displayChange({
87
+ slices: slicesChanged,
88
+ customTypes: customTypesChanged,
89
+ });
90
+
91
+ if (slicesChanged) {
92
+ await saveSlices({ manager });
93
+ lastSlicesHash = slicesHash;
94
+ }
95
+
96
+ if (customTypesChanged) {
97
+ await saveCustomTypes({ manager });
98
+ lastCustomTypesHash = customTypesHash;
99
+ }
100
+
101
+ displaySyncComplete();
102
+ }
103
+
104
+ // Reset error count on success
105
+ consecutiveErrors = 0;
106
+ } catch (error) {
107
+ consecutiveErrors++;
108
+
109
+ const message = error instanceof Error ? error.message : "Unknown error";
110
+
111
+ const nextDelay = Math.min(
112
+ POLL_INTERVAL_MS * Math.pow(2, consecutiveErrors - 1),
113
+ MAX_BACKOFF_MS,
114
+ );
115
+
116
+ displayRetryWarning(
117
+ `Error checking for changes: ${message}. Retrying in ${nextDelay / 1000}s...`,
118
+ );
119
+
120
+ if (consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) {
121
+ throw new Error(
122
+ `Too many consecutive errors (${MAX_CONSECUTIVE_ERRORS}), stopping watch.`,
123
+ );
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ function computeHash(data: unknown): string {
130
+ return crypto.createHash("sha256").update(JSON.stringify(data)).digest("hex");
131
+ }
132
+
133
+ // Exponential backoff: 5s, 10s, 20s, 40s, 60s (capped)
134
+ function sleep(errorCount: number): Promise<void> {
135
+ const delay =
136
+ errorCount === 0
137
+ ? POLL_INTERVAL_MS
138
+ : Math.min(
139
+ POLL_INTERVAL_MS * Math.pow(2, errorCount - 1),
140
+ MAX_BACKOFF_MS,
141
+ );
142
+
143
+ return new Promise((resolve) => setTimeout(resolve, delay));
144
+ }
145
+
146
+ function displayWatching({ intervalMs }: { intervalMs: number }): void {
147
+ const seconds = intervalMs / 1000;
148
+ console.info(
149
+ chalk.cyan(`\n Watching for changes (polling every ${seconds}s)...`),
150
+ );
151
+ console.info(chalk.gray(" Press Ctrl+C to stop\n"));
152
+ }
153
+
154
+ function displayChange({
155
+ slices,
156
+ customTypes,
157
+ }: {
158
+ slices: boolean;
159
+ customTypes: boolean;
160
+ }): void {
161
+ const timestamp = new Date().toLocaleTimeString();
162
+ const changes = [slices && "slices", customTypes && "custom types"]
163
+ .filter(Boolean)
164
+ .join(" and ");
165
+
166
+ console.info(chalk.blue(`\n [${timestamp}] Changes detected in ${changes}`));
167
+ }
168
+
169
+ function displaySyncComplete(): void {
170
+ console.info(chalk.green(" ✓ Changes synced successfully\n"));
171
+ }
172
+
173
+ // Message with padding to visually stand out from the continuous watch output
174
+ function displayStandout(message: string): void {
175
+ console.info(chalk.blue(`\n ${message}\n`));
176
+ }
177
+
178
+ // Inline warning without extra padding to keep retry messages compact
179
+ function displayRetryWarning(message: string): void {
180
+ console.warn(chalk.yellow(` ⚠ ${message}`));
181
+ }