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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateSchemaFile.js","sourceRoot":"","sources":["../../src/util/updateSchemaFile.ts"],"names":[],"mappings":"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","sourcesContent":["import * as acorn from 'acorn';\nimport { tsPlugin } from 'acorn-typescript';\nimport {\n diffSchemas,\n renderAttrCall,\n renderAttrProperty,\n renderEntityProperty,\n renderLinkProperty,\n renderLinkValue,\n type MigrationTx,\n} from '@instantdb/platform';\nimport type { DataAttrDef, InstantSchemaDef } from '@instantdb/core';\n\nconst parser = (acorn.Parser as any).extend(tsPlugin({ dts: false }) as any);\nconst DEFAULT_INDENT = ' ';\n\nexport async function updateSchemaFile(\n existingFileContent: string,\n localSchema: InstantSchemaDef<any, any, any>,\n serverSchema: InstantSchemaDef<any, any, any>,\n): Promise<string> {\n const ast = parseFile(existingFileContent);\n const schemaObj = findSchemaObject(ast);\n if (!schemaObj) {\n throw new Error('Could not find i.schema(...) in schema file.');\n }\n\n const { entitiesObj, linksObj } = getSchemaSections(schemaObj);\n const diff = await diffSchemas(\n localSchema,\n serverSchema,\n async (created) => created,\n {},\n );\n if (diff.length === 0) {\n return existingFileContent;\n }\n\n const { entitiesByName } = buildEntitiesIndex(entitiesObj);\n\n const { localLinksByForward, serverLinksByForward } = buildLinkMaps(\n localSchema.links || {},\n serverSchema.links || {},\n );\n const changeBuckets = collectChanges(\n diff,\n localLinksByForward,\n serverLinksByForward,\n );\n\n const edits: Edit[] = [];\n edits.push(\n ...collectEntityEdits(\n existingFileContent,\n entitiesObj,\n entitiesByName,\n changeBuckets,\n serverSchema,\n ),\n );\n edits.push(\n ...collectLinkEdits(\n existingFileContent,\n linksObj,\n changeBuckets,\n localLinksByForward,\n serverLinksByForward,\n ),\n );\n\n const updated = applyEdits(existingFileContent, edits);\n return normalizeEmptyLinksObject(updated);\n}\n\ntype ObjectExpression = {\n type: 'ObjectExpression';\n start: number;\n end: number;\n properties: any[];\n};\n\ntype PropertyNode = {\n type: 'Property';\n start: number;\n end: number;\n key: any;\n value: any;\n};\n\ntype EntityInfo = {\n prop: PropertyNode;\n attrsObj: ObjectExpression;\n attrsByName: Map<string, PropertyNode>;\n};\n\ntype Edit = { start: number; end: number; text: string };\n\ntype ChangeBuckets = {\n createEntities: Set<string>;\n deleteEntities: Set<string>;\n addAttrs: Map<string, Set<string>>;\n deleteAttrs: Map<string, Set<string>>;\n updateAttrs: Map<string, Set<string>>;\n addLinks: Set<string>;\n deleteLinks: Set<string>;\n updateLinks: Set<string>;\n};\n\ntype LinkMap = Map<string, { name: string; link: any }>;\n\nfunction parseFile(content: string) {\n return parser.parse(content, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n });\n}\n\nfunction getSchemaSections(schemaObj: ObjectExpression) {\n const entitiesProp = findObjectProperty(schemaObj, 'entities');\n if (!entitiesProp || !isObjectExpression(entitiesProp.value)) {\n throw new Error('Could not find entities object in schema file.');\n }\n const linksProp = findObjectProperty(schemaObj, 'links');\n if (!linksProp || !isObjectExpression(linksProp.value)) {\n throw new Error('Could not find links object in schema file.');\n }\n\n return {\n entitiesObj: entitiesProp.value,\n linksObj: linksProp.value,\n };\n}\n\nfunction buildEntitiesIndex(entitiesObj: ObjectExpression) {\n const entitiesByName = new Map<string, EntityInfo>();\n\n for (const prop of entitiesObj.properties) {\n if (!isProperty(prop)) continue;\n const name = getPropName(prop);\n if (!name) continue;\n const attrsObj = getEntityAttrsObject(prop.value);\n if (!attrsObj) continue;\n\n const attrsByName = new Map<string, PropertyNode>();\n for (const attrProp of attrsObj.properties) {\n if (!isProperty(attrProp)) continue;\n const attrName = getPropName(attrProp);\n if (!attrName) continue;\n attrsByName.set(attrName, attrProp);\n }\n\n entitiesByName.set(name, { prop, attrsObj, attrsByName });\n }\n\n return { entitiesByName };\n}\n\nfunction buildLinkMaps(\n localLinks: Record<string, any>,\n serverLinks: Record<string, any>,\n) {\n return {\n localLinksByForward: buildLinkForwardMap(localLinks),\n serverLinksByForward: buildLinkForwardMap(serverLinks),\n };\n}\n\nfunction collectEntityEdits(\n content: string,\n entitiesObj: ObjectExpression,\n entitiesByName: Map<string, EntityInfo>,\n changeBuckets: ChangeBuckets,\n serverSchema: InstantSchemaDef<any, any, any>,\n): Edit[] {\n const edits: Edit[] = [];\n\n for (const entityName of changeBuckets.deleteEntities) {\n const entity = entitiesByName.get(entityName);\n if (!entity) continue;\n edits.push(removeProperty(content, entitiesObj, entity.prop));\n }\n\n for (const entityName of changeBuckets.createEntities) {\n if (entitiesByName.has(entityName)) continue;\n const entityDef = serverSchema.entities?.[entityName];\n if (!entityDef) continue;\n const propText = renderEntityProperty(entityName, entityDef.attrs);\n const indent = getObjectPropIndent(content, entitiesObj);\n edits.push(insertProperty(content, entitiesObj, propText, indent));\n }\n\n for (const [entityName, attrs] of changeBuckets.deleteAttrs) {\n const entity = entitiesByName.get(entityName);\n if (!entity) continue;\n for (const attrName of attrs) {\n const attrProp = entity.attrsByName.get(attrName);\n if (!attrProp) continue;\n edits.push(removeProperty(content, entity.attrsObj, attrProp));\n }\n }\n\n for (const [entityName, attrs] of changeBuckets.addAttrs) {\n const entity = entitiesByName.get(entityName);\n if (!entity) continue;\n const entityDef = serverSchema.entities?.[entityName];\n if (!entityDef) continue;\n const indent = getObjectPropIndent(content, entity.attrsObj);\n for (const attrName of attrs) {\n const attrDef = entityDef.attrs?.[attrName];\n if (!attrDef) continue;\n const propText = renderAttrProperty(attrName, attrDef);\n edits.push(\n insertPropertyExpandingSingleLine(\n content,\n entity.attrsObj,\n propText,\n indent,\n ),\n );\n }\n }\n\n for (const [entityName, attrs] of changeBuckets.updateAttrs) {\n const entity = entitiesByName.get(entityName);\n if (!entity) continue;\n const entityDef = serverSchema.entities?.[entityName];\n if (!entityDef) continue;\n for (const attrName of attrs) {\n const attrProp = entity.attrsByName.get(attrName);\n const attrDef = entityDef.attrs?.[attrName];\n if (!attrProp || !attrDef) continue;\n edits.push(updateAttrEdit(content, attrProp, attrDef));\n }\n }\n\n return edits;\n}\n\nfunction collectLinkEdits(\n content: string,\n linksObj: ObjectExpression,\n changeBuckets: ChangeBuckets,\n localLinksByForward: LinkMap,\n serverLinksByForward: LinkMap,\n): Edit[] {\n const edits: Edit[] = [];\n\n for (const forwardKey of changeBuckets.deleteLinks) {\n const localLink = localLinksByForward.get(forwardKey);\n if (!localLink) continue;\n const linkProp = findObjectProperty(linksObj, localLink.name);\n if (!linkProp) continue;\n edits.push(removeProperty(content, linksObj, linkProp));\n }\n\n for (const forwardKey of changeBuckets.addLinks) {\n const serverLink = serverLinksByForward.get(forwardKey);\n if (!serverLink) continue;\n const linkName = serverLink.name;\n if (findObjectProperty(linksObj, linkName)) continue;\n const propText = renderLinkProperty(linkName, serverLink.link);\n const indent = getObjectPropIndent(content, linksObj);\n edits.push(insertProperty(content, linksObj, propText, indent));\n }\n\n for (const forwardKey of changeBuckets.updateLinks) {\n const serverLink = serverLinksByForward.get(forwardKey);\n const localLink = localLinksByForward.get(forwardKey);\n if (!serverLink || !localLink) continue;\n const linkProp = findObjectProperty(linksObj, localLink.name);\n if (!linkProp) continue;\n const nextValue = renderLinkValue(serverLink.link);\n const propIndent = getLineIndent(content, linkProp.start);\n edits.push({\n start: linkProp.value.start,\n end: linkProp.value.end,\n text: indentValueAfterFirstLine(nextValue, propIndent),\n });\n }\n\n return edits;\n}\n\nfunction updateAttrEdit(\n content: string,\n attrProp: PropertyNode,\n attrDef: DataAttrDef<string, boolean, boolean>,\n): Edit {\n const { typeParams } = analyzeChain(attrProp.value);\n const typeParamsText = typeParams\n ? content.slice(typeParams.start, typeParams.end)\n : null;\n const nextValue = renderAttrCall(attrDef, typeParamsText);\n return {\n start: attrProp.value.start,\n end: attrProp.value.end,\n text: nextValue,\n };\n}\n\nfunction applyEdits(content: string, edits: Edit[]) {\n if (edits.length === 0) {\n return content;\n }\n const sorted = [...edits].sort((a, b) => b.start - a.start);\n let output = content;\n for (const edit of sorted) {\n output = output.slice(0, edit.start) + edit.text + output.slice(edit.end);\n }\n return output;\n}\n\nfunction collectChanges(\n steps: MigrationTx[],\n localLinksByForward: LinkMap,\n serverLinksByForward: LinkMap,\n): ChangeBuckets {\n const buckets: ChangeBuckets = {\n createEntities: new Set(),\n deleteEntities: new Set(),\n addAttrs: new Map(),\n deleteAttrs: new Map(),\n updateAttrs: new Map(),\n addLinks: new Set(),\n deleteLinks: new Set(),\n updateLinks: new Set(),\n };\n\n for (const step of steps) {\n const namespace = step.identifier.namespace;\n const attrName = step.identifier.attrName;\n const forwardKey = `${namespace}.${attrName}`;\n\n switch (step.type) {\n case 'add-attr': {\n if (attrName === 'id') {\n buckets.createEntities.add(namespace);\n break;\n }\n if (step['value-type'] === 'ref') {\n buckets.addLinks.add(forwardKey);\n break;\n }\n ensureSet(buckets.addAttrs, namespace).add(attrName);\n break;\n }\n case 'delete-attr': {\n if (attrName === 'id') {\n buckets.deleteEntities.add(namespace);\n break;\n }\n if (localLinksByForward.has(forwardKey)) {\n buckets.deleteLinks.add(forwardKey);\n break;\n }\n ensureSet(buckets.deleteAttrs, namespace).add(attrName);\n break;\n }\n case 'update-attr': {\n if (step.partialAttr?.['value-type'] === 'ref') {\n buckets.updateLinks.add(forwardKey);\n break;\n }\n ensureSet(buckets.updateAttrs, namespace).add(attrName);\n break;\n }\n case 'index':\n case 'remove-index':\n case 'unique':\n case 'remove-unique':\n case 'required':\n case 'remove-required':\n case 'check-data-type':\n case 'remove-data-type': {\n if (serverLinksByForward.has(forwardKey)) {\n buckets.updateLinks.add(forwardKey);\n break;\n }\n ensureSet(buckets.updateAttrs, namespace).add(attrName);\n break;\n }\n default: {\n assertNever(step);\n }\n }\n }\n\n pruneNamespaceBuckets(buckets);\n return buckets;\n}\n\nfunction ensureSet(map: Map<string, Set<string>>, key: string) {\n if (!map.has(key)) map.set(key, new Set());\n return map.get(key)!;\n}\n\nfunction pruneNamespaceBuckets(buckets: ChangeBuckets) {\n const namespaces = new Set<string>([\n ...buckets.createEntities,\n ...buckets.deleteEntities,\n ]);\n\n for (const namespace of namespaces) {\n buckets.addAttrs.delete(namespace);\n buckets.deleteAttrs.delete(namespace);\n buckets.updateAttrs.delete(namespace);\n removeNamespaceLinks(buckets.addLinks, namespace);\n removeNamespaceLinks(buckets.deleteLinks, namespace);\n removeNamespaceLinks(buckets.updateLinks, namespace);\n }\n}\n\nfunction removeNamespaceLinks(set: Set<string>, namespace: string) {\n const prefix = `${namespace}.`;\n for (const key of Array.from(set)) {\n if (key.startsWith(prefix)) {\n set.delete(key);\n }\n }\n}\n\nfunction assertNever(value: never): never {\n throw new Error(`Unhandled migration step: ${JSON.stringify(value)}`);\n}\n\nfunction analyzeChain(node: any): { typeParams: acorn.Node | null } {\n let curr = node;\n let typeParams: acorn.Node | null = null;\n\n while (curr?.type === 'CallExpression') {\n if (curr.typeParameters) {\n typeParams = curr.typeParameters;\n }\n if (curr.callee?.type === 'MemberExpression') {\n curr = curr.callee.object;\n } else {\n break;\n }\n }\n return { typeParams };\n}\n\nfunction findSchemaObject(ast: any): ObjectExpression | null {\n let schemaObj: ObjectExpression | null = null;\n const walk = (node: any) => {\n if (!node || schemaObj) return;\n if (\n node.type === 'CallExpression' &&\n node.callee?.type === 'MemberExpression' &&\n node.callee.object?.type === 'Identifier' &&\n node.callee.object.name === 'i' &&\n node.callee.property?.name === 'schema' &&\n node.arguments?.length > 0\n ) {\n const arg = node.arguments[0];\n if (isObjectExpression(arg)) {\n schemaObj = arg;\n }\n return;\n }\n for (const key in node) {\n if (key === 'loc' || key === 'start' || key === 'end') continue;\n const value = node[key];\n if (!value || typeof value !== 'object') continue;\n if (Array.isArray(value)) {\n value.forEach(walk);\n } else {\n walk(value);\n }\n }\n };\n walk(ast);\n return schemaObj;\n}\n\nfunction findObjectProperty(\n obj: ObjectExpression,\n name: string,\n): PropertyNode | null {\n for (const prop of obj.properties) {\n if (!isProperty(prop)) continue;\n const propName = getPropName(prop);\n if (propName === name) return prop;\n }\n return null;\n}\n\nfunction getEntityAttrsObject(value: any): ObjectExpression | null {\n if (\n value?.type !== 'CallExpression' ||\n value.callee?.type !== 'MemberExpression' ||\n value.callee.object?.type !== 'Identifier' ||\n value.callee.object.name !== 'i' ||\n value.callee.property?.name !== 'entity'\n ) {\n return null;\n }\n const attrsObj = value.arguments?.[0];\n return isObjectExpression(attrsObj) ? attrsObj : null;\n}\n\nfunction buildLinkForwardMap(links: Record<string, any>) {\n const map = new Map<string, { name: string; link: any }>();\n for (const [name, link] of Object.entries(links || {})) {\n map.set(linkForwardKey(link), { name, link });\n }\n return map;\n}\n\nfunction linkForwardKey(link: any) {\n return `${link.forward.on}.${link.forward.label}`;\n}\n\nfunction isObjectExpression(node: any): node is ObjectExpression {\n return node?.type === 'ObjectExpression';\n}\n\nfunction isProperty(node: any): node is PropertyNode {\n return node?.type === 'Property';\n}\n\nfunction getPropName(prop: PropertyNode) {\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal') return String(prop.key.value);\n return null;\n}\n\nfunction indentLines(text: string, indent: string) {\n return text\n .split('\\n')\n .map((line) => (line.length ? indent + line : line))\n .join('\\n');\n}\n\nfunction getObjectPropIndent(source: string, obj: ObjectExpression) {\n const props = obj.properties.filter(isProperty);\n if (props.length > 0) {\n return getLineIndent(source, props[0].start);\n }\n const closingIndent = getLineIndent(source, obj.end - 1);\n return closingIndent + DEFAULT_INDENT;\n}\n\nfunction getLineIndent(source: string, pos: number) {\n const lineStart = source.lastIndexOf('\\n', pos - 1) + 1;\n const match = source.slice(lineStart, pos).match(/^[\\t ]*/);\n return match ? match[0] : '';\n}\n\nfunction insertProperty(\n source: string,\n obj: ObjectExpression,\n propText: string,\n indent: string,\n) {\n const props = obj.properties.filter(isProperty);\n const closingBrace = obj.end - 1;\n const propTextWithIndent = indentLines(propText, indent);\n const propTextSingleLine = propText.trim();\n const innerStart = obj.start + 1;\n const innerEnd = closingBrace;\n const innerContent = source.slice(innerStart, innerEnd);\n const innerWhitespaceOnly = /^[\\s]*$/.test(innerContent);\n\n if (props.length === 0) {\n const objSource = source.slice(obj.start, obj.end);\n const multiline = objSource.includes('\\n') || propText.includes('\\n');\n if (!multiline) {\n return {\n start: closingBrace,\n end: closingBrace,\n text: ` ${propTextSingleLine} `,\n };\n }\n const closingIndent = getLineIndent(source, closingBrace);\n if (innerWhitespaceOnly) {\n return {\n start: innerStart,\n end: innerEnd,\n text: `\\n${propTextWithIndent},\\n${closingIndent}`,\n };\n }\n return {\n start: closingBrace,\n end: closingBrace,\n text: `\\n${propTextWithIndent},\\n${closingIndent}`,\n };\n }\n\n const lastProp = props[props.length - 1];\n const multiline =\n source.slice(lastProp.end, closingBrace).includes('\\n') ||\n propText.includes('\\n');\n const needsComma = !hasTrailingComma(source, lastProp.end, obj.end);\n\n if (!multiline) {\n let insertPos = closingBrace;\n while (insertPos > lastProp.end && /\\s/.test(source[insertPos - 1])) {\n insertPos -= 1;\n }\n return {\n start: insertPos,\n end: insertPos,\n text: `${needsComma ? ',' : ''} ${propTextSingleLine}`,\n };\n }\n\n const lineStart = source.lastIndexOf('\\n', closingBrace);\n return {\n start: lineStart,\n end: lineStart,\n text: `${needsComma ? ',' : ''}\\n${propTextWithIndent},`,\n };\n}\n\nfunction removeProperty(\n source: string,\n obj: ObjectExpression,\n prop: PropertyNode,\n) {\n let start = prop.start;\n let end = prop.end;\n const lineStart = source.lastIndexOf('\\n', start - 1) + 1;\n let shouldTrimLineEnd = false;\n if (/^[\\t ]*$/.test(source.slice(lineStart, start))) {\n start = lineStart;\n shouldTrimLineEnd = true;\n }\n const after = skipWhitespaceAndComments(source, end, obj.end);\n if (source[after] === ',') {\n end = after + 1;\n } else {\n const before = skipWhitespaceAndCommentsBackward(source, start, obj.start);\n if (source[before] === ',') {\n start = before;\n }\n }\n if (shouldTrimLineEnd) {\n const lineEnd = source.indexOf('\\n', end);\n if (lineEnd !== -1 && /^[\\t ]*$/.test(source.slice(end, lineEnd))) {\n end = lineEnd + 1;\n }\n }\n return { start, end, text: '' };\n}\n\nfunction indentValueAfterFirstLine(value: string, indent: string) {\n const lines = value.split('\\n');\n if (lines.length <= 1) return value;\n return [\n lines[0],\n ...lines.slice(1).map((line) => (line ? indent + line : line)),\n ].join('\\n');\n}\n\nfunction insertPropertyExpandingSingleLine(\n source: string,\n obj: ObjectExpression,\n propText: string,\n indent: string,\n) {\n const props = obj.properties.filter(isProperty);\n if (!props.length) {\n return insertProperty(source, obj, propText, indent);\n }\n const objSource = source.slice(obj.start, obj.end);\n if (objSource.includes('\\n') || propText.includes('\\n')) {\n return insertProperty(source, obj, propText, indent);\n }\n const closingBrace = obj.end - 1;\n const closingIndent = getLineIndent(source, closingBrace);\n const innerIndent = closingIndent + DEFAULT_INDENT;\n const propTexts = props.map((prop) =>\n source.slice(prop.start, prop.end).trim(),\n );\n const lines = [...propTexts, propText.trim()].map(\n (prop) => `${innerIndent}${prop},`,\n );\n const nextObject = `{\\n${lines.join('\\n')}\\n${closingIndent}}`;\n return { start: obj.start, end: obj.end, text: nextObject };\n}\n\nfunction normalizeEmptyLinksObject(content: string) {\n let ast: any;\n try {\n ast = parseFile(content);\n } catch {\n return content;\n }\n const schemaObj = findSchemaObject(ast);\n if (!schemaObj) return content;\n const linksProp = findObjectProperty(schemaObj, 'links');\n if (!linksProp || !isObjectExpression(linksProp.value)) return content;\n if (linksProp.value.properties.some(isProperty)) return content;\n const inner = content.slice(\n linksProp.value.start + 1,\n linksProp.value.end - 1,\n );\n if (!/^[\\s]*$/.test(inner)) return content;\n return (\n content.slice(0, linksProp.value.start) +\n '{}' +\n content.slice(linksProp.value.end)\n );\n}\n\nfunction hasTrailingComma(source: string, afterPos: number, endPos: number) {\n const next = skipWhitespaceAndComments(source, afterPos, endPos);\n return source[next] === ',';\n}\n\nfunction skipWhitespaceAndComments(source: string, start: number, end: number) {\n let i = start;\n while (i < end) {\n const ch = source[i];\n if (/\\s/.test(ch)) {\n i += 1;\n continue;\n }\n if (ch === '/' && source[i + 1] === '/') {\n const nextLine = source.indexOf('\\n', i + 2);\n i = nextLine === -1 ? end : nextLine + 1;\n continue;\n }\n if (ch === '/' && source[i + 1] === '*') {\n const close = source.indexOf('*/', i + 2);\n i = close === -1 ? end : close + 2;\n continue;\n }\n break;\n }\n return i;\n}\n\nfunction skipWhitespaceAndCommentsBackward(\n source: string,\n start: number,\n end: number,\n) {\n let i = start - 1;\n while (i >= end) {\n const ch = source[i];\n if (/\\s/.test(ch)) {\n i -= 1;\n continue;\n }\n if (ch === '/' && source[i - 1] === '/') {\n const prevLine = source.lastIndexOf('\\n', i - 2);\n i = prevLine === -1 ? end - 1 : prevLine - 1;\n continue;\n }\n if (ch === '/' && source[i - 1] === '*') {\n const open = source.lastIndexOf('/*', i - 2);\n i = open === -1 ? end - 1 : open - 1;\n continue;\n }\n break;\n }\n return i;\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "0.22.96-experimental.drewh-ts-target.20761590091.1",
4
+ "version": "0.22.96-experimental.surgical.20765817844.1",
5
5
  "description": "Instant's CLI",
6
6
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
7
7
  "repository": {
@@ -41,9 +41,9 @@
41
41
  "strip-ansi": "^7.1.2",
42
42
  "terminal-link": "^3.0.0",
43
43
  "unconfig": "^0.5.5",
44
- "@instantdb/core": "0.22.96-experimental.drewh-ts-target.20761590091.1",
45
- "@instantdb/platform": "0.22.96-experimental.drewh-ts-target.20761590091.1",
46
- "@instantdb/version": "0.22.96-experimental.drewh-ts-target.20761590091.1"
44
+ "@instantdb/core": "0.22.96-experimental.surgical.20765817844.1",
45
+ "@instantdb/platform": "0.22.96-experimental.surgical.20765817844.1",
46
+ "@instantdb/version": "0.22.96-experimental.surgical.20765817844.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@babel/core": "^7.17.9",
package/src/index.js CHANGED
@@ -10,7 +10,6 @@ import {
10
10
  PlatformApi,
11
11
  } from '@instantdb/platform';
12
12
  import version from './version.js';
13
- import { existsSync } from 'fs';
14
13
  import { mkdir, writeFile, readFile, unlink } from 'fs/promises';
15
14
  import path, { join } from 'path';
16
15
  import { randomUUID } from 'crypto';
@@ -50,7 +49,8 @@ import {
50
49
  getSchemaPathToWrite,
51
50
  getPermsPathToWrite,
52
51
  } from './util/findConfigCandidates.js';
53
- import { mergeSchema } from './util/mergeSchema.js';
52
+
53
+ import { updateSchemaFile } from './util/updateSchemaFile.js';
54
54
 
55
55
  const execAsync = promisify(exec);
56
56
 
@@ -481,7 +481,7 @@ program
481
481
  )
482
482
  .option(
483
483
  '--experimental-type-preservation',
484
- "[Experimental] Preserve manual type changes like `status: i.json<'online' | 'offline'>()` when doing `instant-cli pull schema`",
484
+ '[Experimental] Preserve manual type changes and schema edits when pulling schema',
485
485
  )
486
486
  .description('Pull schema and perm files from production.')
487
487
  .addHelpText(
@@ -1236,24 +1236,33 @@ async function pullSchema(
1236
1236
  const shortSchemaPath = getSchemaPathToWrite(prev?.path);
1237
1237
  const schemaPath = join(pkgDir, shortSchemaPath);
1238
1238
 
1239
- let newSchemaContent = generateSchemaTypescriptFile(
1240
- prev?.schema,
1241
- apiSchemaToInstantSchemaDef(pullRes.data.schema),
1242
- instantModuleName,
1243
- );
1239
+ const serverSchema = apiSchemaToInstantSchemaDef(pullRes.data.schema);
1240
+ let newSchemaContent;
1244
1241
 
1245
1242
  if (prev && experimentalTypePreservation) {
1246
1243
  try {
1247
1244
  const oldSchemaContent = await readFile(prev.path, 'utf-8');
1248
- newSchemaContent = mergeSchema(oldSchemaContent, newSchemaContent);
1245
+ newSchemaContent = await updateSchemaFile(
1246
+ oldSchemaContent,
1247
+ prev.schema,
1248
+ serverSchema,
1249
+ );
1249
1250
  } catch (e) {
1250
1251
  warn(
1251
- 'Failed to merge schema with existing file. Overwriting instead.',
1252
+ 'Failed to update schema with existing file. Overwriting instead.',
1252
1253
  e,
1253
1254
  );
1254
1255
  }
1255
1256
  }
1256
1257
 
1258
+ if (!newSchemaContent) {
1259
+ newSchemaContent = generateSchemaTypescriptFile(
1260
+ prev?.schema,
1261
+ serverSchema,
1262
+ instantModuleName,
1263
+ );
1264
+ }
1265
+
1257
1266
  await writeTypescript(schemaPath, newSchemaContent, 'utf-8');
1258
1267
 
1259
1268
  console.log('✅ Wrote schema to ' + shortSchemaPath);