Home / Function/ applyJsonDiff() — drizzle-orm Function Reference

applyJsonDiff() — drizzle-orm Function Reference

Architecture documentation for the applyJsonDiff() function in jsonDiffer.js from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b["applyJsonDiff()"]
  42cd5bcb_caa4_6b61_11ea_da1b767eeadd["jsonDiffer.js"]
  3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b -->|defined in| 42cd5bcb_caa4_6b61_11ea_da1b767eeadd
  c7a398db_43c9_7771_09b7_73bc09e703e8["applyPgSnapshotsDiff()"]
  c7a398db_43c9_7771_09b7_73bc09e703e8 -->|calls| 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b
  a5972ffc_ff1b_9523_2495_5373af710e65["applyMysqlSnapshotsDiff()"]
  a5972ffc_ff1b_9523_2495_5373af710e65 -->|calls| 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b
  d4992b27_bf78_8099_5134_750cef1c518c["applySingleStoreSnapshotsDiff()"]
  d4992b27_bf78_8099_5134_750cef1c518c -->|calls| 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b
  d9097b7e_1e27_d29f_7732_f2fa1447f2b8["applySqliteSnapshotsDiff()"]
  d9097b7e_1e27_d29f_7732_f2fa1447f2b8 -->|calls| 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b
  55569cde_7638_9cfc_9dcd_34636d975ec3["applyLibSQLSnapshotsDiff()"]
  55569cde_7638_9cfc_9dcd_34636d975ec3 -->|calls| 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b
  9996c7a6_7ccf_96a1_145d_f1d2537e79b6["mapArraysDiff()"]
  3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b -->|calls| 9996c7a6_7ccf_96a1_145d_f1d2537e79b6
  906f6136_df62_f258_6513_16b2c830beec["findAlternationsInTable()"]
  3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b -->|calls| 906f6136_df62_f258_6513_16b2c830beec
  style 3b61cdb0_0771_3cda_8dbf_5ecbe8a49a2b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-kit/src/jsonDiffer.js lines 208–411

export function applyJsonDiff(json1, json2) {
	json1 = JSON.parse(JSON.stringify(json1));
	json2 = JSON.parse(JSON.stringify(json2));

	// deep copy, needed because of the bug in diff library
	const rawDiff = diff(json1, json2);

	const difference = JSON.parse(JSON.stringify(rawDiff || {}));
	difference.schemas = difference.schemas || {};
	difference.tables = difference.tables || {};
	difference.enums = difference.enums || {};
	difference.sequences = difference.sequences || {};
	difference.roles = difference.roles || {};
	difference.policies = difference.policies || {};
	difference.views = difference.views || {};

	// remove added/deleted schemas
	const schemaKeys = Object.keys(difference.schemas);
	for (let key of schemaKeys) {
		if (key.endsWith('__added') || key.endsWith('__deleted')) {
			delete difference.schemas[key];
			continue;
		}
	}

	// remove added/deleted tables
	const tableKeys = Object.keys(difference.tables);
	for (let key of tableKeys) {
		if (key.endsWith('__added') || key.endsWith('__deleted')) {
			delete difference.tables[key];
			continue;
		}

		// supply table name and schema for altered tables
		const table = json1.tables[key];
		difference.tables[key] = {
			name: table.name,
			schema: table.schema,
			...difference.tables[key],
		};
	}

	for (let [tableKey, tableValue] of Object.entries(difference.tables)) {
		const table = difference.tables[tableKey];
		const columns = tableValue.columns || {};
		const columnKeys = Object.keys(columns);
		for (let key of columnKeys) {
			if (key.endsWith('__added') || key.endsWith('__deleted')) {
				delete table.columns[key];
				continue;
			}
		}

		if (Object.keys(columns).length === 0) {
			delete table['columns'];
		}

		if (
			'name' in table
			&& 'schema' in table
			&& Object.keys(table).length === 2
		) {
			delete difference.tables[tableKey];
		}
	}

	const enumsEntries = Object.entries(difference.enums);
	const alteredEnums = enumsEntries
		.filter((it) => !(it[0].includes('__added') || it[0].includes('__deleted')))
		.map((it) => {
			const enumEntry = json1.enums[it[0]];
			const { name, schema, values } = enumEntry;

			const sequence = mapArraysDiff(values, it[1].values);
			const addedValues = sequence
				.filter((it) => it.type === 'added')
				.map((it) => {
					return {
						before: it.before,
						value: it.value,
					};

Domain

Subdomains

Frequently Asked Questions

What does applyJsonDiff() do?
applyJsonDiff() is a function in the drizzle-orm codebase, defined in drizzle-kit/src/jsonDiffer.js.
Where is applyJsonDiff() defined?
applyJsonDiff() is defined in drizzle-kit/src/jsonDiffer.js at line 208.
What does applyJsonDiff() call?
applyJsonDiff() calls 2 function(s): findAlternationsInTable, mapArraysDiff.
What calls applyJsonDiff()?
applyJsonDiff() is called by 5 function(s): applyLibSQLSnapshotsDiff, applyMysqlSnapshotsDiff, applyPgSnapshotsDiff, applySingleStoreSnapshotsDiff, applySqliteSnapshotsDiff.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free