@parlor/scaffold 0.1.0 → 0.2.0

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 (44) hide show
  1. package/dist/add/addon.d.ts +3 -1
  2. package/dist/add/addon.d.ts.map +1 -1
  3. package/dist/add/addon.js +6 -0
  4. package/dist/add/addon.js.map +1 -1
  5. package/dist/add/plan.js.map +1 -1
  6. package/dist/add/run.js.map +1 -1
  7. package/dist/add/transaction.js.map +1 -1
  8. package/dist/addons/agent.d.ts +1 -4
  9. package/dist/addons/agent.d.ts.map +1 -1
  10. package/dist/addons/agent.js +2 -2
  11. package/dist/addons/agent.js.map +1 -1
  12. package/dist/addons/auth.d.ts +1 -4
  13. package/dist/addons/auth.d.ts.map +1 -1
  14. package/dist/addons/auth.js +2 -2
  15. package/dist/addons/auth.js.map +1 -1
  16. package/dist/addons/index.d.ts +2 -8
  17. package/dist/addons/index.d.ts.map +1 -1
  18. package/dist/addons/index.js.map +1 -1
  19. package/dist/catalog.js.map +1 -1
  20. package/dist/create.js.map +1 -1
  21. package/dist/docs.d.ts.map +1 -1
  22. package/dist/docs.js +4 -0
  23. package/dist/docs.js.map +1 -1
  24. package/dist/edit/inspect.js.map +1 -1
  25. package/dist/edit/ops.js.map +1 -1
  26. package/dist/edit/source.js.map +1 -1
  27. package/dist/edit/syntax.d.ts +6 -1
  28. package/dist/edit/syntax.d.ts.map +1 -1
  29. package/dist/edit/syntax.js +21 -6
  30. package/dist/edit/syntax.js.map +1 -1
  31. package/dist/errors.js.map +1 -1
  32. package/dist/files.js.map +1 -1
  33. package/dist/fixtures.js.map +1 -1
  34. package/dist/git.js.map +1 -1
  35. package/dist/identity.js.map +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/package-manager.js.map +1 -1
  38. package/dist/version.js.map +1 -1
  39. package/package.json +2 -2
  40. package/templates/auth/auth.ts +2 -3
  41. package/templates/default/src/agent/agent-sidebar.tsx +8 -1
  42. package/templates/default/src/main.tsx +13 -10
  43. package/templates/default/src/routes/__root.tsx +3 -2
  44. package/templates/default/src/routes/index.tsx +9 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/edit/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/edit/ops.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ArrayExpression,\n Expression,\n JSXElement,\n JSXFragment,\n JSXOpeningElement,\n Node,\n ObjectExpression,\n ObjectProperty,\n} from \"@babel/types\";\n\nimport { applySplices, parseSource, type SourceFile, type Splice } from \"./source.js\";\nimport {\n type CallSite,\n findCall,\n forEachNode,\n importedName,\n objectArgument,\n propertyOf,\n textOf,\n valueOf,\n} from \"./syntax.js\";\n\nexport type { CallSite } from \"./syntax.js\";\n\n/**\n * The closed set of code edits. Each one knows how to tell that it is already done, how to\n * make it, and when it is unsafe. Add a kind here, with its tests, instead of editing text\n * anywhere else.\n */\nexport type Op =\n /** Joins an existing value import from `from`, else a new line where oxfmt's sorted imports put it. */\n | { readonly kind: \"import\"; readonly names: readonly string[]; readonly from: string }\n | { readonly kind: \"export-all\"; readonly from: string }\n /** Present when an element starts with the same identifier: `chat()` is present when `chat(...)` is. */\n | {\n readonly kind: \"append-element\";\n readonly call: CallSite;\n readonly path: readonly [string, ...string[]];\n readonly element: string;\n }\n /**\n * `$name` in `value` is replaced with the source text of the sibling property `name`, so\n * `createAuth($database)` follows whatever the app passes.\n */\n | {\n readonly kind: \"set-property\";\n readonly call: CallSite;\n readonly path: readonly [string, ...string[]];\n readonly value: string;\n /** `unsafe` for add-ons, which never overwrite; `replace` for create's own template. */\n readonly onConflict: \"unsafe\" | \"replace\";\n }\n | {\n readonly kind: \"wrap-property\";\n readonly call: CallSite;\n readonly path: readonly [string, ...string[]];\n readonly wrapper: string;\n }\n | {\n readonly kind: \"jsx-attribute\";\n readonly element: string;\n readonly name: string;\n readonly value: string;\n }\n /** The component must return exactly one JSX element or fragment. */\n | { readonly kind: \"jsx-child\"; readonly component: string; readonly element: string };\n\nexport type OpOutcome =\n | { readonly status: \"done\" }\n | { readonly status: \"edit\"; readonly splices: readonly Splice[] }\n | { readonly status: \"unsafe\"; readonly reason: string };\n\ntype CallOp = Extract<Op, { call: CallSite }>;\ntype Layout = {\n readonly multiline: boolean;\n readonly indent: string;\n readonly comma: boolean;\n};\n\nconst DONE: OpOutcome = { status: \"done\" };\nconst INLINE: Layout = { multiline: false, indent: \"\", comma: false };\nconst unsafe = (reason: string): OpOutcome => ({ status: \"unsafe\", reason });\nconst edit = (...splices: Splice[]): OpOutcome => ({ status: \"edit\", splices });\nconst squash = (text: string) => text.replace(/\\s+/g, \"\");\nconst INDENT = \" \";\n\nfunction lineIndent(text: string, offset: number): string {\n return /^[ \\t]*/.exec(text.slice(lineStart(text, offset)))?.[0] ?? \"\";\n}\n\nfunction lineStart(text: string, offset: number): number {\n return text.lastIndexOf(\"\\n\", offset - 1) + 1;\n}\n\nfunction lineEnd(text: string, offset: number): number {\n const end = text.indexOf(\"\\n\", offset);\n return end === -1 ? text.length : end;\n}\n\nfunction entry(path: readonly string[], value: string, layout: Layout): string {\n const [key, ...rest] = path;\n if (rest.length === 0) return `${key}: ${value}`;\n if (!layout.multiline) return `${key}: { ${entry(rest, value, layout)} }`;\n const inner = `${layout.indent}${INDENT}`;\n const child = entry(rest, value, { ...layout, indent: inner });\n return `${key}: {\\n${inner}${child}${layout.comma ? \",\" : \"\"}\\n${layout.indent}}`;\n}\n\n/** Appends to an object's properties or an array's elements in their own indentation and comma style. */\nfunction appendEntry(\n file: SourceFile,\n container: ObjectExpression | ArrayExpression,\n render: (layout: Layout) => string,\n): Splice {\n const items = (\n container.type === \"ObjectExpression\" ? container.properties : container.elements\n ).filter((item): item is NonNullable<typeof item> => item !== null);\n const last = items.at(-1);\n const close = (container.end ?? 0) - 1;\n if (!last) {\n const text = render(INLINE);\n return {\n start: (container.start ?? 0) + 1,\n end: close,\n text: container.type === \"ObjectExpression\" ? ` ${text} ` : text,\n };\n }\n const after = last.end ?? 0;\n const between = file.text.slice(after, close);\n if (!between.includes(\"\\n\"))\n return { start: after, end: after, text: `, ${render(INLINE)}` };\n const indent = lineIndent(file.text, last.start ?? 0);\n const comma = between.indexOf(\",\");\n const text = render({ multiline: true, indent, comma: comma !== -1 });\n return comma === -1\n ? { start: after, end: after, text: `,\\n${indent}${text}` }\n : { start: after + comma + 1, end: after + comma + 1, text: `\\n${indent}${text},` };\n}\n\nfunction substitute(\n file: SourceFile,\n object: ObjectExpression,\n value: string,\n): { readonly value: string } | { readonly missing: string } {\n let missing: string | undefined;\n const result = value.replace(/\\$([A-Za-z_]\\w*)/g, (_match, name: string) => {\n const sibling = propertyOf(file, object, name);\n if (!sibling.ok || !sibling.value) {\n missing = name;\n return name;\n }\n return textOf(file, valueOf(sibling.value));\n });\n return missing === undefined ? { value: result } : { missing };\n}\n\ntype Target =\n | { readonly kind: \"no-argument\"; readonly close: number }\n | {\n readonly kind: \"missing\";\n readonly object: ObjectExpression;\n readonly rest: readonly string[];\n }\n | {\n readonly kind: \"found\";\n readonly object: ObjectExpression;\n readonly property: ObjectProperty;\n };\n\n/** The property at `op.path`, or where it would go; a parent that is not an object literal is unsafe. */\nfunction locate(file: SourceFile, op: CallOp): Target | { readonly reason: string } {\n const call = findCall(file, op.call);\n if (!call.ok) return { reason: call.reason };\n const argument = objectArgument(file, op.call, call.value);\n if (!argument.ok) return { reason: argument.reason };\n if (argument.value.kind === \"none\") {\n return { kind: \"no-argument\", close: (call.value.end ?? 0) - 1 };\n }\n let object = argument.value.node;\n for (const [depth, key] of op.path.entries()) {\n const property = propertyOf(file, object, key);\n if (!property.ok) return { reason: property.reason };\n if (!property.value) return { kind: \"missing\", object, rest: op.path.slice(depth) };\n if (depth === op.path.length - 1)\n return { kind: \"found\", object, property: property.value };\n const value = valueOf(property.value);\n if (value.type !== \"ObjectExpression\") {\n return {\n reason: `\\`${key}\\` is \\`${textOf(file, value)}\\`, not an object literal.`,\n };\n }\n object = value;\n }\n return { reason: \"the path is empty.\" };\n}\n\nfunction leadingName(text: string): string | undefined {\n return /^[A-Za-z_$][\\w$]*/.exec(text.trim())?.[0];\n}\n\nfunction expressionName(node: Node): string | undefined {\n if (node.type === \"Identifier\") return node.name;\n if (node.type === \"CallExpression\") return expressionName(node.callee);\n return undefined;\n}\n\nfunction evaluateSetProperty(\n file: SourceFile,\n op: Extract<Op, { kind: \"set-property\" }>,\n): OpOutcome {\n const target = locate(file, op);\n if (\"reason\" in target) return unsafe(target.reason);\n if (target.kind === \"no-argument\") {\n if (/\\$\\w/.test(op.value))\n return unsafe(`${op.call.callee}() has no options to read.`);\n const text = entry(op.path, op.value, INLINE);\n return edit({ start: target.close, end: target.close, text: `{ ${text} }` });\n }\n const value = substitute(file, target.object, op.value);\n if (\"missing\" in value) {\n return unsafe(`${op.call.callee}() has no \\`${value.missing}\\` to pass.`);\n }\n if (target.kind === \"missing\") {\n return edit(\n appendEntry(file, target.object, (layout) =>\n entry(target.rest, value.value, layout),\n ),\n );\n }\n const current = valueOf(target.property);\n if (squash(textOf(file, current)) === squash(value.value)) return DONE;\n if (op.onConflict === \"unsafe\") {\n return unsafe(`\\`${op.path.at(-1)}\\` is already \\`${textOf(file, current)}\\`.`);\n }\n return edit({ start: current.start ?? 0, end: current.end ?? 0, text: value.value });\n}\n\nfunction evaluateAppendElement(\n file: SourceFile,\n op: Extract<Op, { kind: \"append-element\" }>,\n): OpOutcome {\n const target = locate(file, op);\n if (\"reason\" in target) return unsafe(target.reason);\n const array = `[${op.element}]`;\n if (target.kind === \"no-argument\") {\n const text = entry(op.path, array, INLINE);\n return edit({ start: target.close, end: target.close, text: `{ ${text} }` });\n }\n if (target.kind === \"missing\") {\n return edit(\n appendEntry(file, target.object, (layout) => entry(target.rest, array, layout)),\n );\n }\n const key = op.path.at(-1);\n const current = valueOf(target.property);\n if (current.type !== \"ArrayExpression\") {\n return unsafe(`\\`${key}\\` is \\`${textOf(file, current)}\\`, not an array literal.`);\n }\n const spread = current.elements.find((element) => element?.type === \"SpreadElement\");\n if (spread) {\n return unsafe(\n `\\`${key}\\` spreads \\`${textOf(file, spread)}\\`, which may already hold ${op.element}.`,\n );\n }\n const wanted = leadingName(op.element);\n if (current.elements.some((element) => element && expressionName(element) === wanted)) {\n return DONE;\n }\n return edit(appendEntry(file, current, () => op.element));\n}\n\nfunction evaluateWrapProperty(\n file: SourceFile,\n op: Extract<Op, { kind: \"wrap-property\" }>,\n): OpOutcome {\n const target = locate(file, op);\n if (\"reason\" in target) return unsafe(target.reason);\n if (target.kind !== \"found\")\n return unsafe(`${op.call.callee}() sets no \\`${op.path.at(-1)}\\`.`);\n const current = valueOf(target.property);\n if (\n current.type === \"CallExpression\" &&\n current.callee.type === \"Identifier\" &&\n current.callee.name === op.wrapper\n ) {\n return DONE;\n }\n return edit({\n start: current.start ?? 0,\n end: current.end ?? 0,\n text: `${op.wrapper}(${textOf(file, current)})`,\n });\n}\n\n/** Where `name` is bound at module scope: the module it is imported from, or this file. */\nfunction topLevelBinding(file: SourceFile, name: string): string | undefined {\n for (const statement of file.ast.program.body) {\n if (statement.type === \"ImportDeclaration\") {\n if (statement.specifiers.some((specifier) => specifier.local.name === name)) {\n return statement.source.value;\n }\n continue;\n }\n const declaration =\n statement.type === \"ExportNamedDeclaration\" ? statement.declaration : statement;\n if (!declaration) continue;\n if (\n (declaration.type === \"FunctionDeclaration\" ||\n declaration.type === \"ClassDeclaration\") &&\n declaration.id?.name === name\n ) {\n return file.path;\n }\n if (\n declaration.type === \"VariableDeclaration\" &&\n declaration.declarations.some(\n (declarator) =>\n declarator.id.type === \"Identifier\" && declarator.id.name === name,\n )\n ) {\n return file.path;\n }\n }\n return undefined;\n}\n\nconst isRelative = (source: string) => source.startsWith(\".\");\n\nfunction importLine(op: Extract<Op, { kind: \"import\" }>): string {\n return `import { ${op.names.join(\", \")} } from \"${op.from}\";`;\n}\n\nfunction evaluateImport(\n file: SourceFile,\n op: Extract<Op, { kind: \"import\" }>,\n): OpOutcome {\n const missing = op.names.filter((name) => importedName(file, name, op.from) !== name);\n if (missing.length === 0) return DONE;\n for (const name of missing) {\n const bound = topLevelBinding(file, name);\n if (bound !== undefined) {\n return unsafe(\n bound === file.path\n ? `\\`${name}\\` is already declared in ${file.path}.`\n : `\\`${name}\\` is already imported from ${bound}.`,\n );\n }\n }\n const imports = file.ast.program.body.filter(\n (statement) => statement.type === \"ImportDeclaration\",\n );\n const existing = imports.find(\n (statement) =>\n statement.source.value === op.from &&\n statement.importKind !== \"type\" &&\n statement.specifiers.length > 0 &&\n statement.specifiers.every((specifier) => specifier.type === \"ImportSpecifier\"),\n );\n if (existing) {\n const at = existing.specifiers.at(-1)?.end ?? 0;\n return edit({ start: at, end: at, text: `, ${missing.join(\", \")}` });\n }\n const line = importLine({ ...op, names: missing });\n const group = imports.filter(\n (statement) => isRelative(statement.source.value) === isRelative(op.from),\n );\n const before = group.find((statement) => statement.source.value > op.from);\n if (before) {\n const start = lineStart(file.text, before.start ?? 0);\n return edit({ start, end: start, text: `${line}\\n` });\n }\n const lastOfGroup = group.at(-1);\n if (lastOfGroup) {\n const at = lineEnd(file.text, lastOfGroup.end ?? 0);\n return edit({ start: at, end: at, text: `\\n${line}` });\n }\n const lastImport = imports.at(-1);\n if (isRelative(op.from) && lastImport) {\n const at = lineEnd(file.text, lastImport.end ?? 0);\n return edit({ start: at, end: at, text: `\\n\\n${line}` });\n }\n const start = imports[0] ? lineStart(file.text, imports[0].start ?? 0) : 0;\n return edit({ start, end: start, text: `${line}\\n\\n` });\n}\n\nfunction evaluateExportAll(\n file: SourceFile,\n op: Extract<Op, { kind: \"export-all\" }>,\n): OpOutcome {\n const present = file.ast.program.body.some(\n (statement) =>\n statement.type === \"ExportAllDeclaration\" && statement.source.value === op.from,\n );\n if (present) return DONE;\n const at = file.text.length;\n const newline = at === 0 || file.text.endsWith(\"\\n\") ? \"\" : \"\\n\";\n return edit({ start: at, end: at, text: `${newline}export * from \"${op.from}\";\\n` });\n}\n\nfunction openingElements(root: Node, name: string): JSXOpeningElement[] {\n const found: JSXOpeningElement[] = [];\n forEachNode(root, (node) => {\n if (\n node.type === \"JSXOpeningElement\" &&\n node.name.type === \"JSXIdentifier\" &&\n node.name.name === name\n ) {\n found.push(node);\n }\n });\n return found;\n}\n\nfunction evaluateJsxAttribute(\n file: SourceFile,\n op: Extract<Op, { kind: \"jsx-attribute\" }>,\n): OpOutcome {\n const elements = openingElements(file.ast, op.element);\n if (elements.length === 0) return unsafe(`${file.path} renders no <${op.element}>.`);\n if (elements.length > 1) {\n return unsafe(`<${op.element}> appears more than once in ${file.path}.`);\n }\n const element = elements[0]!;\n const existing = element.attributes.find(\n (attribute) =>\n attribute.type === \"JSXAttribute\" &&\n attribute.name.type === \"JSXIdentifier\" &&\n attribute.name.name === op.name,\n );\n if (existing) {\n return squash(textOf(file, existing)) === squash(`${op.name}=${op.value}`)\n ? DONE\n : unsafe(`<${op.element}> already sets \\`${textOf(file, existing)}\\`.`);\n }\n const after = element.attributes.at(-1)?.end ?? element.name.end ?? 0;\n return edit({ start: after, end: after, text: ` ${op.name}=${op.value}` });\n}\n\nfunction componentBody(file: SourceFile, name: string): Node | undefined {\n for (const statement of file.ast.program.body) {\n const declaration =\n statement.type === \"ExportNamedDeclaration\" ||\n statement.type === \"ExportDefaultDeclaration\"\n ? statement.declaration\n : statement;\n if (declaration?.type === \"FunctionDeclaration\" && declaration.id?.name === name) {\n return declaration.body;\n }\n if (declaration?.type !== \"VariableDeclaration\") continue;\n for (const declarator of declaration.declarations) {\n if (\n declarator.id.type === \"Identifier\" &&\n declarator.id.name === name &&\n (declarator.init?.type === \"ArrowFunctionExpression\" ||\n declarator.init?.type === \"FunctionExpression\")\n ) {\n return declarator.init.body;\n }\n }\n }\n return undefined;\n}\n\n/** The values the component itself returns, not those of functions nested in it. */\nfunction returnedValues(body: Node): readonly (Expression | null | undefined)[] {\n if (body.type !== \"BlockStatement\") return [body as Expression];\n const returned: (Expression | null | undefined)[] = [];\n const visit = (node: Node) => {\n if (\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ArrowFunctionExpression\"\n ) {\n return;\n }\n if (node.type === \"ReturnStatement\") returned.push(node.argument);\n for (const [key, value] of Object.entries(node)) {\n if (key === \"loc\" || key.endsWith(\"Comments\")) continue;\n for (const child of Array.isArray(value) ? value : [value]) {\n if (\n child &&\n typeof child === \"object\" &&\n typeof (child as Node).type === \"string\"\n ) {\n visit(child as Node);\n }\n }\n }\n };\n for (const statement of body.body) visit(statement);\n return returned;\n}\n\nfunction evaluateJsxChild(\n file: SourceFile,\n op: Extract<Op, { kind: \"jsx-child\" }>,\n): OpOutcome {\n const body = componentBody(file, op.component);\n if (!body) return unsafe(`${file.path} has no component ${op.component}.`);\n const returned = returnedValues(body);\n const root = returned[0];\n if (\n returned.length !== 1 ||\n !root ||\n (root.type !== \"JSXElement\" && root.type !== \"JSXFragment\")\n ) {\n return unsafe(\n `${op.component} must return exactly one JSX element to add <${op.element} />.`,\n );\n }\n if (openingElements(root, op.element).length > 0) return DONE;\n const parent: JSXElement | JSXFragment = root;\n const closing =\n parent.type === \"JSXElement\" ? parent.closingElement : parent.closingFragment;\n if (!closing) return unsafe(`${op.component} returns a self-closing element.`);\n const last = parent.children\n .filter((child) => child.type !== \"JSXText\" || child.value.trim() !== \"\")\n .at(-1);\n const tag = `<${op.element} />`;\n if (!last) {\n const at = closing.start ?? 0;\n return edit({ start: at, end: at, text: tag });\n }\n const at = last.end ?? 0;\n return edit({\n start: at,\n end: at,\n text: `\\n${lineIndent(file.text, last.start ?? 0)}${tag}`,\n });\n}\n\nexport function evaluateOp(file: SourceFile, op: Op): OpOutcome {\n switch (op.kind) {\n case \"import\":\n return evaluateImport(file, op);\n case \"export-all\":\n return evaluateExportAll(file, op);\n case \"append-element\":\n return evaluateAppendElement(file, op);\n case \"set-property\":\n return evaluateSetProperty(file, op);\n case \"wrap-property\":\n return evaluateWrapProperty(file, op);\n case \"jsx-attribute\":\n return evaluateJsxAttribute(file, op);\n case \"jsx-child\":\n return evaluateJsxChild(file, op);\n }\n}\n\n/** One short line for the printed plan, such as \"auth: createAuth(database)\"; none for an import. */\nexport function opSummary(file: SourceFile, op: Op): string | undefined {\n switch (op.kind) {\n case \"import\":\n return undefined;\n case \"export-all\":\n return `export * from \"${op.from}\"`;\n case \"append-element\":\n return `${op.path.join(\".\")}: ${op.element}`;\n case \"set-property\": {\n const target = locate(file, op);\n const value =\n \"reason\" in target || target.kind === \"no-argument\"\n ? op.value\n : (() => {\n const substituted = substitute(file, target.object, op.value);\n return \"value\" in substituted ? substituted.value : op.value;\n })();\n return `${op.path.join(\".\")}: ${value}`;\n }\n case \"wrap-property\": {\n const target = locate(file, op);\n const current =\n !(\"reason\" in target) && target.kind === \"found\"\n ? textOf(file, valueOf(target.property))\n : \"...\";\n return `${op.path.join(\".\")}: ${op.wrapper}(${current})`;\n }\n case \"jsx-attribute\":\n return `<${op.element} ${op.name}=${op.value}>`;\n case \"jsx-child\":\n return `<${op.element} />`;\n }\n}\n\nfunction callCode(op: CallOp, value: string): string {\n const nested = (path: readonly string[], indent: string): string => {\n const [key, ...rest] = path;\n if (rest.length === 0) return `${indent}${key}: ${value},`;\n return `${indent}${key}: {\\n${nested(rest, `${indent}${INDENT}`)}\\n${indent}},`;\n };\n return `${op.call.callee}({\\n${INDENT}...\\n${nested(op.path, INDENT)}\\n});`;\n}\n\n/** The code to write by hand for `op`; a `$name` stands for the sibling the app passes. */\nexport function manualCode(op: Op): string {\n switch (op.kind) {\n case \"import\":\n return importLine(op);\n case \"export-all\":\n return `export * from \"${op.from}\";`;\n case \"append-element\":\n return callCode(op, `[..., ${op.element}]`);\n case \"set-property\":\n return callCode(op, op.value.replace(/\\$([A-Za-z_]\\w*)/g, \"$1\"));\n case \"wrap-property\":\n return callCode(op, `${op.wrapper}(...)`);\n case \"jsx-attribute\":\n return `<${op.element} ... ${op.name}=${op.value}>`;\n case \"jsx-child\":\n return [\n `function ${op.component}() {`,\n `${INDENT}return (`,\n `${INDENT}${INDENT}<...>`,\n `${INDENT}${INDENT}${INDENT}...`,\n `${INDENT}${INDENT}${INDENT}<${op.element} />`,\n `${INDENT}${INDENT}</...>`,\n `${INDENT});`,\n \"}\",\n ].join(\"\\n\");\n }\n}\n\nfunction manualHeading(file: string, op: Op): string {\n switch (op.kind) {\n case \"import\":\n return `In ${file}, import ${op.names.join(\", \")} from ${op.from}:`;\n case \"export-all\":\n return `In ${file}, re-export ${op.from}:`;\n case \"append-element\":\n return `In ${file}, add ${op.element} to \\`${op.path.join(\".\")}\\` of ${op.call.callee}:`;\n case \"set-property\":\n return `In ${file}, pass \\`${op.path.join(\".\")}\\` to ${op.call.callee}:`;\n case \"wrap-property\":\n return `In ${file}, wrap \\`${op.path.join(\".\")}\\` of ${op.call.callee} in ${op.wrapper}:`;\n case \"jsx-attribute\":\n return `In ${file}, add \\`${op.name}=${op.value}\\` to <${op.element}>:`;\n case \"jsx-child\":\n return `In ${file}, render <${op.element} /> in ${op.component}:`;\n }\n}\n\nexport function indentLines(text: string, indent: string): string {\n return text\n .split(\"\\n\")\n .map((line) => (line ? `${indent}${line}` : line))\n .join(\"\\n\");\n}\n\n/** The change to make by hand when `op` is unsafe. */\nexport function manualChange(file: string, op: Op): string {\n return `${manualHeading(file, op)}\\n\\n${indentLines(manualCode(op), INDENT)}`;\n}\n\nexport type EditOutcome =\n | { readonly status: \"done\" }\n | { readonly status: \"edit\"; readonly text: string }\n | { readonly status: \"unsafe\"; readonly unsafe: readonly UnsafeOp[] };\n\nexport interface UnsafeOp {\n readonly op: Op;\n readonly reason: string;\n}\n\nexport const UNCONFIRMED = \"could not confirm the edit\";\n\n/**\n * Applies `ops` in order, reparsing after each one, then proves the result: it must still\n * parse and every op must now evaluate to `done`. A failed proof is `unsafe`, so a bug in an op\n * can cost a manual step but never a broken or half-edited file, and a second run is a no-op\n * by construction. Collects every unsafe op instead of stopping at the first.\n */\nexport function editSource(file: SourceFile, ops: readonly Op[]): EditOutcome {\n let current = file;\n const failed: UnsafeOp[] = [];\n for (const op of ops) {\n const outcome = evaluateOp(current, op);\n if (outcome.status === \"unsafe\") failed.push({ op, reason: outcome.reason });\n if (outcome.status === \"edit\") {\n try {\n current = parseSource(file.path, applySplices(current.text, outcome.splices));\n } catch {\n failed.push({ op, reason: UNCONFIRMED });\n }\n }\n }\n if (failed.length > 0) return { status: \"unsafe\", unsafe: failed };\n if (current.text === file.text) return { status: \"done\" };\n const unconfirmed = ops.filter((op) => evaluateOp(current, op).status !== \"done\");\n if (unconfirmed.length > 0) {\n return {\n status: \"unsafe\",\n unsafe: unconfirmed.map((op) => ({ op, reason: UNCONFIRMED })),\n };\n }\n return { status: \"edit\", text: current.text };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/edit/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAWtC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAG/B,IAAI;IACJ,IAAI;IAHG,IAAI,GAAG,mBAAmB,CAAC;IAC7C,YACW,IAAY,EACZ,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;oBAJ5B,IAAI;oBACJ,IAAI;IAIf,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;SACxE,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAAqC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AASD,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA0B;IACnE,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/edit/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAWtC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAG/B,IAAI;IACJ,IAAI;IAHG,IAAI,GAAG,mBAAmB,CAAC;IAC7C,YACW,IAAY,EACZ,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;oBAJ5B,IAAI;oBACJ,IAAI;IAIf,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE;YACtB,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;SACxE,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAAqC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AASD,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAA0B;IACnE,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { parse } from \"@babel/parser\";\nimport type { File } from \"@babel/types\";\n\n/** A parsed TypeScript or TSX module. Edits never reprint it; they splice `text`. */\nexport interface SourceFile {\n /** Project-relative, with `/` separators. */\n readonly path: string;\n readonly text: string;\n readonly ast: File;\n}\n\nexport class SourceSyntaxError extends Error {\n override readonly name = \"SourceSyntaxError\";\n constructor(\n readonly path: string,\n readonly line: number,\n message: string,\n ) {\n super(`${path}:${line}: ${message}`);\n }\n}\n\nexport function parseSource(path: string, text: string): SourceFile {\n try {\n const ast = parse(text, {\n sourceType: \"module\",\n plugins: path.endsWith(\".tsx\") ? [\"typescript\", \"jsx\"] : [\"typescript\"],\n });\n return { path, text, ast };\n } catch (error) {\n const line = (error as { loc?: { line?: number } }).loc?.line ?? 0;\n throw new SourceSyntaxError(path, line, (error as Error).message);\n }\n}\n\n/** Offsets index the text before any splice of the same batch. */\nexport interface Splice {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n}\n\n/** Splices must not overlap; two inserts at one offset keep their order. */\nexport function applySplices(text: string, splices: readonly Splice[]): string {\n const ordered = splices\n .map((splice, index) => ({ splice, index }))\n .sort((a, b) => b.splice.start - a.splice.start || b.index - a.index);\n let result = text;\n for (const { splice } of ordered) {\n result = result.slice(0, splice.start) + splice.text + result.slice(splice.end);\n }\n return result;\n}\n"]}
@@ -4,6 +4,8 @@ import type { SourceFile } from "./source.js";
4
4
  export interface CallSite {
5
5
  readonly callee: string;
6
6
  readonly from: string;
7
+ /** Other names from `from` that stand in for `callee`, such as `createRootRouteWithContext`. */
8
+ readonly or?: readonly string[];
7
9
  }
8
10
  export type Found<T> = {
9
11
  readonly ok: true;
@@ -19,7 +21,10 @@ export declare function forEachNode(node: Node, visit: (node: Node) => void): vo
19
21
  /** The local name a value import of `name` from `from` binds, following `as` renames. */
20
22
  export declare function importedName(file: SourceFile, name: string, from: string): string | undefined;
21
23
  export declare function callsOf(file: SourceFile, local: string): CallExpression[];
22
- /** Exactly one call of `site.callee` through its import binding; never a same-named local. */
24
+ /**
25
+ * Exactly one call of `site.callee`, or of a name in `site.or`, through its import binding;
26
+ * never a same-named local. A curried call, `f<T>()(options)`, is the call that takes options.
27
+ */
23
28
  export declare function findCall(file: SourceFile, site: CallSite): Found<CallExpression>;
24
29
  export type ObjectArgument = {
25
30
  readonly kind: "none";
@@ -1 +1 @@
1
- {"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/edit/syntax.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,IAAI,EACJ,gBAAgB,EAChB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,0GAA0G;AAC1G,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC;AACzE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,MAAM,WAAY,MAAM,KAAG,MAAiC,CAAC;AAG1E,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAE3D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAezE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAkBpB;AAwBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAYzE;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,CAehF;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,cAAc,GACnB,KAAK,CAAC,cAAc,CAAC,CAOvB;AASD,qGAAqG;AACrG,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBnC;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAE5D"}
1
+ {"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/edit/syntax.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,IAAI,EACJ,gBAAgB,EAChB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,0GAA0G;AAC1G,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC;AACzE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,MAAM,WAAY,MAAM,KAAG,MAAiC,CAAC;AAG1E,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAE3D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAezE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAkBpB;AAwBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAYzE;AAYD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,CAgBhF;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,cAAc,GACnB,KAAK,CAAC,cAAc,CAAC,CAOvB;AASD,qGAAqG;AACrG,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBnC;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAE5D"}
@@ -62,21 +62,36 @@ export function callsOf(file, local) {
62
62
  });
63
63
  return calls;
64
64
  }
65
- /** Exactly one call of `site.callee` through its import binding; never a same-named local. */
65
+ /** The call a curried factory returns, `f<T>()(options)`, when `call` is `f<T>()`. */
66
+ function curriedCall(file, call) {
67
+ if (call.arguments.length > 0)
68
+ return call;
69
+ let outer;
70
+ forEachNode(file.ast, (node) => {
71
+ if (node.type === "CallExpression" && node.callee === call)
72
+ outer = node;
73
+ });
74
+ return outer ?? call;
75
+ }
76
+ /**
77
+ * Exactly one call of `site.callee`, or of a name in `site.or`, through its import binding;
78
+ * never a same-named local. A curried call, `f<T>()(options)`, is the call that takes options.
79
+ */
66
80
  export function findCall(file, site) {
67
- const local = importedName(file, site.callee, site.from);
68
- if (!local) {
81
+ const names = [site.callee, ...(site.or ?? [])];
82
+ const locals = names.flatMap((name) => importedName(file, name, site.from) ?? []);
83
+ if (locals.length === 0) {
69
84
  return unsafe(declaresAtTopLevel(file, site.callee)
70
85
  ? `\`${site.callee}\` here is declared in ${file.path}, not imported from ${site.from}.`
71
- : `${file.path} does not import ${site.callee} from ${site.from}.`);
86
+ : `${file.path} does not import ${names.join(" or ")} from ${site.from}.`);
72
87
  }
73
- const calls = callsOf(file, local);
88
+ const calls = locals.flatMap((local) => callsOf(file, local));
74
89
  if (calls.length === 0)
75
90
  return unsafe(`${file.path} never calls ${site.callee}().`);
76
91
  if (calls.length > 1) {
77
92
  return unsafe(`${site.callee}() is called in more than one place in ${file.path}.`);
78
93
  }
79
- return found(calls[0]);
94
+ return found(curriedCall(file, calls[0]));
80
95
  }
81
96
  export function objectArgument(file, site, call) {
82
97
  const [first] = call.arguments;
@@ -1 +1 @@
1
- {"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/edit/syntax.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/edit/syntax.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CallExpression,\n Expression,\n Node,\n ObjectExpression,\n ObjectProperty,\n} from \"@babel/types\";\n\nimport type { SourceFile } from \"./source.js\";\n\n/** A call found by what it calls: `createServer` imported from `@parlor/server`, under any local name. */\nexport interface CallSite {\n readonly callee: string;\n readonly from: string;\n /** Other names from `from` that stand in for `callee`, such as `createRootRouteWithContext`. */\n readonly or?: readonly string[];\n}\n\nexport type Found<T> = { readonly ok: true; readonly value: T } | Unsafe;\nexport interface Unsafe {\n readonly ok: false;\n readonly reason: string;\n}\n\nexport const unsafe = (reason: string): Unsafe => ({ ok: false, reason });\nconst found = <T>(value: T): Found<T> => ({ ok: true, value });\n\nexport function textOf(file: SourceFile, node: Node): string {\n return file.text.slice(node.start ?? 0, node.end ?? 0);\n}\n\nexport function forEachNode(node: Node, visit: (node: Node) => void): void {\n visit(node);\n for (const [key, value] of Object.entries(node)) {\n if (key === \"loc\" || key.endsWith(\"Comments\")) continue;\n const children: unknown[] = Array.isArray(value) ? value : [value];\n for (const child of children) {\n if (\n child &&\n typeof child === \"object\" &&\n typeof (child as Node).type === \"string\"\n ) {\n forEachNode(child as Node, visit);\n }\n }\n }\n}\n\n/** The local name a value import of `name` from `from` binds, following `as` renames. */\nexport function importedName(\n file: SourceFile,\n name: string,\n from: string,\n): string | undefined {\n for (const statement of file.ast.program.body) {\n if (statement.type !== \"ImportDeclaration\" || statement.source.value !== from)\n continue;\n if (statement.importKind === \"type\") continue;\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === \"ImportSpecifier\" &&\n specifier.importKind !== \"type\" &&\n (specifier.imported.type === \"Identifier\"\n ? specifier.imported.name\n : specifier.imported.value) === name\n ) {\n return specifier.local.name;\n }\n }\n }\n return undefined;\n}\n\nfunction declaresAtTopLevel(file: SourceFile, name: string): boolean {\n return file.ast.program.body.some((statement) => {\n const declaration =\n statement.type === \"ExportNamedDeclaration\" ? statement.declaration : statement;\n if (!declaration) return false;\n if (\n (declaration.type === \"FunctionDeclaration\" ||\n declaration.type === \"ClassDeclaration\") &&\n declaration.id?.name === name\n ) {\n return true;\n }\n return (\n declaration.type === \"VariableDeclaration\" &&\n declaration.declarations.some(\n (declarator) =>\n declarator.id.type === \"Identifier\" && declarator.id.name === name,\n )\n );\n });\n}\n\nexport function callsOf(file: SourceFile, local: string): CallExpression[] {\n const calls: CallExpression[] = [];\n forEachNode(file.ast, (node) => {\n if (\n node.type === \"CallExpression\" &&\n node.callee.type === \"Identifier\" &&\n node.callee.name === local\n ) {\n calls.push(node);\n }\n });\n return calls;\n}\n\n/** The call a curried factory returns, `f<T>()(options)`, when `call` is `f<T>()`. */\nfunction curriedCall(file: SourceFile, call: CallExpression): CallExpression {\n if (call.arguments.length > 0) return call;\n let outer: CallExpression | undefined;\n forEachNode(file.ast, (node) => {\n if (node.type === \"CallExpression\" && node.callee === call) outer = node;\n });\n return outer ?? call;\n}\n\n/**\n * Exactly one call of `site.callee`, or of a name in `site.or`, through its import binding;\n * never a same-named local. A curried call, `f<T>()(options)`, is the call that takes options.\n */\nexport function findCall(file: SourceFile, site: CallSite): Found<CallExpression> {\n const names = [site.callee, ...(site.or ?? [])];\n const locals = names.flatMap((name) => importedName(file, name, site.from) ?? []);\n if (locals.length === 0) {\n return unsafe(\n declaresAtTopLevel(file, site.callee)\n ? `\\`${site.callee}\\` here is declared in ${file.path}, not imported from ${site.from}.`\n : `${file.path} does not import ${names.join(\" or \")} from ${site.from}.`,\n );\n }\n const calls = locals.flatMap((local) => callsOf(file, local));\n if (calls.length === 0) return unsafe(`${file.path} never calls ${site.callee}().`);\n if (calls.length > 1) {\n return unsafe(`${site.callee}() is called in more than one place in ${file.path}.`);\n }\n return found(curriedCall(file, calls[0]!));\n}\n\nexport type ObjectArgument =\n | { readonly kind: \"none\" }\n | { readonly kind: \"object\"; readonly node: ObjectExpression };\n\nexport function objectArgument(\n file: SourceFile,\n site: CallSite,\n call: CallExpression,\n): Found<ObjectArgument> {\n const [first] = call.arguments;\n if (!first) return found({ kind: \"none\" });\n if (first.type === \"ObjectExpression\") return found({ kind: \"object\", node: first });\n return unsafe(\n `${site.callee}() is called with \\`${textOf(file, first)}\\`, not an object literal.`,\n );\n}\n\nfunction keyName(property: ObjectProperty): string | undefined {\n if (property.computed) return undefined;\n if (property.key.type === \"Identifier\") return property.key.name;\n if (property.key.type === \"StringLiteral\") return property.key.value;\n return undefined;\n}\n\n/** The property `key` of `object`, refusing shapes that could hide it: spreads and computed keys. */\nexport function propertyOf(\n file: SourceFile,\n object: ObjectExpression,\n key: string,\n): Found<ObjectProperty | undefined> {\n for (const property of object.properties) {\n if (property.type === \"SpreadElement\") {\n return unsafe(\n `the object passes \\`...${textOf(file, property.argument)}\\`, which may already set \\`${key}\\`.`,\n );\n }\n if (property.type === \"ObjectProperty\" && property.computed) {\n return unsafe(`the object has a computed key, which may already set \\`${key}\\`.`);\n }\n }\n const match = object.properties.find(\n (property): property is ObjectProperty =>\n property.type === \"ObjectProperty\" && keyName(property) === key,\n );\n return found(match);\n}\n\nexport function valueOf(property: ObjectProperty): Expression {\n return property.value as Expression;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClB,IAAI,GAAG,aAAa,CAAC;CACxC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClB,IAAI,GAAG,aAAa,CAAC;CACxC","sourcesContent":["/** A refusal with a message for the terminal: the bin prints it and exits 1. */\nexport class CreateError extends Error {\n override readonly name = \"CreateError\";\n}\n"]}
package/dist/files.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;AAOtF,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,IAAY,EACZ,GAAW,EACX,IAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAC3E,CAAC,KAA4B,EAAE,EAAE;QAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnE,MAAM,KAAK,CAAC;IACd,CAAC,CACF,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,OAAO;SACJ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACvD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CACL,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CACzB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,EAC7C,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;AAEJ,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAC5E,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE;QACpE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEvF,MAAM,UAAU,aAAa,CAC3B,KAAkC,EAClC,SAAS,GAAyC,IAAI,GAAG,EAAE;IAE3D,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAClB,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;QACrF,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,YAAY,GAAW,aAAa;IAChE,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAC5B,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QAClF,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CACvB,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,KAAkC;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,SAAS,CAAC,GAAG,MAAM,aAAa,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport type { PackageManifest, ProjectFiles } from \"./add/plan.js\";\nimport { TEMPLATES_DIR } from \"./version.js\";\n\n/** npm never publishes a file named `.gitignore`, so templates store it as `_gitignore`. */\nexport const RENAMED_ON_COPY: Readonly<Record<string, string>> = {\n _gitignore: \".gitignore\",\n};\n\nexport const NEVER_COPIED: ReadonlySet<string> = new Set([\"node_modules\", \".parlor\"]);\n\nexport interface TemplateFiles {\n list(template: string, dir: string): Promise<readonly string[]>;\n read(template: string, path: string): Promise<string>;\n}\n\nfunction onCopy(path: string): string {\n const name = path.split(\"/\").pop() ?? path;\n const renamed = RENAMED_ON_COPY[name];\n return renamed ? `${path.slice(0, -name.length)}${renamed}` : path;\n}\n\nfunction fromCopy(path: string): string {\n const name = path.split(\"/\").pop() ?? path;\n const original = Object.entries(RENAMED_ON_COPY).find(([, to]) => to === name)?.[0];\n return original ? `${path.slice(0, -name.length)}${original}` : path;\n}\n\nasync function walk(\n root: string,\n dir: string,\n skip: ReadonlySet<string>,\n): Promise<string[]> {\n const entries = await readdir(join(root, dir), { withFileTypes: true }).catch(\n (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\" || error.code === \"ENOTDIR\") return [];\n throw error;\n },\n );\n const nested = await Promise.all(\n entries\n .filter((entry) => !skip.has(entry.name))\n .map((entry) => {\n const path = dir ? `${dir}/${entry.name}` : entry.name;\n return entry.isDirectory() ? walk(root, path, skip) : Promise.resolve([path]);\n }),\n );\n return nested.flat();\n}\n\nconst readJson = (path: string) =>\n readFile(path, \"utf8\").then(\n (text) => JSON.parse(text) as PackageManifest,\n () => undefined,\n );\n\n/** `manifest` reads `<rootDir>/node_modules/<name>/package.json`. */\nexport function projectFiles(rootDir: string): ProjectFiles {\n return {\n read: (path) => readFile(join(rootDir, path), \"utf8\").catch(() => undefined),\n list: async (dir) => (await walk(rootDir, dir, NEVER_LISTED)).sort(),\n manifest: (name) => readJson(join(rootDir, \"node_modules\", name, \"package.json\")),\n };\n}\n\nconst NEVER_LISTED: ReadonlySet<string> = new Set([\"node_modules\", \".git\", \".parlor\"]);\n\nexport function inMemoryFiles(\n files: ReadonlyMap<string, string>,\n manifests: ReadonlyMap<string, PackageManifest> = new Map(),\n): ProjectFiles {\n return {\n read: async (path) => files.get(path),\n list: async (dir) =>\n [...files.keys()].filter((path) => dir === \"\" || path.startsWith(`${dir}/`)).sort(),\n manifest: async (name) => manifests.get(name),\n };\n}\n\nexport function templateFiles(templatesDir: string = TEMPLATES_DIR): TemplateFiles {\n return {\n list: async (template, dir) =>\n (await walk(join(templatesDir, template), dir, NEVER_COPIED)).map(onCopy).sort(),\n read: (template, path) =>\n readFile(join(templatesDir, template, fromCopy(path)), \"utf8\"),\n };\n}\n\n/** Temp-and-rename, so a crash leaves whole files. */\nexport async function writeFiles(\n rootDir: string,\n files: ReadonlyMap<string, string>,\n): Promise<void> {\n for (const [path, content] of files) {\n const target = join(rootDir, path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(`${target}.parlor-tmp`, content);\n await rename(`${target}.parlor-tmp`, target);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["import { fileURLToPath } from \"node:url\";\n\nimport type { ProjectLayout } from \"./add/addon.js\";\nimport { type PackageManifest, planAddons } from \"./add/plan.js\";\nimport { ADDONS } from \"./addons/index.js\";\nimport { inMemoryFiles, type TemplateFiles } from \"./files.js\";\n\n/**\n * `fixtures/with-auth` is the default template after `parlor add auth`, checked in as a\n * workspace package so CI typechecks and tests the composed project. `scripts/write-fixtures.ts`\n * rewrites it from the engine; `fixtures.spec.ts` fails when the two differ, so it is never\n * synced by hand.\n */\nexport const FIXTURES_DIR: string = fileURLToPath(\n new URL(\"../fixtures/\", import.meta.url),\n);\n\nexport const WITH_AUTH = {\n dir: \"with-auth\",\n packageName: \"parlor-fixture-with-auth\",\n addons: [\"auth\"],\n} as const;\n\n/** The default layout, which both the template and the fixture use. */\nexport const DEFAULT_LAYOUT: Omit<ProjectLayout, \"rootDir\"> = {\n serverEntry: \"server.ts\",\n schemaDir: \"schema\",\n migrationsDir: \"migrations\",\n routeTree: \"src/routeTree.gen.ts\",\n};\n\n/**\n * The fixture's files before its generators run: the default template with `_gitignore` kept\n * under its template name, the plan's writes laid over it, and `package.json` as the package\n * manager would leave it, except that `\"framework\"` dependencies are `workspace:*` so the\n * fixture installs inside the repo. `authManifest` stands in for the installed `@parlor/auth`,\n * which is how `better-auth` gets its pin.\n */\nexport async function composeWithAuth(\n templates: TemplateFiles,\n authManifest: PackageManifest,\n): Promise<ReadonlyMap<string, string>> {\n const files = new Map<string, string>();\n for (const path of await templates.list(\"default\", \"\")) {\n files.set(path, await templates.read(\"default\", path));\n }\n const plan = await planAddons(\n { ...DEFAULT_LAYOUT, rootDir: \"/\" },\n WITH_AUTH.addons,\n inMemoryFiles(files, new Map([[\"@parlor/auth\", authManifest]])),\n templates,\n );\n if (plan.kind !== \"ready\") {\n throw new Error(\n `The default template no longer takes ${WITH_AUTH.addons.join(\", \")}: ${plan.kind}`,\n );\n }\n for (const write of plan.writes) files.set(write.path, write.content);\n const manifest = JSON.parse(files.get(\"package.json\") ?? \"{}\") as PackageManifest &\n Record<string, unknown>;\n const declared = WITH_AUTH.addons.flatMap((name) =>\n Object.entries(ADDONS[name].dependencies),\n );\n const dependencies: Record<string, string> = { ...manifest.dependencies };\n for (const dependency of plan.dependencies) {\n const version = declared.find(([name]) => name === dependency.name)?.[1];\n dependencies[dependency.name] =\n version === \"framework\" ? \"workspace:*\" : String(dependency.version);\n }\n files.set(\n \"package.json\",\n `${JSON.stringify(\n {\n ...manifest,\n name: WITH_AUTH.packageName,\n dependencies: Object.fromEntries(\n Object.entries(dependencies).sort(([a], [b]) => a.localeCompare(b)),\n ),\n },\n null,\n 2,\n )}\\n`,\n );\n const ignore = files.get(\".gitignore\");\n files.delete(\".gitignore\");\n if (ignore !== undefined) files.set(\"_gitignore\", ignore);\n return files;\n}\n\n/** Paths the fixture holds that the composition does not: written by the generators. */\nexport function isGeneratedPath(path: string): boolean {\n return (\n path === DEFAULT_LAYOUT.routeTree ||\n path.startsWith(`${DEFAULT_LAYOUT.migrationsDir}/`)\n );\n}\n"]}
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AAO1E,KAAK,UAAU,GAAG,CAAC,SAAiB,EAAE,IAAuB;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACpC,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAI,KAA6B,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAK,KAAe,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE;YAClC,QAAQ;YACR,aAAa;YACb,uBAAuB;YACvB,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AAO1E,KAAK,UAAU,GAAG,CAAC,SAAiB,EAAE,IAAuB;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACpC,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAI,KAA6B,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAK,KAAe,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE;YAClC,QAAQ;YACR,aAAa;YACb,uBAAuB;YACvB,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst run = promisify(execFile);\n\nexport const INITIAL_COMMIT_MESSAGE = \"Initial commit from create-parlor\";\n\nexport type GitOutcome =\n | { readonly kind: \"committed\" }\n | { readonly kind: \"skipped\"; readonly reason: \"inside-repository\" | \"git-missing\" }\n | { readonly kind: \"failed\"; readonly message: string };\n\nasync function git(directory: string, args: readonly string[]): Promise<string> {\n const { stdout } = await run(\"git\", [...args], { cwd: directory });\n return stdout;\n}\n\n/**\n * `git init -b main`, `git add -A`, one commit. Never fails the create: a missing identity or\n * hook failure becomes `failed` with git's message, and the files stay as they are.\n */\nexport async function initialCommit(directory: string): Promise<GitOutcome> {\n try {\n await git(directory, [\"--version\"]);\n } catch {\n return { kind: \"skipped\", reason: \"git-missing\" };\n }\n const inside = await git(directory, [\"rev-parse\", \"--is-inside-work-tree\"]).then(\n () => true,\n () => false,\n );\n if (inside) return { kind: \"skipped\", reason: \"inside-repository\" };\n try {\n await git(directory, [\"init\", \"-b\", \"main\"]);\n await git(directory, [\"add\", \"-A\"]);\n await git(directory, [\"commit\", \"-m\", INITIAL_COMMIT_MESSAGE]);\n return { kind: \"committed\" };\n } catch (error) {\n const stderr = (error as { stderr?: string }).stderr?.trim();\n return { kind: \"failed\", message: stderr || (error as Error).message };\n }\n}\n\n/**\n * Paths with uncommitted changes, untracked included, so `parlor add` refuses to edit a tree\n * whose diff the developer could not review afterwards. `undefined` outside a work tree or\n * without git: nothing to check against.\n */\nexport async function uncommittedChanges(\n directory: string,\n): Promise<readonly string[] | undefined> {\n try {\n const output = await git(directory, [\n \"status\",\n \"--porcelain\",\n \"--untracked-files=all\",\n \".\",\n ]);\n return output\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => line.slice(3).replace(/^.* -> /, \"\"));\n } catch {\n return undefined;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1C,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,KAAK;SACtB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,WAAW,CACnB,IAAI,aAAa,sEAAsE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,aAAa;QACb,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9E,KAAK,EAAE,eAAe,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;KAC3E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS1C,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,KAAK;SACtB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,WAAW,CACnB,IAAI,aAAa,sEAAsE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,aAAa;QACb,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9E,KAAK,EAAE,eAAe,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;KAC3E,CAAC;AACJ,CAAC","sourcesContent":["import { CreateError } from \"./errors.js\";\n\nexport interface AppIdentity {\n readonly directoryName: string;\n readonly packageName: string;\n readonly appName: string;\n readonly appId: string;\n}\n\n/** `my-app` -> { packageName: \"my-app\", appName: \"My App\", appId: \"com.example.myapp\" }. */\nexport function identityFor(directoryName: string): AppIdentity {\n const ascii = directoryName.normalize(\"NFKD\").replace(/[\\u0300-\\u036f]/g, \"\");\n const words = ascii.split(/[^A-Za-z0-9]+/).filter(Boolean);\n const packageName = ascii\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._~-]+/g, \"-\")\n .replace(/^[._-]+/, \"\")\n .replace(/-+$/, \"\");\n const segment = words.join(\"\").toLowerCase();\n if (words.length === 0 || packageName === \"\" || segment === \"\") {\n throw new CreateError(\n `\"${directoryName}\" cannot name a project. Use letters and digits, for example my-app.`,\n );\n }\n return {\n directoryName,\n packageName,\n appName: words.map((word) => word[0]!.toUpperCase() + word.slice(1)).join(\" \"),\n appId: `com.example.${/^[0-9]/.test(segment) ? `app${segment}` : segment}`,\n };\n}\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EAET,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAA2C,aAAa,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAmC,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,aAAa,EACb,aAAa,EACb,gBAAgB,GAIjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,SAAS,EAET,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAA2C,aAAa,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAmC,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,2BAA2B,EAC3B,aAAa,EACb,aAAa,EACb,gBAAgB,GAIjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["export type { ProjectLayout } from \"./add/addon.js\";\nexport {\n type AddRequest,\n type AddResult,\n addAddons,\n type AddTools,\n formatAddResult,\n} from \"./add/run.js\";\nexport { ADDON_NAMES, type AddonName, isAddonName } from \"./addons/index.js\";\nexport { type CreatedProject, type CreateOptions, createProject } from \"./create.js\";\nexport { inspectServerEntry, type Presence, type ServerShape } from \"./edit/inspect.js\";\nexport { CreateError } from \"./errors.js\";\nexport {\n commandsFor,\n detectProjectPackageManager,\n formatCommand,\n fromUserAgent,\n PACKAGE_MANAGERS,\n type PackageManager,\n type PackageManagerCommands,\n type PackageManagerName,\n} from \"./package-manager.js\";\nexport { DOCS_URL, FRAMEWORK_VERSION } from \"./version.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport const PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\", \"bun\"] as const;\nexport type PackageManagerName = (typeof PACKAGE_MANAGERS)[number];\n\nexport interface PackageManager {\n readonly name: PackageManagerName;\n readonly version: string | undefined;\n}\n\nexport interface Command {\n readonly bin: string;\n readonly args: readonly string[];\n}\n\nexport interface PackageManagerCommands {\n readonly install: Command;\n add(packages: readonly string[], options: { readonly dev: boolean }): Command;\n run(script: string): string;\n exec(bin: string, args: readonly string[]): string;\n}\n\n/** Dependencies whose install scripts a Parlor project needs; pnpm 10+ blocks them unless approved. */\nexport const BUILD_SCRIPT_DEPENDENCIES = [\"esbuild\"] as const;\n\n/**\n * `npm_config_user_agent` looks like `pnpm/11.21.0 npm/? node/v24.19.0 darwin arm64`; every\n * package manager sets it for the scripts and `create` initializers it runs.\n */\nexport function fromUserAgent(userAgent: string | undefined): PackageManager | undefined {\n const [name, version] = userAgent?.split(\" \")[0]?.split(\"/\") ?? [];\n if (!isPackageManagerName(name)) return undefined;\n return { name, version: version && version !== \"?\" ? version : undefined };\n}\n\nfunction isPackageManagerName(name: string | undefined): name is PackageManagerName {\n return PACKAGE_MANAGERS.includes(name as PackageManagerName);\n}\n\nconst LOCKFILES: ReadonlyArray<readonly [string, PackageManagerName]> = [\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"bun.lock\", \"bun\"],\n [\"bun.lockb\", \"bun\"],\n [\"yarn.lock\", \"yarn\"],\n [\"package-lock.json\", \"npm\"],\n];\n\nfunction fromPackageManagerField(field: unknown): PackageManager | undefined {\n if (typeof field !== \"string\") return undefined;\n const [name, rest = \"\"] = field.split(\"@\");\n if (!isPackageManagerName(name)) return undefined;\n return { name, version: rest.split(\"+\")[0] || undefined };\n}\n\nexport async function detectProjectPackageManager(\n rootDir: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<PackageManager> {\n const invoking = fromUserAgent(env.npm_config_user_agent);\n if (invoking) return invoking;\n const manifest = await readFile(join(rootDir, \"package.json\"), \"utf8\").then(\n (text) => JSON.parse(text) as { packageManager?: unknown },\n () => undefined,\n );\n const declared = fromPackageManagerField(manifest?.packageManager);\n if (declared) return declared;\n const lockfile = LOCKFILES.find(([file]) => existsSync(join(rootDir, file)));\n return { name: lockfile?.[1] ?? \"npm\", version: undefined };\n}\n\nexport function commandsFor({ name }: PackageManager): PackageManagerCommands {\n const addVerb = name === \"npm\" ? \"install\" : \"add\";\n const devFlag = name === \"npm\" ? \"--save-dev\" : name === \"bun\" ? \"--dev\" : \"-D\";\n return {\n install: { bin: name, args: [\"install\"] },\n add: (packages, { dev }) => ({\n bin: name,\n args: [addVerb, ...(dev ? [devFlag] : []), ...packages],\n }),\n run: (script) =>\n name === \"pnpm\" || name === \"yarn\" ? `${name} ${script}` : `${name} run ${script}`,\n exec: (bin, args) =>\n formatCommand(execCommand({ name, version: undefined }, bin, args)),\n };\n}\n\n/** The runnable form of `commandsFor(manager).exec`. */\nexport function execCommand(\n { name }: PackageManager,\n bin: string,\n args: readonly string[],\n): Command {\n const runner = { npm: \"npx\", pnpm: \"pnpm\", yarn: \"yarn\", bun: \"bunx\" }[name];\n return { bin: runner, args: [bin, ...args] };\n}\n\nexport function formatCommand(command: Command): string {\n return [command.bin, ...command.args].join(\" \");\n}\n\n/** Yarn must not use Plug'n'Play: the CLI resolves its tools from `node_modules`. */\nexport function packageManagerFiles(\n manager: PackageManager,\n): ReadonlyMap<string, string> {\n if (manager.name === \"pnpm\") {\n const builds = usesOnlyBuiltDependencies(manager.version)\n ? `onlyBuiltDependencies:\\n${BUILD_SCRIPT_DEPENDENCIES.map((name) => ` - ${name}\\n`).join(\"\")}`\n : `allowBuilds:\\n${BUILD_SCRIPT_DEPENDENCIES.map((name) => ` ${name}: true\\n`).join(\"\")}`;\n return new Map([[\"pnpm-workspace.yaml\", builds]]);\n }\n if (manager.name === \"yarn\")\n return new Map([[\".yarnrc.yml\", \"nodeLinker: node-modules\\n\"]]);\n return new Map();\n}\n\n/** pnpm 10.0 to 10.25; an unknown version gets the current form, as create-next-app does. */\nfunction usesOnlyBuiltDependencies(version: string | undefined): boolean {\n const [major, minor] = (version ?? \"\").split(\".\").map(Number);\n return major === 10 && minor !== undefined && minor < 26;\n}\n\nexport function packageManagerField(manager: PackageManager): string | undefined {\n if (manager.name === \"npm\" || !manager.version) return undefined;\n return `${manager.name}@${manager.version}`;\n}\n\nexport type InstallOutcome =\n | { readonly kind: \"installed\" }\n /** pnpm skipped build scripts it was not told to run; the project still works, the hint fixes it. */\n | {\n readonly kind: \"ignored-builds\";\n readonly packages: readonly string[];\n readonly hint: string;\n }\n | {\n readonly kind: \"failed\";\n readonly command: string;\n readonly exitCode: number | null;\n };\n\n/** `NODE_ENV=development`, because pnpm skips devDependencies in production. */\nexport async function runInstall(\n rootDir: string,\n command: Command,\n log: (line: string) => void,\n): Promise<InstallOutcome> {\n const child = spawn(command.bin, command.args, {\n cwd: rootDir,\n env: { ...process.env, NODE_ENV: \"development\" },\n stdio: [\"inherit\", \"inherit\", \"pipe\"],\n });\n let stderr = \"\";\n child.stderr.on(\"data\", (chunk: Buffer) => {\n process.stderr.write(chunk);\n stderr += chunk.toString(\"utf8\");\n });\n const exitCode = await new Promise<number | null>((resolve) => {\n child.once(\"error\", () => resolve(null));\n child.once(\"close\", resolve);\n });\n if (exitCode === 0) return { kind: \"installed\" };\n const ignored = IGNORED_BUILDS.exec(stderr);\n if (ignored) {\n const packages = (ignored[1] ?? \"\").split(\",\").map((entry) => entry.trim());\n const hint = \"Run pnpm approve-builds to allow them.\";\n log(`pnpm skipped the build scripts of ${packages.join(\", \")}. ${hint}`);\n return { kind: \"ignored-builds\", packages, hint };\n }\n return { kind: \"failed\", command: formatCommand(command), exitCode };\n}\n\nconst IGNORED_BUILDS =\n /ERR_PNPM_IGNORED_BUILDS\\]?\\s*Ignored build scripts:\\s*([^\\n]+?)\\.?\\s*$/m;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAC5B,OAAO,CAAC,iBAAiB,CAC1B,CAAC,OAAO,CAAC;AAEV,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAW,aAAa,CAChD,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,kCAAkC,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,8GAA8G;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAC5B,OAAO,CAAC,iBAAiB,CAC1B,CAAC,OAAO,CAAC;AAEV,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAW,aAAa,CAChD,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,kCAAkC,CAAC","sourcesContent":["import { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\n\nconst require = createRequire(import.meta.url);\n\n/** `@parlor/*` and `create-parlor` release in lockstep, so a project pins every framework package to this. */\nexport const FRAMEWORK_VERSION: string = (\n require(\"../package.json\") as { version: string }\n).version;\n\n/** The same folder from `src/` in the repo and from `dist/` when published. */\nexport const TEMPLATES_DIR: string = fileURLToPath(\n new URL(\"../templates/\", import.meta.url),\n);\n\nexport const DOCS_URL = \"https://cychien.github.io/parlor\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parlor/scaffold",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "What create-parlor and parlor add share: the templates, the add-on model, the syntax-tree edit engine, package manager detection, install and git",
5
5
  "homepage": "https://cychien.github.io/parlor",
6
6
  "bugs": "https://github.com/cychien/parlor/issues",
@@ -34,7 +34,7 @@
34
34
  "tsx": "^4.23.15",
35
35
  "typescript": "^7.0.2",
36
36
  "vitest": "^5.0.3",
37
- "@parlor/config": "0.1.0"
37
+ "@parlor/config": "0.2.0"
38
38
  },
39
39
  "engines": {
40
40
  "node": ">=24"
@@ -1,6 +1,5 @@
1
1
  import { betterAuthProvider, parlorAuth } from "@parlor/auth";
2
2
  import type { DatabaseHandle } from "@parlor/data";
3
- import { betterAuth } from "better-auth";
4
3
  import { drizzleAdapter } from "better-auth/adapters/drizzle";
5
4
 
6
5
  import * as schema from "./schema/index.js";
@@ -12,9 +11,9 @@ export function createAuth(database: DatabaseHandle) {
12
11
  emailAndPassword: { enabled: true },
13
12
  });
14
13
  return betterAuthProvider({
15
- instance: betterAuth({
14
+ options: {
16
15
  ...options,
17
16
  database: drizzleAdapter(database.db, { provider: "pg", schema }),
18
- }),
17
+ },
19
18
  });
20
19
  }
@@ -131,8 +131,15 @@ function Note({
131
131
  }
132
132
 
133
133
  function Computers() {
134
- const { agents, agent, choose, connect, hosts, status } = useChat();
134
+ const { agents, agent, choose, connect, hosts, status, unavailable } = useChat();
135
135
  if (status === "loading") return null;
136
+ if (unavailable?.reason === "forbidden") {
137
+ return (
138
+ <Note title="The agent is not available to you">
139
+ <p>This app does not let your account use it.</p>
140
+ </Note>
141
+ );
142
+ }
136
143
  if (status === "unavailable") {
137
144
  return (
138
145
  <Note title="The agent is not available here">
@@ -1,13 +1,13 @@
1
1
  import { createActionClient } from "@parlor/client";
2
2
  import { FrameworkProvider } from "@parlor/client/react";
3
- import { createRouter, RouterProvider } from "@tanstack/react-router";
3
+ import { createParlorRouter, mount } from "@parlor/client/router";
4
+ import { RouterProvider } from "@tanstack/react-router";
4
5
  import { StrictMode } from "react";
5
- import { createRoot } from "react-dom/client";
6
6
 
7
7
  import { routeTree } from "./routeTree.gen.js";
8
8
 
9
9
  const client = createActionClient();
10
- const router = createRouter({ routeTree });
10
+ const router = createParlorRouter({ routeTree, client });
11
11
 
12
12
  declare module "@tanstack/react-router" {
13
13
  interface Register {
@@ -15,10 +15,13 @@ declare module "@tanstack/react-router" {
15
15
  }
16
16
  }
17
17
 
18
- createRoot(document.getElementById("root")!).render(
19
- <StrictMode>
20
- <FrameworkProvider client={client} router={router}>
21
- <RouterProvider router={router} />
22
- </FrameworkProvider>
23
- </StrictMode>,
24
- );
18
+ mount(document.getElementById("root")!, {
19
+ router,
20
+ element: (
21
+ <StrictMode>
22
+ <FrameworkProvider client={client} router={router}>
23
+ <RouterProvider router={router} />
24
+ </FrameworkProvider>
25
+ </StrictMode>
26
+ ),
27
+ });
@@ -1,9 +1,10 @@
1
- import { createRootRoute, Link, Outlet } from "@tanstack/react-router";
1
+ import type { ParlorRouterContext } from "@parlor/client/router";
2
+ import { createRootRouteWithContext, Link, Outlet } from "@tanstack/react-router";
2
3
 
3
4
  import { agentPanel } from "../agent/views.js";
4
5
  import { HeaderActions } from "../header-actions.js";
5
6
 
6
- export const Route = createRootRoute({
7
+ export const Route = createRootRouteWithContext<ParlorRouterContext>()({
7
8
  staticData: {
8
9
  description: "The app shell: a header with the agent button, then the page.",
9
10
  views: [agentPanel],