TreasureTrails/node_modules/@electric-sql/pglite/dist/templating.cjs.map

1 line
6.7 KiB
Text
Raw Permalink Normal View History

2026-03-18 09:02:21 -05:00
{"version":3,"sources":["../src/templating.ts"],"sourcesContent":["const TemplateType = {\n part: 'part',\n container: 'container',\n} as const\n\ninterface TemplatePart {\n _templateType: typeof TemplateType.part\n str: string\n}\n\ninterface TemplateContainer {\n _templateType: typeof TemplateType.container\n strings: TemplateStringsArray\n values: any[]\n}\n\ninterface TemplatedQuery {\n query: string\n params: any[]\n}\n\nfunction addToLastAndPushWithSuffix(\n arr: string[],\n suffix: string,\n ...values: string[]\n) {\n const lastArrIdx = arr.length - 1\n const lastValIdx = values.length - 1\n\n // no-op\n if (lastValIdx === -1) return\n\n // overwrite last element\n if (lastValIdx === 0) {\n arr[lastArrIdx] = arr[lastArrIdx] + values[0] + suffix\n return\n }\n\n // sandwich values between array and suffix\n arr[lastArrIdx] = arr[lastArrIdx] + values[0]\n arr.push(...values.slice(1, lastValIdx))\n arr.push(values[lastValIdx] + suffix)\n}\n\n/**\n * Templating utility that allows nesting multiple SQL strings without\n * losing the automatic parametrization capabilities of {@link query}.\n *\n * @example\n * ```ts\n * query`SELECT * FROM tale ${withFilter ? sql`WHERE foo = ${fooVar}` : sql``}`\n * // > { query: 'SELECT * FROM tale WHERE foo = $1', params: [fooVar] }\n * // or\n * // > { query: 'SELECT * FROM tale', params: [] }\n * ```\n */\nexport function sql(\n strings: TemplateStringsArray,\n ...values: any[]\n): TemplateContainer {\n const parsedStrings = [strings[0]] as string[] & {\n raw: string[]\n }\n parsedStrings.raw = [strings.raw[0]]\n\n const parsedValues: any[] = []\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n const nextStringIdx = i + 1\n\n // if value is a template tag, collapse into last string\n if (value?._templateType === TemplateType.part) {\n addToLastAndPushWithSuffix(\n parsedStrings,\n strings[nextStringIdx],\n value.str,\n )\n addToLastAndPushWithSuffix(\n parsedStrings.raw,\n strings.raw[nextStringIdx],\n value.str,\n )\n continue\n }\n\n // if value is an output of this method, append in place\n if (value?._templateType === TemplateType.container) {\n addToLastAndPushWithSuffix(\n parsedStrings,\n strings[nextStringIdx],\n ...value.strings,\n )\n addToLastAndPushWithSuffix(\n parsedStrings.raw,\n strings.raw[nextStringIdx],\n ...value.strings.raw,\n )\n parsedValues.push(...value.values)\n continue\n }\n\n // otherwise keep reconstructing\n parsedStrings.push(strings[nextStringIdx])\n parsedStrings.raw.push(strings.raw[nextStringIdx])\n parsedValues.push(value)\n }\n\n return {\n _templateType: 'container',\n strings: parsedStrings,\n values: parsedValues,\n }\n}\n\n/**\n * Allows adding identifiers into a query template string without\n * parametrizing them. This method will automatically escape identifiers.\n *\n * @example\n * ```ts\n * query`SELECT * FROM ${identifier`foo`} WHERE ${identifier`id`} = ${id}`\n * // > { query: 'SELECT * FROM \"foo\" WHERE \"id\" = $1', params: [id] }\n * ```\n */\nexport function identifier(\n strings: TemplateStringsArray,\n ...values: any[]\n): TemplatePart {\n return {\n _templateType: 'part',\n str: `\"${String.raw(strings, ...values)}\"`,\n }\n}\n\n/**\n * Allows adding raw strings into a query template string without\n * parametrizing or modifying them in any way.\n *\n * @example\n * ```ts\n * query`SELECT * FROM foo ${raw`WHERE id = ${2+3}`}`\n * // > { query: 'SELECT * FROM foo WHERE id = 5', params: [] }\n * ```\n */\n\nexport function raw(\n strings: TemplateStringsArray,\n ...values: any[]\n): TemplatePart {\n return {\n _templateType: 'part',\n str: String.raw(strings, ...values),\n }\n}\n\n/**\n * Generates a parametrized query from a templated query string, assigning\n * the provided values to the appropriate named parameters.\n *\n * You can use templating helpers like {