@payloadcms/drizzle 3.73.0-internal.e61e2ce → 3.73.0-internal.f0458fb
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/findDistinct.d.ts.map +1 -1
- package/dist/findDistinct.js +23 -4
- package/dist/findDistinct.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
- package/dist/postgres/createJSONQuery/index.js +7 -19
- package/dist/postgres/createJSONQuery/index.js.map +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +2 -3
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/selectDistinct.d.ts +2 -1
- package/dist/queries/selectDistinct.d.ts.map +1 -1
- package/dist/queries/selectDistinct.js +11 -7
- package/dist/queries/selectDistinct.js.map +1 -1
- package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
- package/dist/sqlite/createJSONQuery/index.js +1 -2
- package/dist/sqlite/createJSONQuery/index.js.map +1 -1
- package/dist/types.d.ts +0 -34
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
- package/dist/utilities/buildCreateMigration.js +2 -20
- package/dist/utilities/buildCreateMigration.js.map +1 -1
- package/package.json +3 -3
- package/dist/utilities/blocksToJsonMigrator.d.ts +0 -15
- package/dist/utilities/blocksToJsonMigrator.d.ts.map +0 -1
- package/dist/utilities/blocksToJsonMigrator.js +0 -595
- package/dist/utilities/blocksToJsonMigrator.js.map +0 -1
- package/dist/utilities/escapeSQLValue.d.ts +0 -3
- package/dist/utilities/escapeSQLValue.d.ts.map +0 -1
- package/dist/utilities/escapeSQLValue.js +0 -20
- package/dist/utilities/escapeSQLValue.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/blocksToJsonMigrator.ts"],"sourcesContent":["import type {\n DynamicMigrationTemplate,\n FlattenedField,\n Payload,\n PayloadRequest,\n SanitizedConfig,\n} from 'payload'\n\nimport { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'fs'\nimport path from 'path'\nimport {\n APIError,\n buildVersionCollectionFields,\n buildVersionGlobalFields,\n dynamicImport,\n} from 'payload'\nimport { findConfig } from 'payload/node'\nimport { fieldShouldBeLocalized } from 'payload/shared'\nimport * as ts from 'typescript'\n\nimport type {\n BlocksToJsonBlockToMigrate,\n BlocksToJsonEntityToMigrate,\n BlocksToJsonMigrator,\n DrizzleAdapter,\n} from '../types.js'\n\nimport { getTransaction } from './getTransaction.js'\n\nconst DEFAULT_BATCH_SIZE = 100\nconst TEMP_FOLDER_NAME = '.payload-blocks-migration'\n\nconst writeEntitiesToTempFile = (\n entities: BlocksToJsonEntityToMigrate[],\n tempFolderPath: string,\n batchIndex: number,\n): void => {\n const filePath = path.join(tempFolderPath, `entities-batch-${batchIndex}.json`)\n writeFileSync(filePath, JSON.stringify(entities, null, 2), 'utf-8')\n}\n\nconst acceptDrizzlePrompts = async <T>(\n callPrompt: () => Promise<T> | T,\n {\n silenceLogs = false,\n }: {\n silenceLogs?: boolean\n } = {},\n): Promise<T> => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const write = process.stdout.write\n\n if (silenceLogs) {\n process.stdout.write = () => true\n }\n\n const promise = callPrompt()\n\n const interval = setInterval(\n () =>\n process.stdin.emit('keypress', '\\n', {\n name: 'return',\n ctrl: false,\n }),\n 25,\n )\n\n const res = await promise\n\n if (silenceLogs) {\n process.stdout.write = write\n }\n\n clearInterval(interval)\n\n return res\n}\n\nconst entityHasBlocksField = (entity: { flattenedFields: FlattenedField[] }): boolean => {\n for (const field of entity.flattenedFields) {\n if (field.type === 'blocks') {\n return true\n }\n\n if (\n 'flattenedFields' in field &&\n entityHasBlocksField({ flattenedFields: field.flattenedFields })\n ) {\n return true\n }\n }\n\n return false\n}\n\nconst collectBlocksToMigrate = ({\n config,\n data,\n fields,\n parentAccessor,\n parentIsLocalized,\n}: {\n config: SanitizedConfig\n data: any\n fields: FlattenedField[]\n parentAccessor: (number | string)[]\n parentIsLocalized: boolean\n}): BlocksToJsonBlockToMigrate[] => {\n const result: BlocksToJsonBlockToMigrate[] = []\n\n for (const field of fields) {\n switch (field.type) {\n case 'array': {\n const arrayData = data[field.name]\n\n if (!Array.isArray(arrayData)) {\n continue\n }\n\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: arrayData,\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n for (const [index, row] of arrayData.entries()) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: row,\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name, index],\n parentIsLocalized,\n }),\n )\n }\n break\n }\n case 'blocks': {\n result.push({\n data: data[field.name],\n fieldAccessor: [...parentAccessor, field.name],\n })\n break\n }\n case 'group':\n case 'tab': {\n if (config.localization && fieldShouldBeLocalized({ field, parentIsLocalized })) {\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: config.localization.localeCodes.map((code) => ({\n ...field,\n name: code,\n localized: false,\n })),\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized: true,\n }),\n )\n\n continue\n }\n\n result.push(\n ...collectBlocksToMigrate({\n config,\n data: data[field.name],\n fields: field.flattenedFields,\n parentAccessor: [...parentAccessor, field.name],\n parentIsLocalized,\n }),\n )\n break\n }\n default: {\n continue\n }\n }\n }\n\n return result\n}\n\nclass BlocksToJsonMigratorImpl implements BlocksToJsonMigrator {\n private readonly batchSize: number\n private tempFolderPath: string\n\n constructor(\n private readonly adapter: DrizzleAdapter,\n private readonly sanitizeStatements: (args: {\n sqlExecute: string\n statements: string[]\n }) => string,\n private readonly executeMethod: string,\n batchSize?: number,\n ) {\n this.batchSize = batchSize || DEFAULT_BATCH_SIZE\n this.tempFolderPath = path.resolve(this.adapter.migrationDir, TEMP_FOLDER_NAME)\n }\n\n private ensureTempFolder(): void {\n if (!existsSync(this.tempFolderPath)) {\n mkdirSync(this.tempFolderPath, { recursive: true })\n }\n }\n\n private *fetchEntitiesFromJsonBatches(): IterableIterator<BlocksToJsonEntityToMigrate[]> {\n if (!existsSync(this.tempFolderPath)) {\n return\n }\n\n const files = readdirSync(this.tempFolderPath)\n .filter((file) => file.startsWith('entities-batch-') && file.endsWith('.json'))\n .sort((a, b) => {\n const aNum = parseInt(a.match(/\\d+/)?.[0] || '0', 10)\n const bNum = parseInt(b.match(/\\d+/)?.[0] || '0', 10)\n return aNum - bNum\n })\n\n for (const file of files) {\n const filePath = path.join(this.tempFolderPath, file)\n const fileContent = readFileSync(filePath, 'utf-8')\n const batchEntities = JSON.parse(fileContent) as BlocksToJsonEntityToMigrate[]\n yield batchEntities\n }\n }\n\n private async migrateEntities(\n entities: BlocksToJsonEntityToMigrate[],\n req: PayloadRequest,\n ): Promise<void> {\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n await this.syncTransactionDrizzleInstance(req)\n\n const totalEntities = entities.length\n let processed = 0\n\n for (const entity of entities) {\n switch (entity.type) {\n case 'collection': {\n await this.adapter.updateOne({\n collection: entity.slug,\n data: entity.originalData,\n joins: false,\n req,\n where: {\n id: {\n equals: entity.id,\n },\n },\n })\n break\n }\n case 'collectionVersion': {\n await this.adapter.updateVersion({\n id: entity.id,\n collection: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n\n break\n }\n case 'global': {\n await this.adapter.updateGlobal({\n slug: entity.slug,\n data: entity.originalData,\n req,\n })\n break\n }\n case 'globalVersion': {\n await this.adapter.updateGlobalVersion({\n id: entity.id,\n global: entity.slug,\n req,\n versionData: entity.originalData as any,\n })\n break\n }\n }\n\n processed++\n if (processed % this.batchSize === 0 || processed === totalEntities) {\n this.adapter.payload.logger.info(\n `Migrated ${processed}/${totalEntities} entities (${Math.round((processed / totalEntities) * 100)}%)`,\n )\n }\n }\n }\n\n private resetSchema() {\n this.adapter.schema = {}\n this.adapter.tables = {}\n this.adapter.indexes = new Set()\n this.adapter.foreignKeys = new Set()\n this.adapter.relations = {}\n this.adapter.rawTables = {}\n this.adapter.rawRelations = {}\n this.adapter.tableNameMap = new Map()\n }\n\n private async syncTransactionDrizzleInstance(req: PayloadRequest) {\n const tsx = (await getTransaction(this.adapter, req)) as any\n\n tsx._ = this.adapter.drizzle._\n tsx.schema = this.adapter.drizzle._\n tsx.session.schema = (this.adapter.drizzle as any).session.schema\n }\n\n cleanupTempFolder(): void {\n rmSync(this.tempFolderPath, { force: true, recursive: true })\n\n this.adapter.payload.logger.info(`Cleaned up temp folder at ${this.tempFolderPath}`)\n }\n\n async collectAndSaveEntitiesToBatches(\n req: PayloadRequest,\n options?: {\n batchSize?: number\n },\n ): Promise<void> {\n const batchSize = options?.batchSize ?? this.batchSize\n\n this.cleanupTempFolder()\n this.ensureTempFolder()\n\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n await this.adapter.connect()\n\n // Count total entities to migrate\n let totalExpected = 0\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n const { totalDocs } = await this.adapter.count({ collection: collection.slug })\n totalExpected += totalDocs\n\n if (collection.versions) {\n const { totalDocs: totalVersions } = await this.adapter.countVersions({\n collection: collection.slug,\n })\n totalExpected += totalVersions\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n totalExpected += 1 // Global itself\n\n if (globalConfig.versions) {\n const { totalDocs: totalGlobalVersions } = await this.adapter.countGlobalVersions({\n global: globalConfig.slug,\n })\n totalExpected += totalGlobalVersions\n }\n }\n\n this.adapter.payload.logger.info(\n `Found ${totalExpected} total entities to collect and save to batches`,\n )\n\n let batchIndex = 0\n let currentBatch: BlocksToJsonEntityToMigrate[] = []\n let totalCollected = 0\n\n const flushBatch = () => {\n if (currentBatch.length > 0) {\n writeEntitiesToTempFile(currentBatch, this.tempFolderPath, batchIndex)\n const percentage =\n totalExpected > 0 ? Math.round((totalCollected / totalExpected) * 100) : 0\n this.adapter.payload.logger.info(\n `Saved batch ${batchIndex} with ${currentBatch.length} entities (${totalCollected}/${totalExpected} - ${percentage}%)`,\n )\n batchIndex++\n currentBatch = []\n }\n }\n\n const addEntity = (entity: BlocksToJsonEntityToMigrate) => {\n currentBatch.push(entity)\n totalCollected++\n if (currentBatch.length >= batchSize) {\n flushBatch()\n }\n }\n\n for (const collection of this.adapter.payload.config.collections.filter(entityHasBlocksField)) {\n let page = 1\n let hasMore = true\n\n while (hasMore) {\n const { docs, hasNextPage } = await this.adapter.find({\n collection: collection.slug,\n limit: batchSize,\n page,\n })\n\n for (const doc of docs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: doc.id,\n slug: collection.slug,\n type: 'collection',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: doc,\n fields: collection.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: doc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${docs.length} entries from ${collection.slug} (page ${page})`,\n )\n\n hasMore = hasNextPage\n page++\n }\n\n if (collection.versions) {\n let versionPage = 1\n let hasMoreVersions = true\n\n while (hasMoreVersions) {\n const { docs: versionDocs, hasNextPage: hasNextVersionPage } =\n await this.adapter.findVersions({\n collection: collection.slug,\n limit: batchSize,\n page: versionPage,\n })\n\n for (const versionDoc of versionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: versionDoc.id,\n slug: collection.slug,\n type: 'collectionVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: versionDoc,\n fields: buildVersionCollectionFields(this.adapter.payload.config, collection, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: versionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${versionDocs.length} versions from ${collection.slug} (page ${versionPage})`,\n )\n\n hasMoreVersions = hasNextVersionPage\n versionPage++\n }\n }\n }\n\n for (const globalConfig of this.adapter.payload.config.globals.filter(entityHasBlocksField)) {\n const globalDoc = await this.adapter.findGlobal({ slug: globalConfig.slug })\n\n const entity: BlocksToJsonEntityToMigrate = {\n slug: globalConfig.slug,\n type: 'global',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalDoc,\n fields: globalConfig.flattenedFields,\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalDoc,\n }\n\n addEntity(entity)\n this.adapter.payload.logger.info(`Collected global ${globalConfig.slug}`)\n\n if (globalConfig.versions) {\n let globalVersionPage = 1\n let hasMoreGlobalVersions = true\n\n while (hasMoreGlobalVersions) {\n const { docs: globalVersionDocs, hasNextPage: hasNextGlobalVersionPage } =\n await this.adapter.findGlobalVersions({\n global: globalConfig.slug,\n limit: batchSize,\n page: globalVersionPage,\n })\n\n for (const globalVersionDoc of globalVersionDocs) {\n const entity: BlocksToJsonEntityToMigrate = {\n id: globalVersionDoc.id,\n slug: globalConfig.slug,\n type: 'globalVersion',\n blocks: collectBlocksToMigrate({\n config: this.adapter.payload.config,\n data: globalVersionDoc,\n fields: buildVersionGlobalFields(this.adapter.payload.config, globalConfig, true),\n parentAccessor: [],\n parentIsLocalized: false,\n }),\n originalData: globalVersionDoc,\n }\n\n addEntity(entity)\n }\n\n this.adapter.payload.logger.info(\n `Collected ${globalVersionDocs.length} versions from global ${globalConfig.slug} (page ${globalVersionPage})`,\n )\n\n hasMoreGlobalVersions = hasNextGlobalVersionPage\n globalVersionPage++\n }\n }\n }\n\n flushBatch()\n\n this.adapter.payload.logger.info(\n `Collected total of ${totalCollected} entities across ${batchIndex} batches`,\n )\n }\n\n async getMigrationStatements(): Promise<{\n add: string\n remove: string\n writeDrizzleSnapshot(filePath: string): void\n }> {\n const { generateDrizzleJson, generateMigration } = this.adapter.requireDrizzleKit()\n\n const drizzleJsonBefore = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = true\n this.resetSchema()\n\n await this.adapter.init()\n const drizzleJsonAfter = await generateDrizzleJson(this.adapter.schema)\n this.adapter.blocksAsJSON = false\n this.resetSchema()\n await this.adapter.init()\n\n const statements = await acceptDrizzlePrompts(\n () => generateMigration(drizzleJsonBefore, drizzleJsonAfter),\n {\n silenceLogs: true,\n },\n )\n\n const sqlExecute = `await db.${this.executeMethod}(` + 'sql`'\n\n return {\n add: this.sanitizeStatements({\n sqlExecute,\n statements: statements.filter((stmt) => !stmt.startsWith('DROP')),\n }),\n remove: this.sanitizeStatements({\n sqlExecute,\n statements: [...statements.filter((stmt) => stmt.startsWith('DROP'))],\n }),\n writeDrizzleSnapshot(filePath) {\n writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n },\n }\n }\n\n async migrateEntitiesFromTempFolder(\n req: PayloadRequest,\n options?: {\n clearBatches?: boolean\n },\n ): Promise<void> {\n const clearBatches = options?.clearBatches ?? true\n\n let totalEntities = 0\n let hasEntities = false\n\n for (const entities of this.fetchEntitiesFromJsonBatches()) {\n hasEntities = true\n totalEntities += entities.length\n\n this.adapter.payload.logger.info(\n `Migrating batch with ${entities.length} entities (total: ${totalEntities})`,\n )\n\n await this.migrateEntities(entities, req)\n }\n\n if (!hasEntities) {\n this.adapter.payload.logger.warn('No entities found in temp folder to migrate')\n return\n }\n\n this.adapter.payload.logger.info(\n `Completed migration of ${totalEntities} entities from temp folder`,\n )\n\n if (clearBatches) {\n this.cleanupTempFolder()\n } else {\n this.adapter.payload.logger.info(\n `Temp folder preserved at ${this.tempFolderPath} (clearBatches: false)`,\n )\n }\n }\n\n setTempFolder(tempFolderPath: string): void {\n this.tempFolderPath = tempFolderPath\n }\n\n async updatePayloadConfigFile(): Promise<void> {\n let configPath: string\n\n try {\n configPath = findConfig()\n } catch {\n this.adapter.payload.logger.info(\n 'updatePayloadConfigFile failed - could not find the payload config. Please set the blocksAsJSON DB adapter property manually to \"true\"',\n )\n return\n }\n\n const configFile = readFileSync(configPath, 'utf-8')\n\n const source = ts.createSourceFile(configPath, configFile, ts.ScriptTarget.ESNext)\n\n let hadChanges = false\n\n const result = ts.transform(source, [\n (ctx) => (sourceFile) => {\n const factory = ctx.factory\n\n const visit: ts.Visitor = (node) => {\n if (\n ts.isPropertyAssignment(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === 'db' &&\n ts.isCallExpression(node.initializer) &&\n node.initializer.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.initializer.arguments[0])\n ) {\n const call = node.initializer\n const obj = node.initializer.arguments[0]\n\n const filteredProps = obj.properties.filter((prop) => {\n if (!ts.isPropertyAssignment(prop)) {\n return true\n }\n\n return !(ts.isIdentifier(prop.name) && prop.name.text === 'blocksAsJSON')\n })\n\n const newProperty = factory.createPropertyAssignment(\n 'blocksAsJSON',\n factory.createTrue(),\n )\n hadChanges = true\n const newObject = factory.updateObjectLiteralExpression(obj, [\n ...filteredProps,\n newProperty,\n ])\n\n const newCall = factory.updateCallExpression(\n call,\n call.expression,\n call.typeArguments,\n [newObject],\n )\n\n return factory.updatePropertyAssignment(node, node.name, newCall)\n }\n\n return ts.visitEachChild(node, visit, ctx)\n }\n\n return ts.visitNode(sourceFile, visit) as ts.SourceFile\n },\n ])\n\n if (!hadChanges) {\n this.adapter.payload.logger.info(\n 'No changes made to payload config. Set blocksAsJSON to true manually.',\n )\n return\n }\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed })\n let output = printer.printFile(result.transformed[0])\n\n try {\n // eslint-disable-next-line @typescript-eslint/consistent-type-imports\n const prettier = await dynamicImport<typeof import('prettier')>('prettier')\n const configPath = await prettier.resolveConfigFile()\n const config = configPath ? await prettier.resolveConfig(configPath) : {}\n output = await prettier.format(output, { ...config, parser: 'typescript' })\n } catch (err) {\n this.adapter.payload.logger.error({\n err,\n msg: 'Could not format payload config with Prettier',\n })\n }\n\n writeFileSync(configPath, output, 'utf-8')\n this.adapter.payload.logger.info(`Updated ${configPath} with blocksAsJSON: true`)\n }\n}\n\nexport const createBlocksToJsonMigrator = ({\n adapter,\n executeMethod,\n sanitizeStatements,\n}: {\n adapter: DrizzleAdapter\n executeMethod: string\n sanitizeStatements: (args: { sqlExecute: string; statements: string[] }) => string\n}): BlocksToJsonMigrator => {\n return new BlocksToJsonMigratorImpl(adapter, sanitizeStatements, executeMethod)\n}\n\nexport const getBlocksToJsonMigrator = (payload: Payload): BlocksToJsonMigrator => {\n const migrator = (payload.db as DrizzleAdapter).blocksToJsonMigrator\n\n if (!migrator) {\n throw new APIError(`blocksToJsonMigrator is not defined for ${payload.db.packageName}`)\n }\n\n return migrator\n}\n\nexport const buildDynamicPredefinedBlocksToJsonMigration = ({\n packageName,\n}: {\n packageName: string\n}): DynamicMigrationTemplate => {\n return async ({ filePath, payload }) => {\n const migrator = getBlocksToJsonMigrator(payload)\n\n const migrationStatements = await migrator.getMigrationStatements()\n\n migrationStatements.writeDrizzleSnapshot(filePath)\n\n await migrator.updatePayloadConfigFile()\n const upSQL = `\nconst migrator = getBlocksToJsonMigrator(payload)\nmigrator.setTempFolder(TEMP_FOLDER)\nawait migrator.collectAndSaveEntitiesToBatches(req, { batchSize: BATCH_SIZE })\n\n${migrationStatements.add}\npayload.logger.info(\"Executed ADD statements for blocks-as-json migration\")\n\nawait migrator.migrateEntitiesFromTempFolder(req, { clearBatches: true })\n\n${migrationStatements.remove}\npayload.logger.info(\"Executed REMOVE statements for blocks-as-json migration\")\n `\n\n return {\n imports: `\nimport { getBlocksToJsonMigrator } from '${packageName}/migration-utils'\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n// Configure migration options (optional)\nconst BATCH_SIZE = 100 // Number of entities to process per batch\nconst TEMP_FOLDER = path.resolve(dirname, '${TEMP_FOLDER_NAME}') // Folder path to store migration batch\n`,\n upSQL,\n }\n }\n}\n"],"names":["existsSync","mkdirSync","readdirSync","readFileSync","rmSync","writeFileSync","path","APIError","buildVersionCollectionFields","buildVersionGlobalFields","dynamicImport","findConfig","fieldShouldBeLocalized","ts","getTransaction","DEFAULT_BATCH_SIZE","TEMP_FOLDER_NAME","writeEntitiesToTempFile","entities","tempFolderPath","batchIndex","filePath","join","JSON","stringify","acceptDrizzlePrompts","callPrompt","silenceLogs","write","process","stdout","promise","interval","setInterval","stdin","emit","name","ctrl","res","clearInterval","entityHasBlocksField","entity","field","flattenedFields","type","collectBlocksToMigrate","config","data","fields","parentAccessor","parentIsLocalized","result","arrayData","Array","isArray","localization","push","localeCodes","map","code","localized","index","row","entries","fieldAccessor","BlocksToJsonMigratorImpl","batchSize","adapter","sanitizeStatements","executeMethod","resolve","migrationDir","ensureTempFolder","recursive","fetchEntitiesFromJsonBatches","files","filter","file","startsWith","endsWith","sort","a","b","aNum","parseInt","match","bNum","fileContent","batchEntities","parse","migrateEntities","req","blocksAsJSON","resetSchema","init","connect","syncTransactionDrizzleInstance","totalEntities","length","processed","updateOne","collection","slug","originalData","joins","where","id","equals","updateVersion","versionData","updateGlobal","updateGlobalVersion","global","payload","logger","info","Math","round","schema","tables","indexes","Set","foreignKeys","relations","rawTables","rawRelations","tableNameMap","Map","tsx","_","drizzle","session","cleanupTempFolder","force","collectAndSaveEntitiesToBatches","options","totalExpected","collections","totalDocs","count","versions","totalVersions","countVersions","globalConfig","globals","totalGlobalVersions","countGlobalVersions","currentBatch","totalCollected","flushBatch","percentage","addEntity","page","hasMore","docs","hasNextPage","find","limit","doc","blocks","versionPage","hasMoreVersions","versionDocs","hasNextVersionPage","findVersions","versionDoc","globalDoc","findGlobal","globalVersionPage","hasMoreGlobalVersions","globalVersionDocs","hasNextGlobalVersionPage","findGlobalVersions","globalVersionDoc","getMigrationStatements","generateDrizzleJson","generateMigration","requireDrizzleKit","drizzleJsonBefore","drizzleJsonAfter","statements","sqlExecute","add","stmt","remove","writeDrizzleSnapshot","migrateEntitiesFromTempFolder","clearBatches","hasEntities","warn","setTempFolder","updatePayloadConfigFile","configPath","configFile","source","createSourceFile","ScriptTarget","ESNext","hadChanges","transform","ctx","sourceFile","factory","visit","node","isPropertyAssignment","isIdentifier","text","isCallExpression","initializer","arguments","isObjectLiteralExpression","call","obj","filteredProps","properties","prop","newProperty","createPropertyAssignment","createTrue","newObject","updateObjectLiteralExpression","newCall","updateCallExpression","expression","typeArguments","updatePropertyAssignment","visitEachChild","visitNode","printer","createPrinter","newLine","NewLineKind","LineFeed","output","printFile","transformed","prettier","resolveConfigFile","resolveConfig","format","parser","err","error","msg","createBlocksToJsonMigrator","getBlocksToJsonMigrator","migrator","db","blocksToJsonMigrator","packageName","buildDynamicPredefinedBlocksToJsonMigration","migrationStatements","upSQL","imports"],"mappings":"AAQA,SAASA,UAAU,EAAEC,SAAS,EAAEC,WAAW,EAAEC,YAAY,EAAEC,MAAM,EAAEC,aAAa,QAAQ,KAAI;AAC5F,OAAOC,UAAU,OAAM;AACvB,SACEC,QAAQ,EACRC,4BAA4B,EAC5BC,wBAAwB,EACxBC,aAAa,QACR,UAAS;AAChB,SAASC,UAAU,QAAQ,eAAc;AACzC,SAASC,sBAAsB,QAAQ,iBAAgB;AACvD,YAAYC,QAAQ,aAAY;AAShC,SAASC,cAAc,QAAQ,sBAAqB;AAEpD,MAAMC,qBAAqB;AAC3B,MAAMC,mBAAmB;AAEzB,MAAMC,0BAA0B,CAC9BC,UACAC,gBACAC;IAEA,MAAMC,WAAWf,KAAKgB,IAAI,CAACH,gBAAgB,CAAC,eAAe,EAAEC,WAAW,KAAK,CAAC;IAC9Ef,cAAcgB,UAAUE,KAAKC,SAAS,CAACN,UAAU,MAAM,IAAI;AAC7D;AAEA,MAAMO,uBAAuB,OAC3BC,YACA,EACEC,cAAc,KAAK,EAGpB,GAAG,CAAC,CAAC;IAEN,6DAA6D;IAC7D,MAAMC,QAAQC,QAAQC,MAAM,CAACF,KAAK;IAElC,IAAID,aAAa;QACfE,QAAQC,MAAM,CAACF,KAAK,GAAG,IAAM;IAC/B;IAEA,MAAMG,UAAUL;IAEhB,MAAMM,WAAWC,YACf,IACEJ,QAAQK,KAAK,CAACC,IAAI,CAAC,YAAY,MAAM;YACnCC,MAAM;YACNC,MAAM;QACR,IACF;IAGF,MAAMC,MAAM,MAAMP;IAElB,IAAIJ,aAAa;QACfE,QAAQC,MAAM,CAACF,KAAK,GAAGA;IACzB;IAEAW,cAAcP;IAEd,OAAOM;AACT;AAEA,MAAME,uBAAuB,CAACC;IAC5B,KAAK,MAAMC,SAASD,OAAOE,eAAe,CAAE;QAC1C,IAAID,MAAME,IAAI,KAAK,UAAU;YAC3B,OAAO;QACT;QAEA,IACE,qBAAqBF,SACrBF,qBAAqB;YAAEG,iBAAiBD,MAAMC,eAAe;QAAC,IAC9D;YACA,OAAO;QACT;IACF;IAEA,OAAO;AACT;AAEA,MAAME,yBAAyB,CAAC,EAC9BC,MAAM,EACNC,IAAI,EACJC,MAAM,EACNC,cAAc,EACdC,iBAAiB,EAOlB;IACC,MAAMC,SAAuC,EAAE;IAE/C,KAAK,MAAMT,SAASM,OAAQ;QAC1B,OAAQN,MAAME,IAAI;YAChB,KAAK;gBAAS;oBACZ,MAAMQ,YAAYL,IAAI,CAACL,MAAMN,IAAI,CAAC;oBAElC,IAAI,CAACiB,MAAMC,OAAO,CAACF,YAAY;wBAC7B;oBACF;oBAEA,IAAIN,OAAOS,YAAY,IAAI3C,uBAAuB;wBAAE8B;wBAAOQ;oBAAkB,IAAI;wBAC/EC,OAAOK,IAAI,IACNX,uBAAuB;4BACxBC;4BACAC,MAAMK;4BACNJ,QAAQF,OAAOS,YAAY,CAACE,WAAW,CAACC,GAAG,CAAC,CAACC,OAAU,CAAA;oCACrD,GAAGjB,KAAK;oCACRN,MAAMuB;oCACNC,WAAW;gCACb,CAAA;4BACAX,gBAAgB;mCAAIA;gCAAgBP,MAAMN,IAAI;6BAAC;4BAC/Cc,mBAAmB;wBACrB;wBAGF;oBACF;oBAEA,KAAK,MAAM,CAACW,OAAOC,IAAI,IAAIV,UAAUW,OAAO,GAAI;wBAC9CZ,OAAOK,IAAI,IACNX,uBAAuB;4BACxBC;4BACAC,MAAMe;4BACNd,QAAQN,MAAMC,eAAe;4BAC7BM,gBAAgB;mCAAIA;gCAAgBP,MAAMN,IAAI;gCAAEyB;6BAAM;4BACtDX;wBACF;oBAEJ;oBACA;gBACF;YACA,KAAK;gBAAU;oBACbC,OAAOK,IAAI,CAAC;wBACVT,MAAMA,IAAI,CAACL,MAAMN,IAAI,CAAC;wBACtB4B,eAAe;+BAAIf;4BAAgBP,MAAMN,IAAI;yBAAC;oBAChD;oBACA;gBACF;YACA,KAAK;YACL,KAAK;gBAAO;oBACV,IAAIU,OAAOS,YAAY,IAAI3C,uBAAuB;wBAAE8B;wBAAOQ;oBAAkB,IAAI;wBAC/EC,OAAOK,IAAI,IACNX,uBAAuB;4BACxBC;4BACAC,MAAMA,IAAI,CAACL,MAAMN,IAAI,CAAC;4BACtBY,QAAQF,OAAOS,YAAY,CAACE,WAAW,CAACC,GAAG,CAAC,CAACC,OAAU,CAAA;oCACrD,GAAGjB,KAAK;oCACRN,MAAMuB;oCACNC,WAAW;gCACb,CAAA;4BACAX,gBAAgB;mCAAIA;gCAAgBP,MAAMN,IAAI;6BAAC;4BAC/Cc,mBAAmB;wBACrB;wBAGF;oBACF;oBAEAC,OAAOK,IAAI,IACNX,uBAAuB;wBACxBC;wBACAC,MAAMA,IAAI,CAACL,MAAMN,IAAI,CAAC;wBACtBY,QAAQN,MAAMC,eAAe;wBAC7BM,gBAAgB;+BAAIA;4BAAgBP,MAAMN,IAAI;yBAAC;wBAC/Cc;oBACF;oBAEF;gBACF;YACA;gBAAS;oBACP;gBACF;QACF;IACF;IAEA,OAAOC;AACT;AAEA,MAAMc;;;;IACaC,UAAiB;IAC1B/C,eAAsB;IAE9B,YACE,AAAiBgD,OAAuB,EACxC,AAAiBC,kBAGL,EACZ,AAAiBC,aAAqB,EACtCH,SAAkB,CAClB;aAPiBC,UAAAA;aACAC,qBAAAA;aAIAC,gBAAAA;QAGjB,IAAI,CAACH,SAAS,GAAGA,aAAanD;QAC9B,IAAI,CAACI,cAAc,GAAGb,KAAKgE,OAAO,CAAC,IAAI,CAACH,OAAO,CAACI,YAAY,EAAEvD;IAChE;IAEQwD,mBAAyB;QAC/B,IAAI,CAACxE,WAAW,IAAI,CAACmB,cAAc,GAAG;YACpClB,UAAU,IAAI,CAACkB,cAAc,EAAE;gBAAEsD,WAAW;YAAK;QACnD;IACF;IAEA,CAASC,+BAAgF;QACvF,IAAI,CAAC1E,WAAW,IAAI,CAACmB,cAAc,GAAG;YACpC;QACF;QAEA,MAAMwD,QAAQzE,YAAY,IAAI,CAACiB,cAAc,EAC1CyD,MAAM,CAAC,CAACC,OAASA,KAAKC,UAAU,CAAC,sBAAsBD,KAAKE,QAAQ,CAAC,UACrEC,IAAI,CAAC,CAACC,GAAGC;YACR,MAAMC,OAAOC,SAASH,EAAEI,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK;YAClD,MAAMC,OAAOF,SAASF,EAAEG,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK;YAClD,OAAOF,OAAOG;QAChB;QAEF,KAAK,MAAMT,QAAQF,MAAO;YACxB,MAAMtD,WAAWf,KAAKgB,IAAI,CAAC,IAAI,CAACH,cAAc,EAAE0D;YAChD,MAAMU,cAAcpF,aAAakB,UAAU;YAC3C,MAAMmE,gBAAgBjE,KAAKkE,KAAK,CAACF;YACjC,MAAMC;QACR;IACF;IAEA,MAAcE,gBACZxE,QAAuC,EACvCyE,GAAmB,EACJ;QACf,IAAI,CAACxB,OAAO,CAACyB,YAAY,GAAG;QAC5B,IAAI,CAACC,WAAW;QAChB,MAAM,IAAI,CAAC1B,OAAO,CAAC2B,IAAI;QACvB,MAAM,IAAI,CAAC3B,OAAO,CAAC4B,OAAO;QAE1B,MAAM,IAAI,CAACC,8BAA8B,CAACL;QAE1C,MAAMM,gBAAgB/E,SAASgF,MAAM;QACrC,IAAIC,YAAY;QAEhB,KAAK,MAAM1D,UAAUvB,SAAU;YAC7B,OAAQuB,OAAOG,IAAI;gBACjB,KAAK;oBAAc;wBACjB,MAAM,IAAI,CAACuB,OAAO,CAACiC,SAAS,CAAC;4BAC3BC,YAAY5D,OAAO6D,IAAI;4BACvBvD,MAAMN,OAAO8D,YAAY;4BACzBC,OAAO;4BACPb;4BACAc,OAAO;gCACLC,IAAI;oCACFC,QAAQlE,OAAOiE,EAAE;gCACnB;4BACF;wBACF;wBACA;oBACF;gBACA,KAAK;oBAAqB;wBACxB,MAAM,IAAI,CAACvC,OAAO,CAACyC,aAAa,CAAC;4BAC/BF,IAAIjE,OAAOiE,EAAE;4BACbL,YAAY5D,OAAO6D,IAAI;4BACvBX;4BACAkB,aAAapE,OAAO8D,YAAY;wBAClC;wBAEA;oBACF;gBACA,KAAK;oBAAU;wBACb,MAAM,IAAI,CAACpC,OAAO,CAAC2C,YAAY,CAAC;4BAC9BR,MAAM7D,OAAO6D,IAAI;4BACjBvD,MAAMN,OAAO8D,YAAY;4BACzBZ;wBACF;wBACA;oBACF;gBACA,KAAK;oBAAiB;wBACpB,MAAM,IAAI,CAACxB,OAAO,CAAC4C,mBAAmB,CAAC;4BACrCL,IAAIjE,OAAOiE,EAAE;4BACbM,QAAQvE,OAAO6D,IAAI;4BACnBX;4BACAkB,aAAapE,OAAO8D,YAAY;wBAClC;wBACA;oBACF;YACF;YAEAJ;YACA,IAAIA,YAAY,IAAI,CAACjC,SAAS,KAAK,KAAKiC,cAAcF,eAAe;gBACnE,IAAI,CAAC9B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,SAAS,EAAEhB,UAAU,CAAC,EAAEF,cAAc,WAAW,EAAEmB,KAAKC,KAAK,CAAC,AAAClB,YAAYF,gBAAiB,KAAK,EAAE,CAAC;YAEzG;QACF;IACF;IAEQJ,cAAc;QACpB,IAAI,CAAC1B,OAAO,CAACmD,MAAM,GAAG,CAAC;QACvB,IAAI,CAACnD,OAAO,CAACoD,MAAM,GAAG,CAAC;QACvB,IAAI,CAACpD,OAAO,CAACqD,OAAO,GAAG,IAAIC;QAC3B,IAAI,CAACtD,OAAO,CAACuD,WAAW,GAAG,IAAID;QAC/B,IAAI,CAACtD,OAAO,CAACwD,SAAS,GAAG,CAAC;QAC1B,IAAI,CAACxD,OAAO,CAACyD,SAAS,GAAG,CAAC;QAC1B,IAAI,CAACzD,OAAO,CAAC0D,YAAY,GAAG,CAAC;QAC7B,IAAI,CAAC1D,OAAO,CAAC2D,YAAY,GAAG,IAAIC;IAClC;IAEA,MAAc/B,+BAA+BL,GAAmB,EAAE;QAChE,MAAMqC,MAAO,MAAMlH,eAAe,IAAI,CAACqD,OAAO,EAAEwB;QAEhDqC,IAAIC,CAAC,GAAG,IAAI,CAAC9D,OAAO,CAAC+D,OAAO,CAACD,CAAC;QAC9BD,IAAIV,MAAM,GAAG,IAAI,CAACnD,OAAO,CAAC+D,OAAO,CAACD,CAAC;QACnCD,IAAIG,OAAO,CAACb,MAAM,GAAG,AAAC,IAAI,CAACnD,OAAO,CAAC+D,OAAO,CAASC,OAAO,CAACb,MAAM;IACnE;IAEAc,oBAA0B;QACxBhI,OAAO,IAAI,CAACe,cAAc,EAAE;YAAEkH,OAAO;YAAM5D,WAAW;QAAK;QAE3D,IAAI,CAACN,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAChG,cAAc,EAAE;IACrF;IAEA,MAAMmH,gCACJ3C,GAAmB,EACnB4C,OAEC,EACc;QACf,MAAMrE,YAAYqE,SAASrE,aAAa,IAAI,CAACA,SAAS;QAEtD,IAAI,CAACkE,iBAAiB;QACtB,IAAI,CAAC5D,gBAAgB;QAErB,IAAI,CAACL,OAAO,CAACyB,YAAY,GAAG;QAC5B,IAAI,CAACC,WAAW;QAChB,MAAM,IAAI,CAAC1B,OAAO,CAAC2B,IAAI;QACvB,MAAM,IAAI,CAAC3B,OAAO,CAAC4B,OAAO;QAE1B,kCAAkC;QAClC,IAAIyC,gBAAgB;QACpB,KAAK,MAAMnC,cAAc,IAAI,CAAClC,OAAO,CAAC8C,OAAO,CAACnE,MAAM,CAAC2F,WAAW,CAAC7D,MAAM,CAACpC,sBAAuB;YAC7F,MAAM,EAAEkG,SAAS,EAAE,GAAG,MAAM,IAAI,CAACvE,OAAO,CAACwE,KAAK,CAAC;gBAAEtC,YAAYA,WAAWC,IAAI;YAAC;YAC7EkC,iBAAiBE;YAEjB,IAAIrC,WAAWuC,QAAQ,EAAE;gBACvB,MAAM,EAAEF,WAAWG,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC1E,OAAO,CAAC2E,aAAa,CAAC;oBACpEzC,YAAYA,WAAWC,IAAI;gBAC7B;gBACAkC,iBAAiBK;YACnB;QACF;QAEA,KAAK,MAAME,gBAAgB,IAAI,CAAC5E,OAAO,CAAC8C,OAAO,CAACnE,MAAM,CAACkG,OAAO,CAACpE,MAAM,CAACpC,sBAAuB;YAC3FgG,iBAAiB,GAAE,gBAAgB;YAEnC,IAAIO,aAAaH,QAAQ,EAAE;gBACzB,MAAM,EAAEF,WAAWO,mBAAmB,EAAE,GAAG,MAAM,IAAI,CAAC9E,OAAO,CAAC+E,mBAAmB,CAAC;oBAChFlC,QAAQ+B,aAAazC,IAAI;gBAC3B;gBACAkC,iBAAiBS;YACnB;QACF;QAEA,IAAI,CAAC9E,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,MAAM,EAAEqB,cAAc,8CAA8C,CAAC;QAGxE,IAAIpH,aAAa;QACjB,IAAI+H,eAA8C,EAAE;QACpD,IAAIC,iBAAiB;QAErB,MAAMC,aAAa;YACjB,IAAIF,aAAajD,MAAM,GAAG,GAAG;gBAC3BjF,wBAAwBkI,cAAc,IAAI,CAAChI,cAAc,EAAEC;gBAC3D,MAAMkI,aACJd,gBAAgB,IAAIpB,KAAKC,KAAK,CAAC,AAAC+B,iBAAiBZ,gBAAiB,OAAO;gBAC3E,IAAI,CAACrE,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,YAAY,EAAE/F,WAAW,MAAM,EAAE+H,aAAajD,MAAM,CAAC,WAAW,EAAEkD,eAAe,CAAC,EAAEZ,cAAc,GAAG,EAAEc,WAAW,EAAE,CAAC;gBAExHlI;gBACA+H,eAAe,EAAE;YACnB;QACF;QAEA,MAAMI,YAAY,CAAC9G;YACjB0G,aAAa3F,IAAI,CAACf;YAClB2G;YACA,IAAID,aAAajD,MAAM,IAAIhC,WAAW;gBACpCmF;YACF;QACF;QAEA,KAAK,MAAMhD,cAAc,IAAI,CAAClC,OAAO,CAAC8C,OAAO,CAACnE,MAAM,CAAC2F,WAAW,CAAC7D,MAAM,CAACpC,sBAAuB;YAC7F,IAAIgH,OAAO;YACX,IAAIC,UAAU;YAEd,MAAOA,QAAS;gBACd,MAAM,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAG,MAAM,IAAI,CAACxF,OAAO,CAACyF,IAAI,CAAC;oBACpDvD,YAAYA,WAAWC,IAAI;oBAC3BuD,OAAO3F;oBACPsF;gBACF;gBAEA,KAAK,MAAMM,OAAOJ,KAAM;oBACtB,MAAMjH,SAAsC;wBAC1CiE,IAAIoD,IAAIpD,EAAE;wBACVJ,MAAMD,WAAWC,IAAI;wBACrB1D,MAAM;wBACNmH,QAAQlH,uBAAuB;4BAC7BC,QAAQ,IAAI,CAACqB,OAAO,CAAC8C,OAAO,CAACnE,MAAM;4BACnCC,MAAM+G;4BACN9G,QAAQqD,WAAW1D,eAAe;4BAClCM,gBAAgB,EAAE;4BAClBC,mBAAmB;wBACrB;wBACAqD,cAAcuD;oBAChB;oBAEAP,UAAU9G;gBACZ;gBAEA,IAAI,CAAC0B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,UAAU,EAAEuC,KAAKxD,MAAM,CAAC,cAAc,EAAEG,WAAWC,IAAI,CAAC,OAAO,EAAEkD,KAAK,CAAC,CAAC;gBAG3EC,UAAUE;gBACVH;YACF;YAEA,IAAInD,WAAWuC,QAAQ,EAAE;gBACvB,IAAIoB,cAAc;gBAClB,IAAIC,kBAAkB;gBAEtB,MAAOA,gBAAiB;oBACtB,MAAM,EAAEP,MAAMQ,WAAW,EAAEP,aAAaQ,kBAAkB,EAAE,GAC1D,MAAM,IAAI,CAAChG,OAAO,CAACiG,YAAY,CAAC;wBAC9B/D,YAAYA,WAAWC,IAAI;wBAC3BuD,OAAO3F;wBACPsF,MAAMQ;oBACR;oBAEF,KAAK,MAAMK,cAAcH,YAAa;wBACpC,MAAMzH,SAAsC;4BAC1CiE,IAAI2D,WAAW3D,EAAE;4BACjBJ,MAAMD,WAAWC,IAAI;4BACrB1D,MAAM;4BACNmH,QAAQlH,uBAAuB;gCAC7BC,QAAQ,IAAI,CAACqB,OAAO,CAAC8C,OAAO,CAACnE,MAAM;gCACnCC,MAAMsH;gCACNrH,QAAQxC,6BAA6B,IAAI,CAAC2D,OAAO,CAAC8C,OAAO,CAACnE,MAAM,EAAEuD,YAAY;gCAC9EpD,gBAAgB,EAAE;gCAClBC,mBAAmB;4BACrB;4BACAqD,cAAc8D;wBAChB;wBAEAd,UAAU9G;oBACZ;oBAEA,IAAI,CAAC0B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,UAAU,EAAE+C,YAAYhE,MAAM,CAAC,eAAe,EAAEG,WAAWC,IAAI,CAAC,OAAO,EAAE0D,YAAY,CAAC,CAAC;oBAG1FC,kBAAkBE;oBAClBH;gBACF;YACF;QACF;QAEA,KAAK,MAAMjB,gBAAgB,IAAI,CAAC5E,OAAO,CAAC8C,OAAO,CAACnE,MAAM,CAACkG,OAAO,CAACpE,MAAM,CAACpC,sBAAuB;YAC3F,MAAM8H,YAAY,MAAM,IAAI,CAACnG,OAAO,CAACoG,UAAU,CAAC;gBAAEjE,MAAMyC,aAAazC,IAAI;YAAC;YAE1E,MAAM7D,SAAsC;gBAC1C6D,MAAMyC,aAAazC,IAAI;gBACvB1D,MAAM;gBACNmH,QAAQlH,uBAAuB;oBAC7BC,QAAQ,IAAI,CAACqB,OAAO,CAAC8C,OAAO,CAACnE,MAAM;oBACnCC,MAAMuH;oBACNtH,QAAQ+F,aAAapG,eAAe;oBACpCM,gBAAgB,EAAE;oBAClBC,mBAAmB;gBACrB;gBACAqD,cAAc+D;YAChB;YAEAf,UAAU9G;YACV,IAAI,CAAC0B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,iBAAiB,EAAE4B,aAAazC,IAAI,EAAE;YAExE,IAAIyC,aAAaH,QAAQ,EAAE;gBACzB,IAAI4B,oBAAoB;gBACxB,IAAIC,wBAAwB;gBAE5B,MAAOA,sBAAuB;oBAC5B,MAAM,EAAEf,MAAMgB,iBAAiB,EAAEf,aAAagB,wBAAwB,EAAE,GACtE,MAAM,IAAI,CAACxG,OAAO,CAACyG,kBAAkB,CAAC;wBACpC5D,QAAQ+B,aAAazC,IAAI;wBACzBuD,OAAO3F;wBACPsF,MAAMgB;oBACR;oBAEF,KAAK,MAAMK,oBAAoBH,kBAAmB;wBAChD,MAAMjI,SAAsC;4BAC1CiE,IAAImE,iBAAiBnE,EAAE;4BACvBJ,MAAMyC,aAAazC,IAAI;4BACvB1D,MAAM;4BACNmH,QAAQlH,uBAAuB;gCAC7BC,QAAQ,IAAI,CAACqB,OAAO,CAAC8C,OAAO,CAACnE,MAAM;gCACnCC,MAAM8H;gCACN7H,QAAQvC,yBAAyB,IAAI,CAAC0D,OAAO,CAAC8C,OAAO,CAACnE,MAAM,EAAEiG,cAAc;gCAC5E9F,gBAAgB,EAAE;gCAClBC,mBAAmB;4BACrB;4BACAqD,cAAcsE;wBAChB;wBAEAtB,UAAU9G;oBACZ;oBAEA,IAAI,CAAC0B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,UAAU,EAAEuD,kBAAkBxE,MAAM,CAAC,sBAAsB,EAAE6C,aAAazC,IAAI,CAAC,OAAO,EAAEkE,kBAAkB,CAAC,CAAC;oBAG/GC,wBAAwBE;oBACxBH;gBACF;YACF;QACF;QAEAnB;QAEA,IAAI,CAAClF,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,mBAAmB,EAAEiC,eAAe,iBAAiB,EAAEhI,WAAW,QAAQ,CAAC;IAEhF;IAEA,MAAM0J,yBAIH;QACD,MAAM,EAAEC,mBAAmB,EAAEC,iBAAiB,EAAE,GAAG,IAAI,CAAC7G,OAAO,CAAC8G,iBAAiB;QAEjF,MAAMC,oBAAoB,MAAMH,oBAAoB,IAAI,CAAC5G,OAAO,CAACmD,MAAM;QACvE,IAAI,CAACnD,OAAO,CAACyB,YAAY,GAAG;QAC5B,IAAI,CAACC,WAAW;QAEhB,MAAM,IAAI,CAAC1B,OAAO,CAAC2B,IAAI;QACvB,MAAMqF,mBAAmB,MAAMJ,oBAAoB,IAAI,CAAC5G,OAAO,CAACmD,MAAM;QACtE,IAAI,CAACnD,OAAO,CAACyB,YAAY,GAAG;QAC5B,IAAI,CAACC,WAAW;QAChB,MAAM,IAAI,CAAC1B,OAAO,CAAC2B,IAAI;QAEvB,MAAMsF,aAAa,MAAM3J,qBACvB,IAAMuJ,kBAAkBE,mBAAmBC,mBAC3C;YACExJ,aAAa;QACf;QAGF,MAAM0J,aAAa,CAAC,SAAS,EAAE,IAAI,CAAChH,aAAa,CAAC,CAAC,CAAC,GAAG;QAEvD,OAAO;YACLiH,KAAK,IAAI,CAAClH,kBAAkB,CAAC;gBAC3BiH;gBACAD,YAAYA,WAAWxG,MAAM,CAAC,CAAC2G,OAAS,CAACA,KAAKzG,UAAU,CAAC;YAC3D;YACA0G,QAAQ,IAAI,CAACpH,kBAAkB,CAAC;gBAC9BiH;gBACAD,YAAY;uBAAIA,WAAWxG,MAAM,CAAC,CAAC2G,OAASA,KAAKzG,UAAU,CAAC;iBAAS;YACvE;YACA2G,sBAAqBpK,QAAQ;gBAC3BhB,cAAc,GAAGgB,SAAS,KAAK,CAAC,EAAEE,KAAKC,SAAS,CAAC2J,kBAAkB,MAAM;YAC3E;QACF;IACF;IAEA,MAAMO,8BACJ/F,GAAmB,EACnB4C,OAEC,EACc;QACf,MAAMoD,eAAepD,SAASoD,gBAAgB;QAE9C,IAAI1F,gBAAgB;QACpB,IAAI2F,cAAc;QAElB,KAAK,MAAM1K,YAAY,IAAI,CAACwD,4BAA4B,GAAI;YAC1DkH,cAAc;YACd3F,iBAAiB/E,SAASgF,MAAM;YAEhC,IAAI,CAAC/B,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,qBAAqB,EAAEjG,SAASgF,MAAM,CAAC,kBAAkB,EAAED,cAAc,CAAC,CAAC;YAG9E,MAAM,IAAI,CAACP,eAAe,CAACxE,UAAUyE;QACvC;QAEA,IAAI,CAACiG,aAAa;YAChB,IAAI,CAACzH,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAAC2E,IAAI,CAAC;YACjC;QACF;QAEA,IAAI,CAAC1H,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,uBAAuB,EAAElB,cAAc,0BAA0B,CAAC;QAGrE,IAAI0F,cAAc;YAChB,IAAI,CAACvD,iBAAiB;QACxB,OAAO;YACL,IAAI,CAACjE,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B,CAAC,yBAAyB,EAAE,IAAI,CAAChG,cAAc,CAAC,sBAAsB,CAAC;QAE3E;IACF;IAEA2K,cAAc3K,cAAsB,EAAQ;QAC1C,IAAI,CAACA,cAAc,GAAGA;IACxB;IAEA,MAAM4K,0BAAyC;QAC7C,IAAIC;QAEJ,IAAI;YACFA,aAAarL;QACf,EAAE,OAAM;YACN,IAAI,CAACwD,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B;YAEF;QACF;QAEA,MAAM8E,aAAa9L,aAAa6L,YAAY;QAE5C,MAAME,SAASrL,GAAGsL,gBAAgB,CAACH,YAAYC,YAAYpL,GAAGuL,YAAY,CAACC,MAAM;QAEjF,IAAIC,aAAa;QAEjB,MAAMnJ,SAAStC,GAAG0L,SAAS,CAACL,QAAQ;YAClC,CAACM,MAAQ,CAACC;oBACR,MAAMC,UAAUF,IAAIE,OAAO;oBAE3B,MAAMC,QAAoB,CAACC;wBACzB,IACE/L,GAAGgM,oBAAoB,CAACD,SACxB/L,GAAGiM,YAAY,CAACF,KAAKxK,IAAI,KACzBwK,KAAKxK,IAAI,CAAC2K,IAAI,KAAK,QACnBlM,GAAGmM,gBAAgB,CAACJ,KAAKK,WAAW,KACpCL,KAAKK,WAAW,CAACC,SAAS,CAAChH,MAAM,GAAG,KACpCrF,GAAGsM,yBAAyB,CAACP,KAAKK,WAAW,CAACC,SAAS,CAAC,EAAE,GAC1D;4BACA,MAAME,OAAOR,KAAKK,WAAW;4BAC7B,MAAMI,MAAMT,KAAKK,WAAW,CAACC,SAAS,CAAC,EAAE;4BAEzC,MAAMI,gBAAgBD,IAAIE,UAAU,CAAC3I,MAAM,CAAC,CAAC4I;gCAC3C,IAAI,CAAC3M,GAAGgM,oBAAoB,CAACW,OAAO;oCAClC,OAAO;gCACT;gCAEA,OAAO,CAAE3M,CAAAA,GAAGiM,YAAY,CAACU,KAAKpL,IAAI,KAAKoL,KAAKpL,IAAI,CAAC2K,IAAI,KAAK,cAAa;4BACzE;4BAEA,MAAMU,cAAcf,QAAQgB,wBAAwB,CAClD,gBACAhB,QAAQiB,UAAU;4BAEpBrB,aAAa;4BACb,MAAMsB,YAAYlB,QAAQmB,6BAA6B,CAACR,KAAK;mCACxDC;gCACHG;6BACD;4BAED,MAAMK,UAAUpB,QAAQqB,oBAAoB,CAC1CX,MACAA,KAAKY,UAAU,EACfZ,KAAKa,aAAa,EAClB;gCAACL;6BAAU;4BAGb,OAAOlB,QAAQwB,wBAAwB,CAACtB,MAAMA,KAAKxK,IAAI,EAAE0L;wBAC3D;wBAEA,OAAOjN,GAAGsN,cAAc,CAACvB,MAAMD,OAAOH;oBACxC;oBAEA,OAAO3L,GAAGuN,SAAS,CAAC3B,YAAYE;gBAClC;SACD;QAED,IAAI,CAACL,YAAY;YACf,IAAI,CAACnI,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAC9B;YAEF;QACF;QAEA,MAAMkH,UAAUxN,GAAGyN,aAAa,CAAC;YAAEC,SAAS1N,GAAG2N,WAAW,CAACC,QAAQ;QAAC;QACpE,IAAIC,SAASL,QAAQM,SAAS,CAACxL,OAAOyL,WAAW,CAAC,EAAE;QAEpD,IAAI;YACF,sEAAsE;YACtE,MAAMC,WAAW,MAAMnO,cAAyC;YAChE,MAAMsL,aAAa,MAAM6C,SAASC,iBAAiB;YACnD,MAAMhM,SAASkJ,aAAa,MAAM6C,SAASE,aAAa,CAAC/C,cAAc,CAAC;YACxE0C,SAAS,MAAMG,SAASG,MAAM,CAACN,QAAQ;gBAAE,GAAG5L,MAAM;gBAAEmM,QAAQ;YAAa;QAC3E,EAAE,OAAOC,KAAK;YACZ,IAAI,CAAC/K,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACiI,KAAK,CAAC;gBAChCD;gBACAE,KAAK;YACP;QACF;QAEA/O,cAAc2L,YAAY0C,QAAQ;QAClC,IAAI,CAACvK,OAAO,CAAC8C,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,QAAQ,EAAE6E,WAAW,wBAAwB,CAAC;IAClF;AACF;AAEA,OAAO,MAAMqD,6BAA6B,CAAC,EACzClL,OAAO,EACPE,aAAa,EACbD,kBAAkB,EAKnB;IACC,OAAO,IAAIH,yBAAyBE,SAASC,oBAAoBC;AACnE,EAAC;AAED,OAAO,MAAMiL,0BAA0B,CAACrI;IACtC,MAAMsI,WAAW,AAACtI,QAAQuI,EAAE,CAAoBC,oBAAoB;IAEpE,IAAI,CAACF,UAAU;QACb,MAAM,IAAIhP,SAAS,CAAC,wCAAwC,EAAE0G,QAAQuI,EAAE,CAACE,WAAW,EAAE;IACxF;IAEA,OAAOH;AACT,EAAC;AAED,OAAO,MAAMI,8CAA8C,CAAC,EAC1DD,WAAW,EAGZ;IACC,OAAO,OAAO,EAAErO,QAAQ,EAAE4F,OAAO,EAAE;QACjC,MAAMsI,WAAWD,wBAAwBrI;QAEzC,MAAM2I,sBAAsB,MAAML,SAASzE,sBAAsB;QAEjE8E,oBAAoBnE,oBAAoB,CAACpK;QAEzC,MAAMkO,SAASxD,uBAAuB;QACtC,MAAM8D,QAAQ,CAAC;;;;;AAKnB,EAAED,oBAAoBtE,GAAG,CAAC;;;;;AAK1B,EAAEsE,oBAAoBpE,MAAM,CAAC;;EAE3B,CAAC;QAEC,OAAO;YACLsE,SAAS,CAAC;yCACyB,EAAEJ,YAAY;;;;;;;;;2CASZ,EAAE1O,iBAAiB;AAC9D,CAAC;YACK6O;QACF;IACF;AACF,EAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"escapeSQLValue.d.ts","sourceRoot":"","sources":["../../src/utilities/escapeSQLValue.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,QAAmB,CAAA;AAEjD,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAoBzE,CAAA"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { APIError } from 'payload';
|
|
2
|
-
export const SAFE_STRING_REGEX = /^[\w @.\-+:]*$/;
|
|
3
|
-
export const escapeSQLValue = (value)=>{
|
|
4
|
-
if (value === null) {
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
8
|
-
return value;
|
|
9
|
-
}
|
|
10
|
-
if (typeof value !== 'string') {
|
|
11
|
-
throw new Error('Invalid value type');
|
|
12
|
-
}
|
|
13
|
-
if (!SAFE_STRING_REGEX.test(value)) {
|
|
14
|
-
throw new APIError(`${value} is not allowed as a JSON query value`, 400);
|
|
15
|
-
}
|
|
16
|
-
const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
17
|
-
return escaped;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=escapeSQLValue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/escapeSQLValue.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nexport const SAFE_STRING_REGEX = /^[\\w @.\\-+:]*$/\n\nexport const escapeSQLValue = (value: unknown): boolean | null | number | string => {\n if (value === null) {\n return null\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value\n }\n\n if (typeof value !== 'string') {\n throw new Error('Invalid value type')\n }\n\n if (!SAFE_STRING_REGEX.test(value)) {\n throw new APIError(`${value} is not allowed as a JSON query value`, 400)\n }\n\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n return escaped\n}\n"],"names":["APIError","SAFE_STRING_REGEX","escapeSQLValue","value","Error","test","escaped","replace"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAElC,OAAO,MAAMC,oBAAoB,iBAAgB;AAEjD,OAAO,MAAMC,iBAAiB,CAACC;IAC7B,IAAIA,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAAW;QAC3D,OAAOA;IACT;IAEA,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAI,CAACH,kBAAkBI,IAAI,CAACF,QAAQ;QAClC,MAAM,IAAIH,SAAS,GAAGG,MAAM,qCAAqC,CAAC,EAAE;IACtE;IAEA,MAAMG,UAAUH,MAAMI,OAAO,CAAC,OAAO,QAAQA,OAAO,CAAC,MAAM;IAE3D,OAAOD;AACT,EAAC"}
|