instant-cli 0.22.95-experimental.surgical.20386705505.1 → 0.22.95-experimental.surgical.20386732292.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.
- package/.turbo/turbo-build.log +1 -1
- package/__tests__/__snapshots__/updateSchemaFile.test.ts.snap +5 -10
- package/dist/util/updateSchemaFile.d.ts.map +1 -1
- package/dist/util/updateSchemaFile.js +29 -2
- package/dist/util/updateSchemaFile.js.map +1 -1
- package/package.json +4 -4
- package/src/util/updateSchemaFile.ts +27 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> instant-cli@0.22.95-experimental.surgical.
|
|
2
|
+
> instant-cli@0.22.95-experimental.surgical.20386732292.1 build /home/runner/work/instant/instant/client/packages/cli
|
|
3
3
|
> rm -rf dist; tsc -p tsconfig.json
|
|
4
4
|
|
|
@@ -45,8 +45,7 @@ const _schema = i.schema({
|
|
|
45
45
|
done: i.boolean().optional(),
|
|
46
46
|
}),
|
|
47
47
|
},
|
|
48
|
-
links: {
|
|
49
|
-
},
|
|
48
|
+
links: {},
|
|
50
49
|
rooms: {},
|
|
51
50
|
});
|
|
52
51
|
|
|
@@ -104,8 +103,7 @@ const _schema = i.schema({
|
|
|
104
103
|
priority: i.number(),
|
|
105
104
|
}),
|
|
106
105
|
},
|
|
107
|
-
links: {
|
|
108
|
-
},
|
|
106
|
+
links: {},
|
|
109
107
|
rooms: {},
|
|
110
108
|
});
|
|
111
109
|
|
|
@@ -129,8 +127,7 @@ const _schema = i.schema({
|
|
|
129
127
|
email: i.string().unique(),
|
|
130
128
|
}),
|
|
131
129
|
},
|
|
132
|
-
links: {
|
|
133
|
-
},
|
|
130
|
+
links: {},
|
|
134
131
|
rooms: {},
|
|
135
132
|
});
|
|
136
133
|
|
|
@@ -182,8 +179,7 @@ const _schema = i.schema({
|
|
|
182
179
|
email: i.string(),
|
|
183
180
|
}),
|
|
184
181
|
},
|
|
185
|
-
links: {
|
|
186
|
-
},
|
|
182
|
+
links: {},
|
|
187
183
|
rooms: {},
|
|
188
184
|
});
|
|
189
185
|
|
|
@@ -239,8 +235,7 @@ const _schema = i.schema({
|
|
|
239
235
|
title: i.string(),
|
|
240
236
|
}),
|
|
241
237
|
},
|
|
242
|
-
links: {
|
|
243
|
-
},
|
|
238
|
+
links: {},
|
|
244
239
|
rooms: {},
|
|
245
240
|
});
|
|
246
241
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateSchemaFile.d.ts","sourceRoot":"","sources":["../../src/util/updateSchemaFile.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKrE,wBAAsB,gBAAgB,CACpC,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5C,YAAY,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"updateSchemaFile.d.ts","sourceRoot":"","sources":["../../src/util/updateSchemaFile.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKrE,wBAAsB,gBAAgB,CACpC,mBAAmB,EAAE,MAAM,EAC3B,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5C,YAAY,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
|
|
@@ -30,7 +30,8 @@ export function updateSchemaFile(existingFileContent, localSchema, serverSchema)
|
|
|
30
30
|
const edits = [];
|
|
31
31
|
edits.push(...collectEntityEdits(existingFileContent, entitiesObj, entitiesByName, changeBuckets, serverSchema));
|
|
32
32
|
edits.push(...collectLinkEdits(existingFileContent, linksObj, changeBuckets, localLinksByForward, serverLinksByForward));
|
|
33
|
-
|
|
33
|
+
const updated = applyEdits(existingFileContent, edits);
|
|
34
|
+
return normalizeEmptyLinksObject(updated);
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
function parseFile(content) {
|
|
@@ -513,7 +514,33 @@ function indentValueAfterFirstLine(value, indent) {
|
|
|
513
514
|
const lines = value.split('\n');
|
|
514
515
|
if (lines.length <= 1)
|
|
515
516
|
return value;
|
|
516
|
-
return [
|
|
517
|
+
return [
|
|
518
|
+
lines[0],
|
|
519
|
+
...lines.slice(1).map((line) => (line ? indent + line : line)),
|
|
520
|
+
].join('\n');
|
|
521
|
+
}
|
|
522
|
+
function normalizeEmptyLinksObject(content) {
|
|
523
|
+
let ast;
|
|
524
|
+
try {
|
|
525
|
+
ast = parseFile(content);
|
|
526
|
+
}
|
|
527
|
+
catch (_a) {
|
|
528
|
+
return content;
|
|
529
|
+
}
|
|
530
|
+
const schemaObj = findSchemaObject(ast);
|
|
531
|
+
if (!schemaObj)
|
|
532
|
+
return content;
|
|
533
|
+
const linksProp = findObjectProperty(schemaObj, 'links');
|
|
534
|
+
if (!linksProp || !isObjectExpression(linksProp.value))
|
|
535
|
+
return content;
|
|
536
|
+
if (linksProp.value.properties.some(isProperty))
|
|
537
|
+
return content;
|
|
538
|
+
const inner = content.slice(linksProp.value.start + 1, linksProp.value.end - 1);
|
|
539
|
+
if (!/^[\s]*$/.test(inner))
|
|
540
|
+
return content;
|
|
541
|
+
return (content.slice(0, linksProp.value.start) +
|
|
542
|
+
'{}' +
|
|
543
|
+
content.slice(linksProp.value.end));
|
|
517
544
|
}
|
|
518
545
|
function hasTrailingComma(source, afterPos, endPos) {
|
|
519
546
|
const next = skipWhitespaceAndComments(source, afterPos, endPos);
|
|
@@ -1 +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 return applyEdits(existingFileContent, edits);\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(insertProperty(content, entity.attrsObj, propText, indent));\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 [lines[0], ...lines.slice(1).map((line) => (line ? indent + line : line))].join('\\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"]}
|
|
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(insertProperty(content, entity.attrsObj, propText, indent));\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 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(linksProp.value.start + 1, linksProp.value.end - 1);\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.95-experimental.surgical.
|
|
4
|
+
"version": "0.22.95-experimental.surgical.20386732292.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/
|
|
45
|
-
"@instantdb/
|
|
46
|
-
"@instantdb/
|
|
44
|
+
"@instantdb/core": "0.22.95-experimental.surgical.20386732292.1",
|
|
45
|
+
"@instantdb/version": "0.22.95-experimental.surgical.20386732292.1",
|
|
46
|
+
"@instantdb/platform": "0.22.95-experimental.surgical.20386732292.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@babel/core": "^7.17.9",
|
|
@@ -68,7 +68,8 @@ export async function updateSchemaFile(
|
|
|
68
68
|
),
|
|
69
69
|
);
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
const updated = applyEdits(existingFileContent, edits);
|
|
72
|
+
return normalizeEmptyLinksObject(updated);
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
type ObjectExpression = {
|
|
@@ -639,7 +640,31 @@ function removeProperty(
|
|
|
639
640
|
function indentValueAfterFirstLine(value: string, indent: string) {
|
|
640
641
|
const lines = value.split('\n');
|
|
641
642
|
if (lines.length <= 1) return value;
|
|
642
|
-
return [
|
|
643
|
+
return [
|
|
644
|
+
lines[0],
|
|
645
|
+
...lines.slice(1).map((line) => (line ? indent + line : line)),
|
|
646
|
+
].join('\n');
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
function normalizeEmptyLinksObject(content: string) {
|
|
650
|
+
let ast: any;
|
|
651
|
+
try {
|
|
652
|
+
ast = parseFile(content);
|
|
653
|
+
} catch {
|
|
654
|
+
return content;
|
|
655
|
+
}
|
|
656
|
+
const schemaObj = findSchemaObject(ast);
|
|
657
|
+
if (!schemaObj) return content;
|
|
658
|
+
const linksProp = findObjectProperty(schemaObj, 'links');
|
|
659
|
+
if (!linksProp || !isObjectExpression(linksProp.value)) return content;
|
|
660
|
+
if (linksProp.value.properties.some(isProperty)) return content;
|
|
661
|
+
const inner = content.slice(linksProp.value.start + 1, linksProp.value.end - 1);
|
|
662
|
+
if (!/^[\s]*$/.test(inner)) return content;
|
|
663
|
+
return (
|
|
664
|
+
content.slice(0, linksProp.value.start) +
|
|
665
|
+
'{}' +
|
|
666
|
+
content.slice(linksProp.value.end)
|
|
667
|
+
);
|
|
643
668
|
}
|
|
644
669
|
|
|
645
670
|
function hasTrailingComma(source: string, afterPos: number, endPos: number) {
|