instant-cli 0.22.96-experimental.drewh-ts-target.20761590091.1 → 0.22.96-experimental.surgical.20765817844.1

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.
Files changed (41) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/__tests__/__snapshots__/updateSchemaFile.test.ts.snap +248 -0
  3. package/__tests__/updateSchemaFile.test.ts +557 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1152 -1044
  6. package/dist/index.js.map +1 -1
  7. package/dist/rename.js +69 -58
  8. package/dist/rename.js.map +1 -1
  9. package/dist/renderSchemaPlan.js +22 -10
  10. package/dist/renderSchemaPlan.js.map +1 -1
  11. package/dist/ui/index.js +102 -115
  12. package/dist/ui/index.js.map +1 -1
  13. package/dist/ui/lib.js +30 -29
  14. package/dist/ui/lib.js.map +1 -1
  15. package/dist/util/fs.js +30 -17
  16. package/dist/util/fs.js.map +1 -1
  17. package/dist/util/isHeadlessEnvironment.js +1 -1
  18. package/dist/util/isHeadlessEnvironment.js.map +1 -1
  19. package/dist/util/loadConfig.js +32 -32
  20. package/dist/util/loadConfig.js.map +1 -1
  21. package/dist/util/packageManager.js +37 -26
  22. package/dist/util/packageManager.js.map +1 -1
  23. package/dist/util/projectDir.js +27 -16
  24. package/dist/util/projectDir.js.map +1 -1
  25. package/dist/util/promptOk.js +21 -14
  26. package/dist/util/promptOk.js.map +1 -1
  27. package/dist/util/renamePrompt.js +2 -4
  28. package/dist/util/renamePrompt.js.map +1 -1
  29. package/dist/util/updateSchemaFile.d.ts +3 -0
  30. package/dist/util/updateSchemaFile.d.ts.map +1 -0
  31. package/dist/util/updateSchemaFile.js +610 -0
  32. package/dist/util/updateSchemaFile.js.map +1 -0
  33. package/package.json +4 -4
  34. package/src/index.js +19 -10
  35. package/src/util/updateSchemaFile.ts +760 -0
  36. package/__tests__/mergeSchema.test.ts +0 -197
  37. package/dist/util/mergeSchema.d.ts +0 -2
  38. package/dist/util/mergeSchema.d.ts.map +0 -1
  39. package/dist/util/mergeSchema.js +0 -334
  40. package/dist/util/mergeSchema.js.map +0 -1
  41. package/src/util/mergeSchema.js +0 -364
package/dist/rename.js CHANGED
@@ -1,3 +1,12 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  /**
2
11
  * Build a function to resolve renames from cli rename flags
3
12
  * The diffSchemas function takes a fixed amount of arguments so we
@@ -7,73 +16,75 @@
7
16
  * @returns
8
17
  */
9
18
  export function buildAutoRenameSelector(opts) {
10
- return async function (created, promptData, extraInfo) {
11
- if (!opts.rename || !Array.isArray(opts.rename)) {
12
- return created;
13
- }
14
- // Parse rename options: format is "from:to"
15
- // note that it saves backwards since we will be testing against the base
16
- // case of a created attr
17
- const renameMap = new Map();
18
- for (const renameStr of opts.rename) {
19
- const [from, to] = renameStr.split(':');
20
- if (from && to) {
21
- renameMap.set(to.trim(), from.trim());
19
+ return function (created, promptData, extraInfo) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ if (!opts.rename || !Array.isArray(opts.rename)) {
22
+ return created;
22
23
  }
23
- }
24
- let lookupNames = [];
25
- if (extraInfo?.type === 'attribute' && extraInfo?.entityName) {
26
- lookupNames = [`${extraInfo.entityName}.${created}`];
27
- }
28
- else if (extraInfo?.type === 'link') {
29
- // Extract both forward and reverse parts
30
- const parts = created.split('<->');
31
- lookupNames = [parts[0], parts[1]];
32
- }
33
- else {
34
- return created;
35
- }
36
- // Try to find a match in the rename map using the lookup names
37
- let fromAttr = null;
38
- for (const lookupName of lookupNames) {
39
- if (renameMap.has(lookupName)) {
40
- fromAttr = renameMap.get(lookupName);
41
- break;
24
+ // Parse rename options: format is "from:to"
25
+ // note that it saves backwards since we will be testing against the base
26
+ // case of a created attr
27
+ const renameMap = new Map();
28
+ for (const renameStr of opts.rename) {
29
+ const [from, to] = renameStr.split(':');
30
+ if (from && to) {
31
+ renameMap.set(to.trim(), from.trim());
32
+ }
42
33
  }
43
- }
44
- if (fromAttr) {
45
- let fromValue;
46
- if (extraInfo?.type === 'attribute') {
47
- fromValue = fromAttr.split('.').pop();
34
+ let lookupNames = [];
35
+ if ((extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.type) === 'attribute' && (extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.entityName)) {
36
+ lookupNames = [`${extraInfo.entityName}.${created}`];
37
+ }
38
+ else if ((extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.type) === 'link') {
39
+ // Extract both forward and reverse parts
40
+ const parts = created.split('<->');
41
+ lookupNames = [parts[0], parts[1]];
48
42
  }
49
43
  else {
50
- const matchingItem = promptData.find((item) => {
51
- const itemStr = typeof item === 'string' ? item : item.from;
52
- const itemParts = itemStr.split('<->');
53
- return itemParts[0] === fromAttr || itemParts[1] === fromAttr;
54
- });
55
- if (matchingItem) {
56
- fromValue =
57
- typeof matchingItem === 'string' ? matchingItem : matchingItem.from;
58
- }
59
- else {
60
- return created;
44
+ return created;
45
+ }
46
+ // Try to find a match in the rename map using the lookup names
47
+ let fromAttr = null;
48
+ for (const lookupName of lookupNames) {
49
+ if (renameMap.has(lookupName)) {
50
+ fromAttr = renameMap.get(lookupName);
51
+ break;
61
52
  }
62
53
  }
63
- const hasMatch = promptData.some((item) => {
64
- if (typeof item === 'string') {
65
- return item === fromValue;
54
+ if (fromAttr) {
55
+ let fromValue;
56
+ if ((extraInfo === null || extraInfo === void 0 ? void 0 : extraInfo.type) === 'attribute') {
57
+ fromValue = fromAttr.split('.').pop();
58
+ }
59
+ else {
60
+ const matchingItem = promptData.find((item) => {
61
+ const itemStr = typeof item === 'string' ? item : item.from;
62
+ const itemParts = itemStr.split('<->');
63
+ return itemParts[0] === fromAttr || itemParts[1] === fromAttr;
64
+ });
65
+ if (matchingItem) {
66
+ fromValue =
67
+ typeof matchingItem === 'string' ? matchingItem : matchingItem.from;
68
+ }
69
+ else {
70
+ return created;
71
+ }
66
72
  }
67
- else if (item.from) {
68
- return item.from === fromValue;
73
+ const hasMatch = promptData.some((item) => {
74
+ if (typeof item === 'string') {
75
+ return item === fromValue;
76
+ }
77
+ else if (item.from) {
78
+ return item.from === fromValue;
79
+ }
80
+ return false;
81
+ });
82
+ if (hasMatch) {
83
+ return { from: fromValue, to: created };
69
84
  }
70
- return false;
71
- });
72
- if (hasMatch) {
73
- return { from: fromValue, to: created };
74
85
  }
75
- }
76
- return created;
86
+ return created;
87
+ });
77
88
  };
78
89
  }
79
90
  //# sourceMappingURL=rename.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rename.js","sourceRoot":"","sources":["../src/rename.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Build a function to resolve renames from cli rename flags\n * The diffSchemas function takes a fixed amount of arguments so we\n * return a function from a function here\n * exported for tests only\n * @param {*} opts program arguments from commander\n * @returns\n */\nexport function buildAutoRenameSelector(opts) {\n return async function (created, promptData, extraInfo) {\n if (!opts.rename || !Array.isArray(opts.rename)) {\n return created;\n }\n\n // Parse rename options: format is \"from:to\"\n // note that it saves backwards since we will be testing against the base\n // case of a created attr\n const renameMap = new Map();\n for (const renameStr of opts.rename) {\n const [from, to] = renameStr.split(':');\n if (from && to) {\n renameMap.set(to.trim(), from.trim());\n }\n }\n\n let lookupNames: string[] = [];\n if (extraInfo?.type === 'attribute' && extraInfo?.entityName) {\n lookupNames = [`${extraInfo.entityName}.${created}`];\n } else if (extraInfo?.type === 'link') {\n // Extract both forward and reverse parts\n const parts = created.split('<->');\n lookupNames = [parts[0], parts[1]];\n } else {\n return created;\n }\n\n // Try to find a match in the rename map using the lookup names\n let fromAttr: string | null = null;\n for (const lookupName of lookupNames) {\n if (renameMap.has(lookupName)) {\n fromAttr = renameMap.get(lookupName);\n break;\n }\n }\n\n if (fromAttr) {\n let fromValue;\n if (extraInfo?.type === 'attribute') {\n fromValue = fromAttr.split('.').pop();\n } else {\n const matchingItem = promptData.find((item) => {\n const itemStr = typeof item === 'string' ? item : item.from;\n const itemParts = itemStr.split('<->');\n return itemParts[0] === fromAttr || itemParts[1] === fromAttr;\n });\n\n if (matchingItem) {\n fromValue =\n typeof matchingItem === 'string' ? matchingItem : matchingItem.from;\n } else {\n return created;\n }\n }\n\n const hasMatch = promptData.some((item) => {\n if (typeof item === 'string') {\n return item === fromValue;\n } else if (item.from) {\n return item.from === fromValue;\n }\n return false;\n });\n\n if (hasMatch) {\n return { from: fromValue, to: created };\n }\n }\n\n return created;\n };\n}\n"]}
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../src/rename.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Build a function to resolve renames from cli rename flags\n * The diffSchemas function takes a fixed amount of arguments so we\n * return a function from a function here\n * exported for tests only\n * @param {*} opts program arguments from commander\n * @returns\n */\nexport function buildAutoRenameSelector(opts) {\n return async function (created, promptData, extraInfo) {\n if (!opts.rename || !Array.isArray(opts.rename)) {\n return created;\n }\n\n // Parse rename options: format is \"from:to\"\n // note that it saves backwards since we will be testing against the base\n // case of a created attr\n const renameMap = new Map();\n for (const renameStr of opts.rename) {\n const [from, to] = renameStr.split(':');\n if (from && to) {\n renameMap.set(to.trim(), from.trim());\n }\n }\n\n let lookupNames: string[] = [];\n if (extraInfo?.type === 'attribute' && extraInfo?.entityName) {\n lookupNames = [`${extraInfo.entityName}.${created}`];\n } else if (extraInfo?.type === 'link') {\n // Extract both forward and reverse parts\n const parts = created.split('<->');\n lookupNames = [parts[0], parts[1]];\n } else {\n return created;\n }\n\n // Try to find a match in the rename map using the lookup names\n let fromAttr: string | null = null;\n for (const lookupName of lookupNames) {\n if (renameMap.has(lookupName)) {\n fromAttr = renameMap.get(lookupName);\n break;\n }\n }\n\n if (fromAttr) {\n let fromValue;\n if (extraInfo?.type === 'attribute') {\n fromValue = fromAttr.split('.').pop();\n } else {\n const matchingItem = promptData.find((item) => {\n const itemStr = typeof item === 'string' ? item : item.from;\n const itemParts = itemStr.split('<->');\n return itemParts[0] === fromAttr || itemParts[1] === fromAttr;\n });\n\n if (matchingItem) {\n fromValue =\n typeof matchingItem === 'string' ? matchingItem : matchingItem.from;\n } else {\n return created;\n }\n }\n\n const hasMatch = promptData.some((item) => {\n if (typeof item === 'string') {\n return item === fromValue;\n } else if (item.from) {\n return item.from === fromValue;\n }\n return false;\n });\n\n if (hasMatch) {\n return { from: fromValue, to: created };\n }\n }\n\n return created;\n };\n}\n"]}
@@ -1,7 +1,17 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import chalk from 'chalk';
2
11
  import stripAnsi from 'strip-ansi';
3
12
  import { promptOk } from './util/promptOk.js';
4
13
  const renderLinkUpdate = (tx, possiblePrevAttrs) => {
14
+ var _a, _b, _c;
5
15
  if (tx.partialAttr['value-type'] !== 'ref') {
6
16
  throw new Error('Invalid value type for link update');
7
17
  }
@@ -12,7 +22,7 @@ const renderLinkUpdate = (tx, possiblePrevAttrs) => {
12
22
  }) || null
13
23
  : null;
14
24
  let changeType = 'UPDATE';
15
- if (tx.partialAttr['forward-identity']?.attrName &&
25
+ if (((_a = tx.partialAttr['forward-identity']) === null || _a === void 0 ? void 0 : _a.attrName) &&
16
26
  tx.identifier.attrName !== tx.partialAttr['forward-identity'].attrName) {
17
27
  changeType = 'RENAME';
18
28
  }
@@ -20,8 +30,8 @@ const renderLinkUpdate = (tx, possiblePrevAttrs) => {
20
30
  let reverseLabel = '';
21
31
  if (oldAttr) {
22
32
  // Check for reverse rename
23
- if (tx.partialAttr['reverse-identity']?.attrName &&
24
- oldAttr['reverse-identity']?.[2] !==
33
+ if (((_b = tx.partialAttr['reverse-identity']) === null || _b === void 0 ? void 0 : _b.attrName) &&
34
+ ((_c = oldAttr['reverse-identity']) === null || _c === void 0 ? void 0 : _c[2]) !==
25
35
  tx.partialAttr['reverse-identity'].attrName) {
26
36
  changeType = 'RENAME REVERSE';
27
37
  }
@@ -110,10 +120,10 @@ export const groupSteps = (steps) => {
110
120
  });
111
121
  return [...collapsed, ...otherSteps];
112
122
  };
113
- export const confirmImportantSteps = async (planSteps) => {
123
+ export const confirmImportantSteps = (planSteps) => __awaiter(void 0, void 0, void 0, function* () {
114
124
  for (const step of planSteps) {
115
125
  if (step.type === 'delete-namespace') {
116
- const ok = await promptOk({
126
+ const ok = yield promptOk({
117
127
  promptText: `Are you sure you want to delete namespace ${step.namespace}?`,
118
128
  });
119
129
  if (!ok) {
@@ -121,15 +131,17 @@ export const confirmImportantSteps = async (planSteps) => {
121
131
  }
122
132
  }
123
133
  }
124
- };
134
+ });
125
135
  const createDotName = (step) => {
126
136
  return `${step.identifier.namespace}.${step.identifier.attrName}`;
127
137
  };
128
138
  const isRename = (step) => {
129
- return (step.partialAttr['forward-identity']?.attrName &&
130
- step.partialAttr['forward-identity']?.attrName !== step.identifier.attrName);
139
+ var _a, _b;
140
+ return (((_a = step.partialAttr['forward-identity']) === null || _a === void 0 ? void 0 : _a.attrName) &&
141
+ ((_b = step.partialAttr['forward-identity']) === null || _b === void 0 ? void 0 : _b.attrName) !== step.identifier.attrName);
131
142
  };
132
143
  export const renderSchemaPlan = (planSteps, prevAttrs) => {
144
+ var _a, _b;
133
145
  const result = [];
134
146
  const addLine = (line) => {
135
147
  result.push(line);
@@ -177,7 +189,7 @@ export const renderSchemaPlan = (planSteps, prevAttrs) => {
177
189
  attr['forward-identity'][2] === step.identifier.attrName);
178
190
  }) || null
179
191
  : null;
180
- if (oldAttr?.['value-type'] === 'ref') {
192
+ if ((oldAttr === null || oldAttr === void 0 ? void 0 : oldAttr['value-type']) === 'ref') {
181
193
  addLine(`${chalk.bgRed(' - DELETE LINK ')} ${step.identifier.namespace}.${step.identifier.attrName}`);
182
194
  break;
183
195
  }
@@ -189,7 +201,7 @@ export const renderSchemaPlan = (planSteps, prevAttrs) => {
189
201
  }
190
202
  else {
191
203
  if (isRename(step)) {
192
- addLine(`${chalk.bgYellow.black(' * RENAME ATTR ')} ${createDotName(step)} -> ${step.partialAttr['forward-identity']?.['namespace']}.${step.partialAttr['forward-identity']?.['attrName']}`);
204
+ addLine(`${chalk.bgYellow.black(' * RENAME ATTR ')} ${createDotName(step)} -> ${(_a = step.partialAttr['forward-identity']) === null || _a === void 0 ? void 0 : _a['namespace']}.${(_b = step.partialAttr['forward-identity']) === null || _b === void 0 ? void 0 : _b['attrName']}`);
193
205
  }
194
206
  else {
195
207
  addLine(`${chalk.bgYellow.black(' * UPDATE ATTR ')} ${createDotName(step)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"renderSchemaPlan.js","sourceRoot":"","sources":["../src/renderSchemaPlan.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertTxSteps,\n MigrationTx,\n MigrationTxSpecific,\n MigrationTxTypes,\n} from '@instantdb/platform';\nimport chalk from 'chalk';\nimport stripAnsi from 'strip-ansi';\nimport { promptOk } from './util/promptOk.js';\n\n// Hack to prevent using @instantdb/core as a dependency for cli\ntype InstantDBAttr = Parameters<typeof convertTxSteps>[1][0];\n\nconst renderLinkUpdate = (\n tx: MigrationTxTypes['update-attr'],\n possiblePrevAttrs?: InstantDBAttr[],\n): string => {\n if (tx.partialAttr['value-type'] !== 'ref') {\n throw new Error('Invalid value type for link update');\n }\n\n const oldAttr = possiblePrevAttrs\n ? possiblePrevAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === tx.identifier.namespace &&\n attr['forward-identity'][2] === tx.identifier.attrName\n );\n }) || null\n : null;\n\n let changeType: 'UPDATE' | 'RENAME' | 'RENAME REVERSE' = 'UPDATE';\n\n if (\n tx.partialAttr['forward-identity']?.attrName &&\n tx.identifier.attrName !== tx.partialAttr['forward-identity'].attrName\n ) {\n changeType = 'RENAME';\n }\n\n const details: string[] = [];\n let reverseLabel = '';\n if (oldAttr) {\n // Check for reverse rename\n if (\n tx.partialAttr['reverse-identity']?.attrName &&\n oldAttr['reverse-identity']?.[2] !==\n tx.partialAttr['reverse-identity'].attrName\n ) {\n changeType = 'RENAME REVERSE';\n }\n\n reverseLabel = ` <-> ${oldAttr['reverse-identity']![1]}.${oldAttr['reverse-identity']![2]}`;\n\n if (!oldAttr['on-delete'] && tx.partialAttr['on-delete']) {\n details.push(\n `(SET ON DELETE ${oldAttr['reverse-identity']![1]} CASCADE DELETE ${oldAttr['forward-identity'][1]})`,\n );\n }\n if (!oldAttr['on-delete-reverse'] && tx.partialAttr['on-delete-reverse']) {\n details.push(\n `(SET ON DELETE ${oldAttr['forward-identity']![1]} CASCADE DELETE ${oldAttr['reverse-identity']![1]})`,\n );\n }\n if (oldAttr['on-delete'] && !oldAttr['on-delete-reverse']) {\n details.push(\n `(REMOVE CASCADE DELETE ON ${oldAttr['reverse-identity']![1]})`,\n );\n }\n if (oldAttr['on-delete-reverse'] && !oldAttr['on-delete-reverse']) {\n details.push(\n `(REMOVE REVERSE CASCADE DELETE ON ${oldAttr['forward-identity'][1]})`,\n );\n }\n }\n\n return `${chalk.bgYellow.black(` * ${changeType} ATTR `)} ${tx.identifier.namespace}.${tx.identifier.attrName}${reverseLabel} ${details.join(' ')}`;\n};\n\nexport class CancelSchemaError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CancelSchemaError';\n }\n}\n\nconst getRelationship = (\n cardinality: 'one' | 'many',\n unique: boolean,\n): string[] => {\n if (cardinality === 'many' && !unique) return ['many', 'many'];\n if (cardinality === 'one' && unique) return ['one', 'one'];\n if (cardinality === 'many' && unique) return ['many', 'one'];\n if (cardinality === 'one' && !unique) return ['one', 'many'];\n throw new Error('Invalid relationship');\n};\n\ntype AddOrDeleteAttr =\n | MigrationTxSpecific<'add-attr'>\n | MigrationTxSpecific<'delete-attr'>;\n\ntype SuperMigrationTx =\n | MigrationTx\n | { type: 'create-namespace'; namespace: string; innerSteps: MigrationTx[] }\n | { type: 'delete-namespace'; namespace: string; innerSteps: MigrationTx[] };\n\nexport const groupSteps = (steps: MigrationTx[]): SuperMigrationTx[] => {\n const { addOrDelSteps, otherSteps } = steps.reduce(\n (acc, step) => {\n if (step.type === 'add-attr' || step.type === 'delete-attr') {\n acc.addOrDelSteps.push(step);\n } else {\n acc.otherSteps.push(step);\n }\n return acc;\n },\n { addOrDelSteps: [] as AddOrDeleteAttr[], otherSteps: [] as MigrationTx[] },\n );\n // Group by namespace\n const groupedAddOrDel = addOrDelSteps.reduce(\n (acc, step) => {\n const namespace = step.identifier.namespace;\n if (!acc[namespace]) {\n acc[namespace] = [];\n }\n acc[namespace].push(step);\n return acc;\n },\n {} as Record<string, MigrationTx[]>,\n );\n\n const collapsed: SuperMigrationTx[] = Object.values(groupedAddOrDel).flatMap(\n (namedGroup) => {\n const isWholeEntityBeingDeleted = namedGroup.some((step) => {\n if (step.type === 'delete-attr' && step.identifier.attrName === 'id') {\n return true;\n }\n });\n\n if (isWholeEntityBeingDeleted) {\n return [\n {\n type: 'delete-namespace',\n namespace: namedGroup[0].identifier.namespace,\n innerSteps: namedGroup,\n } satisfies SuperMigrationTx as SuperMigrationTx,\n ];\n }\n\n const isWholeEntityBeingCreated = namedGroup.some((step) => {\n if (step.type === 'add-attr' && step.identifier.attrName === 'id') {\n return true;\n }\n });\n\n if (isWholeEntityBeingCreated) {\n return [\n {\n type: 'create-namespace',\n namespace: namedGroup[0].identifier.namespace,\n innerSteps: namedGroup,\n } satisfies SuperMigrationTx as SuperMigrationTx,\n ];\n }\n\n return namedGroup;\n },\n );\n\n return [...collapsed, ...otherSteps];\n};\n\nexport const confirmImportantSteps = async (planSteps: SuperMigrationTx[]) => {\n for (const step of planSteps) {\n if (step.type === 'delete-namespace') {\n const ok = await promptOk({\n promptText: `Are you sure you want to delete namespace ${step.namespace}?`,\n });\n if (!ok) {\n throw new CancelSchemaError(`Deletion of namespace ${step.namespace}`);\n }\n }\n }\n};\n\nconst createDotName = (step: MigrationTx) => {\n return `${step.identifier.namespace}.${step.identifier.attrName}`;\n};\n\nconst isRename = (step: MigrationTxSpecific<'update-attr'>) => {\n return (\n step.partialAttr['forward-identity']?.attrName &&\n step.partialAttr['forward-identity']?.attrName !== step.identifier.attrName\n );\n};\n\nexport const renderSchemaPlan = (\n planSteps: SuperMigrationTx[],\n prevAttrs?: InstantDBAttr[],\n): string[] => {\n const result: string[] = [];\n\n const addLine = (line: string) => {\n result.push(line);\n };\n\n const addSecondaryLine = (line: string) => {\n addLine(` ${chalk.italic(chalk.gray(stripAnsi(line)))}`);\n };\n\n for (const step of planSteps) {\n switch (step.type) {\n case 'create-namespace':\n addLine(\n `${chalk.bgGreen.black(' + CREATE NAMESPACE ')} ${step.namespace}`,\n );\n renderSchemaPlan(step.innerSteps, prevAttrs).forEach((outputLine) =>\n addSecondaryLine(outputLine),\n );\n break;\n case 'delete-namespace':\n addLine(`${chalk.bgRed(' - DELETE NAMESPACE ')} ${step.namespace}`);\n break;\n case 'add-attr':\n if (step['value-type'] === 'ref' && step['reverse-identity']) {\n addLine(\n `${chalk.bgGreen.black(' + CREATE LINK ')} ${createDotName(step)} <-> ${step['reverse-identity'].namespace}.${step['reverse-identity'].attrName}`,\n );\n addSecondaryLine(\n ' ' +\n getRelationship(step.cardinality, step['unique?'])\n .join(' <-> ')\n .toUpperCase(),\n );\n } else {\n addLine(\n `${chalk.bgGreen.black(' + CREATE ATTR ')} ${createDotName(step)}`,\n );\n if (step['checked-data-type']) {\n addSecondaryLine(' DATA TYPE: ' + step['checked-data-type']);\n }\n if (step['unique?'] && step.identifier.attrName !== 'id') {\n addSecondaryLine(' UNIQUE');\n }\n if (!step['required?']) {\n addSecondaryLine(' OPTIONAL');\n }\n if (step['index?']) {\n addSecondaryLine(' INDEXED');\n }\n }\n break;\n case 'delete-attr':\n const oldAttr = prevAttrs\n ? prevAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === step.identifier.namespace &&\n attr['forward-identity'][2] === step.identifier.attrName\n );\n }) || null\n : null;\n\n if (oldAttr?.['value-type'] === 'ref') {\n addLine(\n `${chalk.bgRed(' - DELETE LINK ')} ${step.identifier.namespace}.${step.identifier.attrName}`,\n );\n break;\n }\n\n addLine(`${chalk.bgRed(' - DELETE ATTR ')} ${createDotName(step)}`);\n break;\n case 'update-attr':\n if (step.partialAttr['value-type'] === 'ref') {\n addLine(renderLinkUpdate(step, prevAttrs));\n } else {\n if (isRename(step)) {\n addLine(\n `${chalk.bgYellow.black(' * RENAME ATTR ')} ${createDotName(step)} -> ${step.partialAttr['forward-identity']?.['namespace']}.${step.partialAttr['forward-identity']?.['attrName']}`,\n );\n } else {\n addLine(\n `${chalk.bgYellow.black(' * UPDATE ATTR ')} ${createDotName(step)}`,\n );\n }\n }\n break;\n case 'index':\n addLine(\n `${chalk.bgBlue.black(' + CREATE INDEX ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-index':\n addLine(\n `${chalk.bgBlue.black(' - DELETE INDEX ')} ${createDotName(step)}`,\n );\n break;\n case 'required':\n addLine(\n `${chalk.bgBlue.black(' + MAKE REQUIRED ')} ${createDotName(step)}`,\n );\n break;\n case 'unique':\n addLine(\n `${chalk.bgBlue.black(' * MAKE UNIQUE ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-required':\n addLine(\n `${chalk.bgBlue.black(' - MAKE OPTIONAL ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-unique':\n addLine(\n `${chalk.bgBlue.black(' - REMOVE UNIQUE CONSTRAINT')} ${createDotName(step)}`,\n );\n break;\n case 'check-data-type':\n addLine(\n `${chalk.bgBlue.black(' + SET DATA TYPE ')} ${createDotName(step)} ${chalk.dim(step['checked-data-type'])}`,\n );\n break;\n case 'remove-data-type':\n addLine(\n `${chalk.bgBlue.black(' - REMOVE DATA TYPE CONSTRAINT ')} ${createDotName(step)}`,\n );\n break;\n\n default:\n const unknownStep: never = step;\n }\n }\n\n return result;\n};\n"]}
1
+ {"version":3,"file":"renderSchemaPlan.js","sourceRoot":"","sources":["../src/renderSchemaPlan.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertTxSteps,\n MigrationTx,\n MigrationTxSpecific,\n MigrationTxTypes,\n} from '@instantdb/platform';\nimport chalk from 'chalk';\nimport stripAnsi from 'strip-ansi';\nimport { promptOk } from './util/promptOk.js';\n\n// Hack to prevent using @instantdb/core as a dependency for cli\ntype InstantDBAttr = Parameters<typeof convertTxSteps>[1][0];\n\nconst renderLinkUpdate = (\n tx: MigrationTxTypes['update-attr'],\n possiblePrevAttrs?: InstantDBAttr[],\n): string => {\n if (tx.partialAttr['value-type'] !== 'ref') {\n throw new Error('Invalid value type for link update');\n }\n\n const oldAttr = possiblePrevAttrs\n ? possiblePrevAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === tx.identifier.namespace &&\n attr['forward-identity'][2] === tx.identifier.attrName\n );\n }) || null\n : null;\n\n let changeType: 'UPDATE' | 'RENAME' | 'RENAME REVERSE' = 'UPDATE';\n\n if (\n tx.partialAttr['forward-identity']?.attrName &&\n tx.identifier.attrName !== tx.partialAttr['forward-identity'].attrName\n ) {\n changeType = 'RENAME';\n }\n\n const details: string[] = [];\n let reverseLabel = '';\n if (oldAttr) {\n // Check for reverse rename\n if (\n tx.partialAttr['reverse-identity']?.attrName &&\n oldAttr['reverse-identity']?.[2] !==\n tx.partialAttr['reverse-identity'].attrName\n ) {\n changeType = 'RENAME REVERSE';\n }\n\n reverseLabel = ` <-> ${oldAttr['reverse-identity']![1]}.${oldAttr['reverse-identity']![2]}`;\n\n if (!oldAttr['on-delete'] && tx.partialAttr['on-delete']) {\n details.push(\n `(SET ON DELETE ${oldAttr['reverse-identity']![1]} CASCADE DELETE ${oldAttr['forward-identity'][1]})`,\n );\n }\n if (!oldAttr['on-delete-reverse'] && tx.partialAttr['on-delete-reverse']) {\n details.push(\n `(SET ON DELETE ${oldAttr['forward-identity']![1]} CASCADE DELETE ${oldAttr['reverse-identity']![1]})`,\n );\n }\n if (oldAttr['on-delete'] && !oldAttr['on-delete-reverse']) {\n details.push(\n `(REMOVE CASCADE DELETE ON ${oldAttr['reverse-identity']![1]})`,\n );\n }\n if (oldAttr['on-delete-reverse'] && !oldAttr['on-delete-reverse']) {\n details.push(\n `(REMOVE REVERSE CASCADE DELETE ON ${oldAttr['forward-identity'][1]})`,\n );\n }\n }\n\n return `${chalk.bgYellow.black(` * ${changeType} ATTR `)} ${tx.identifier.namespace}.${tx.identifier.attrName}${reverseLabel} ${details.join(' ')}`;\n};\n\nexport class CancelSchemaError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CancelSchemaError';\n }\n}\n\nconst getRelationship = (\n cardinality: 'one' | 'many',\n unique: boolean,\n): string[] => {\n if (cardinality === 'many' && !unique) return ['many', 'many'];\n if (cardinality === 'one' && unique) return ['one', 'one'];\n if (cardinality === 'many' && unique) return ['many', 'one'];\n if (cardinality === 'one' && !unique) return ['one', 'many'];\n throw new Error('Invalid relationship');\n};\n\ntype AddOrDeleteAttr =\n | MigrationTxSpecific<'add-attr'>\n | MigrationTxSpecific<'delete-attr'>;\n\ntype SuperMigrationTx =\n | MigrationTx\n | { type: 'create-namespace'; namespace: string; innerSteps: MigrationTx[] }\n | { type: 'delete-namespace'; namespace: string; innerSteps: MigrationTx[] };\n\nexport const groupSteps = (steps: MigrationTx[]): SuperMigrationTx[] => {\n const { addOrDelSteps, otherSteps } = steps.reduce(\n (acc, step) => {\n if (step.type === 'add-attr' || step.type === 'delete-attr') {\n acc.addOrDelSteps.push(step);\n } else {\n acc.otherSteps.push(step);\n }\n return acc;\n },\n { addOrDelSteps: [] as AddOrDeleteAttr[], otherSteps: [] as MigrationTx[] },\n );\n // Group by namespace\n const groupedAddOrDel = addOrDelSteps.reduce(\n (acc, step) => {\n const namespace = step.identifier.namespace;\n if (!acc[namespace]) {\n acc[namespace] = [];\n }\n acc[namespace].push(step);\n return acc;\n },\n {} as Record<string, MigrationTx[]>,\n );\n\n const collapsed: SuperMigrationTx[] = Object.values(groupedAddOrDel).flatMap(\n (namedGroup) => {\n const isWholeEntityBeingDeleted = namedGroup.some((step) => {\n if (step.type === 'delete-attr' && step.identifier.attrName === 'id') {\n return true;\n }\n });\n\n if (isWholeEntityBeingDeleted) {\n return [\n {\n type: 'delete-namespace',\n namespace: namedGroup[0].identifier.namespace,\n innerSteps: namedGroup,\n } satisfies SuperMigrationTx as SuperMigrationTx,\n ];\n }\n\n const isWholeEntityBeingCreated = namedGroup.some((step) => {\n if (step.type === 'add-attr' && step.identifier.attrName === 'id') {\n return true;\n }\n });\n\n if (isWholeEntityBeingCreated) {\n return [\n {\n type: 'create-namespace',\n namespace: namedGroup[0].identifier.namespace,\n innerSteps: namedGroup,\n } satisfies SuperMigrationTx as SuperMigrationTx,\n ];\n }\n\n return namedGroup;\n },\n );\n\n return [...collapsed, ...otherSteps];\n};\n\nexport const confirmImportantSteps = async (planSteps: SuperMigrationTx[]) => {\n for (const step of planSteps) {\n if (step.type === 'delete-namespace') {\n const ok = await promptOk({\n promptText: `Are you sure you want to delete namespace ${step.namespace}?`,\n });\n if (!ok) {\n throw new CancelSchemaError(`Deletion of namespace ${step.namespace}`);\n }\n }\n }\n};\n\nconst createDotName = (step: MigrationTx) => {\n return `${step.identifier.namespace}.${step.identifier.attrName}`;\n};\n\nconst isRename = (step: MigrationTxSpecific<'update-attr'>) => {\n return (\n step.partialAttr['forward-identity']?.attrName &&\n step.partialAttr['forward-identity']?.attrName !== step.identifier.attrName\n );\n};\n\nexport const renderSchemaPlan = (\n planSteps: SuperMigrationTx[],\n prevAttrs?: InstantDBAttr[],\n): string[] => {\n const result: string[] = [];\n\n const addLine = (line: string) => {\n result.push(line);\n };\n\n const addSecondaryLine = (line: string) => {\n addLine(` ${chalk.italic(chalk.gray(stripAnsi(line)))}`);\n };\n\n for (const step of planSteps) {\n switch (step.type) {\n case 'create-namespace':\n addLine(\n `${chalk.bgGreen.black(' + CREATE NAMESPACE ')} ${step.namespace}`,\n );\n renderSchemaPlan(step.innerSteps, prevAttrs).forEach((outputLine) =>\n addSecondaryLine(outputLine),\n );\n break;\n case 'delete-namespace':\n addLine(`${chalk.bgRed(' - DELETE NAMESPACE ')} ${step.namespace}`);\n break;\n case 'add-attr':\n if (step['value-type'] === 'ref' && step['reverse-identity']) {\n addLine(\n `${chalk.bgGreen.black(' + CREATE LINK ')} ${createDotName(step)} <-> ${step['reverse-identity'].namespace}.${step['reverse-identity'].attrName}`,\n );\n addSecondaryLine(\n ' ' +\n getRelationship(step.cardinality, step['unique?'])\n .join(' <-> ')\n .toUpperCase(),\n );\n } else {\n addLine(\n `${chalk.bgGreen.black(' + CREATE ATTR ')} ${createDotName(step)}`,\n );\n if (step['checked-data-type']) {\n addSecondaryLine(' DATA TYPE: ' + step['checked-data-type']);\n }\n if (step['unique?'] && step.identifier.attrName !== 'id') {\n addSecondaryLine(' UNIQUE');\n }\n if (!step['required?']) {\n addSecondaryLine(' OPTIONAL');\n }\n if (step['index?']) {\n addSecondaryLine(' INDEXED');\n }\n }\n break;\n case 'delete-attr':\n const oldAttr = prevAttrs\n ? prevAttrs.find((attr) => {\n return (\n attr['forward-identity'][1] === step.identifier.namespace &&\n attr['forward-identity'][2] === step.identifier.attrName\n );\n }) || null\n : null;\n\n if (oldAttr?.['value-type'] === 'ref') {\n addLine(\n `${chalk.bgRed(' - DELETE LINK ')} ${step.identifier.namespace}.${step.identifier.attrName}`,\n );\n break;\n }\n\n addLine(`${chalk.bgRed(' - DELETE ATTR ')} ${createDotName(step)}`);\n break;\n case 'update-attr':\n if (step.partialAttr['value-type'] === 'ref') {\n addLine(renderLinkUpdate(step, prevAttrs));\n } else {\n if (isRename(step)) {\n addLine(\n `${chalk.bgYellow.black(' * RENAME ATTR ')} ${createDotName(step)} -> ${step.partialAttr['forward-identity']?.['namespace']}.${step.partialAttr['forward-identity']?.['attrName']}`,\n );\n } else {\n addLine(\n `${chalk.bgYellow.black(' * UPDATE ATTR ')} ${createDotName(step)}`,\n );\n }\n }\n break;\n case 'index':\n addLine(\n `${chalk.bgBlue.black(' + CREATE INDEX ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-index':\n addLine(\n `${chalk.bgBlue.black(' - DELETE INDEX ')} ${createDotName(step)}`,\n );\n break;\n case 'required':\n addLine(\n `${chalk.bgBlue.black(' + MAKE REQUIRED ')} ${createDotName(step)}`,\n );\n break;\n case 'unique':\n addLine(\n `${chalk.bgBlue.black(' * MAKE UNIQUE ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-required':\n addLine(\n `${chalk.bgBlue.black(' - MAKE OPTIONAL ')} ${createDotName(step)}`,\n );\n break;\n case 'remove-unique':\n addLine(\n `${chalk.bgBlue.black(' - REMOVE UNIQUE CONSTRAINT')} ${createDotName(step)}`,\n );\n break;\n case 'check-data-type':\n addLine(\n `${chalk.bgBlue.black(' + SET DATA TYPE ')} ${createDotName(step)} ${chalk.dim(step['checked-data-type'])}`,\n );\n break;\n case 'remove-data-type':\n addLine(\n `${chalk.bgBlue.black(' - REMOVE DATA TYPE CONSTRAINT ')} ${createDotName(step)}`,\n );\n break;\n\n default:\n const unknownStep: never = step;\n }\n }\n\n return result;\n};\n"]}