@parlor/scaffold 0.1.0 → 0.3.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,7 +1,9 @@
1
- import type { Op } from "../edit/ops.js";
1
+ import type { CallSite, Op } from "../edit/ops.js";
2
2
  /** Stands for `server.entry` from `parlor.config.ts`, wherever the app keeps it. */
3
3
  export declare const SERVER_ENTRY: unique symbol;
4
4
  export type ProjectFile = string | typeof SERVER_ENTRY;
5
+ /** The root route, with or without a typed router context. */
6
+ export declare const ROOT_ROUTE: CallSite;
5
7
  /** Folders under `templates/` in this package. `default` is the full default app. */
6
8
  export type TemplateName = "default" | "auth";
7
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"addon.d.ts","sourceRoot":"","sources":["../../src/add/addon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEzC,oFAAoF;AACpF,eAAO,MAAM,YAAY,EAAE,OAAO,MAA+B,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,YAAY,CAAC;AAEvD,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB;AAC3B,kFAAkF;AAChF,WAAW;AACb,kFAAkF;GAChF,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU;AACpB,mFAAmF;AACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACrE,yFAAyF;GACvF;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEN,MAAM,WAAW,KAAK;IACpB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAE9D"}
1
+ {"version":3,"file":"addon.d.ts","sourceRoot":"","sources":["../../src/add/addon.ts"],"names":[],"mappings":"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"}
package/dist/add/addon.js CHANGED
@@ -1,5 +1,11 @@
1
1
  /** Stands for `server.entry` from `parlor.config.ts`, wherever the app keeps it. */
2
2
  export const SERVER_ENTRY = Symbol("server entry");
3
+ /** The root route, with or without a typed router context. */
4
+ export const ROOT_ROUTE = {
5
+ callee: "createRootRoute",
6
+ or: ["createRootRouteWithContext"],
7
+ from: "@tanstack/react-router",
8
+ };
3
9
  export function defineAddon(addon) {
4
10
  return addon;
5
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/add/addon.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,YAAY,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAwGlE,MAAM,UAAU,WAAW,CAAwB,KAAQ;IACzD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/add/addon.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,YAAY,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAGlE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,MAAM,EAAE,iBAAiB;IACzB,EAAE,EAAE,CAAC,4BAA4B,CAAC;IAClC,IAAI,EAAE,wBAAwB;CAC/B,CAAC;AAuGF,MAAM,UAAU,WAAW,CAAwB,KAAQ;IACzD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { CallSite, Op } from \"../edit/ops.js\";\n\n/** Stands for `server.entry` from `parlor.config.ts`, wherever the app keeps it. */\nexport const SERVER_ENTRY: unique symbol = Symbol(\"server entry\");\nexport type ProjectFile = string | typeof SERVER_ENTRY;\n\n/** The root route, with or without a typed router context. */\nexport const ROOT_ROUTE: CallSite = {\n callee: \"createRootRoute\",\n or: [\"createRootRouteWithContext\"],\n from: \"@tanstack/react-router\",\n};\n\n/** Folders under `templates/` in this package. `default` is the full default app. */\nexport type TemplateName = \"default\" | \"auth\";\n\n/**\n * Where the project keeps what add-ons touch, from `parlor.config.ts`. Built by the caller\n * (`parlor add` loads the config), so this package never loads it.\n */\nexport interface ProjectLayout {\n readonly rootDir: string;\n readonly serverEntry: string;\n readonly schemaDir: string;\n readonly migrationsDir: string;\n /** The generated route tree, `src/routeTree.gen.ts` unless `web.routeTree` moves it. */\n readonly routeTree: string;\n}\n\n/** Payload files import each other by relative path, so they need the default layout. */\nexport interface LayoutRequirement {\n readonly serverAtRoot?: true;\n readonly schemaDir?: string;\n readonly routesDir?: string;\n}\n\n/**\n * Every file under `dir` of the template, copied to the same path in the project. A file that\n * already exists is the developer's and is never overwritten.\n */\nexport interface Payload {\n readonly template: TemplateName;\n readonly dir: string;\n}\n\nexport interface FileEdit {\n readonly file: ProjectFile;\n readonly ops: readonly Op[];\n}\n\n/**\n * Renders `<component />` once in the app's UI. Done when any module under `src/` imports\n * `component` from `module`, wherever the developer put it, so the manual change for a missing\n * `into` file satisfies the next run.\n */\nexport interface Mount {\n readonly component: string;\n /** Project path of the module that exports `component`. */\n readonly module: string;\n readonly into: { readonly file: string; readonly parent: string };\n}\n\n/**\n * A pin another installed package owns: `better-auth` is whatever the project's `@parlor/auth`\n * declares, read from its manifest in `node_modules` after that package is installed.\n */\nexport interface FromPackage {\n readonly fromPackage: string;\n readonly dependency: string;\n}\n\nexport type DependencyVersion =\n /** Exactly this package's version: every `@parlor/*` package releases with it. */\n | \"framework\"\n /** An explicit range, for a third-party package nothing in the framework pins. */\n | (string & {})\n | FromPackage;\n\nexport interface EnvVar {\n readonly name: string;\n readonly example: string;\n readonly description: string;\n}\n\n/**\n * A step a framework tool runs after the files are in place. Each kind declares its outputs\n * through `done`: the plan uses it to skip finished work, the transaction uses it to validate\n * the staging copy before anything reaches the project.\n */\nexport type Generation =\n /** `parlor typegen`; done when the route tree lists every route id in `routes`. */\n | { readonly kind: \"route-tree\"; readonly routes: readonly string[] }\n /** `parlor db generate --name <name>`; done when the latest snapshot has every table. */\n | {\n readonly kind: \"migration\";\n readonly name: string;\n readonly tables: readonly string[];\n };\n\nexport interface Addon {\n /** One line for `parlor add --help` and the docs. */\n readonly summary: string;\n readonly requires: LayoutRequirement;\n readonly dependencies: Readonly<Record<string, DependencyVersion>>;\n readonly files: readonly Payload[];\n readonly edits: readonly FileEdit[];\n readonly mounts: readonly Mount[];\n /** Lines added to `.env.example` when missing. */\n readonly env: readonly EnvVar[];\n readonly generate: readonly Generation[];\n /** Printed after a run that changed something. */\n readonly notes: readonly string[];\n}\n\nexport function defineAddon<const A extends Addon>(addon: A): A {\n return addon;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/add/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/add/plan.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, relative } from \"node:path\";\n\nimport { ADDONS, type AddonName } from \"../addons/index.js\";\nimport {\n editSource,\n evaluateOp,\n manualCode,\n type Op,\n opSummary,\n type UnsafeOp,\n} from \"../edit/ops.js\";\nimport { parseSource } from \"../edit/source.js\";\nimport { importedName } from \"../edit/syntax.js\";\nimport type { TemplateFiles } from \"../files.js\";\nimport { FRAMEWORK_VERSION } from \"../version.js\";\nimport {\n type Addon,\n type DependencyVersion,\n type FromPackage,\n type Generation,\n type Mount,\n type ProjectLayout,\n SERVER_ENTRY,\n} from \"./addon.js\";\n\n/** The fields of a `package.json` the engine reads. */\nexport interface PackageManifest {\n readonly name?: string;\n readonly version?: string;\n readonly dependencies?: Readonly<Record<string, string>>;\n readonly devDependencies?: Readonly<Record<string, string>>;\n}\n\n/** Reads the project as it is on disk; tests pass an in-memory map. */\nexport interface ProjectFiles {\n read(path: string): Promise<string | undefined>;\n /** Project-relative paths of every file under `dir`, recursively, skipping `node_modules`. */\n list(dir: string): Promise<readonly string[]>;\n /** The manifest of `name` as installed in the project's `node_modules`; `undefined` when absent. */\n manifest(name: string): Promise<PackageManifest | undefined>;\n}\n\nexport interface PlannedWrite {\n readonly path: string;\n readonly content: string;\n readonly change: \"create\" | \"update\";\n /** One short line per op or payload, for the printed plan: \"auth: createAuth(database)\". */\n readonly summary: readonly string[];\n}\n\n/**\n * A dependency the package manager adds; it owns `package.json` and the lockfile, so neither\n * is a planned write. `version` stays a `FromPackage` until that package is installed, which is\n * why install runs in two rounds.\n */\nexport interface PlannedDependency {\n readonly name: string;\n readonly version: string | FromPackage;\n readonly dev: boolean;\n}\n\n/** What to change by hand, for D4: the file, why the tool would not, and the exact change. */\nexport interface ManualChange {\n readonly file: string;\n readonly reason: string;\n readonly change: string;\n}\n\nexport type AddPlan =\n | { readonly kind: \"done\"; readonly addons: readonly AddonName[] }\n /** Nothing may be written: the developer makes `manual` by hand and runs the command again. */\n | {\n readonly kind: \"blocked\";\n readonly addons: readonly AddonName[];\n readonly manual: readonly ManualChange[];\n }\n | {\n readonly kind: \"ready\";\n readonly addons: readonly AddonName[];\n /** Every changed file with its whole new content; nothing is written while planning. */\n readonly writes: readonly PlannedWrite[];\n readonly dependencies: readonly PlannedDependency[];\n readonly generate: readonly Generation[];\n readonly notes: readonly string[];\n };\n\n/** `fromPackage`'s own pin of `dependency`, as the project has it installed. */\nexport async function resolveFromPackage(\n version: FromPackage,\n project: ProjectFiles,\n): Promise<string | undefined> {\n const manifest = await project.manifest(version.fromPackage);\n return (\n manifest?.dependencies?.[version.dependency] ??\n manifest?.devDependencies?.[version.dependency]\n );\n}\n\nconst relativeImport = (from: string, module: string): string => {\n const path = relative(dirname(from), module).replace(/\\.tsx?$/, \".js\");\n return path.startsWith(\".\") ? path : `./${path}`;\n};\n\nconst isModule = (path: string) => /\\.(?:ts|tsx)$/.test(path) && !path.endsWith(\".d.ts\");\n\ninterface Draft {\n content: string;\n readonly change: \"create\" | \"update\";\n readonly summary: string[];\n}\n\n/**\n * Pure apart from reads. For every add-on, in order, each step is `done`, an edit, or unsafe;\n * any unsafe step makes the plan `blocked` with every manual change, not just the first.\n */\nexport async function planAddons(\n layout: ProjectLayout,\n addons: readonly AddonName[],\n project: ProjectFiles,\n templates: TemplateFiles,\n): Promise<AddPlan> {\n const drafts = new Map<string, Draft>();\n const manual: ManualChange[] = [];\n const dependencies: PlannedDependency[] = [];\n const generate: Generation[] = [];\n const notes: string[] = [];\n const read = async (path: string) =>\n drafts.get(path)?.content ?? (await project.read(path));\n const write = async (path: string, content: string, summary: readonly string[]) => {\n const draft = drafts.get(path);\n if (draft) {\n draft.content = content;\n draft.summary.push(...summary);\n return;\n }\n const exists = (await project.read(path)) !== undefined;\n drafts.set(path, {\n content,\n change: exists ? \"update\" : \"create\",\n summary: [...summary],\n });\n };\n const manifest = JSON.parse(\n (await project.read(\"package.json\")) ?? \"{}\",\n ) as PackageManifest;\n const fingerprint = () =>\n JSON.stringify([\n [...drafts].map(([path, draft]) => [path, draft.content]),\n dependencies,\n generate,\n ]);\n const listed = (name: string) =>\n Boolean(manifest.dependencies?.[name] ?? manifest.devDependencies?.[name]);\n\n for (const name of addons) {\n const addon: Addon = ADDONS[name];\n const before = fingerprint();\n\n const requirement = unmetRequirement(name, addon, layout);\n if (requirement) {\n manual.push(requirement);\n continue;\n }\n\n for (const payload of addon.files) {\n for (const path of await templates.list(payload.template, payload.dir)) {\n if ((await read(path)) === undefined) {\n await write(path, await templates.read(payload.template, path), []);\n }\n }\n }\n\n const edits = new Map<string, Op[]>();\n const addEdit = (file: string, ops: readonly Op[]) =>\n edits.set(file, [...(edits.get(file) ?? []), ...ops]);\n for (const fileEdit of addon.edits) {\n addEdit(\n fileEdit.file === SERVER_ENTRY ? layout.serverEntry : fileEdit.file,\n fileEdit.ops,\n );\n }\n for (const mount of addon.mounts) {\n if (await mounted(mount, project, drafts)) continue;\n addEdit(mount.into.file, [\n {\n kind: \"import\",\n names: [mount.component],\n from: relativeImport(mount.into.file, mount.module),\n },\n { kind: \"jsx-child\", component: mount.into.parent, element: mount.component },\n ]);\n }\n for (const [file, ops] of edits) {\n const text = await read(file);\n if (text === undefined) {\n manual.push({\n file,\n reason: `${file} is missing.`,\n change: ops.map((op) => manualCode(op)).join(\"\\n\\n\"),\n });\n continue;\n }\n const source = parseSource(file, text);\n const outcome = editSource(source, ops);\n if (outcome.status === \"done\") continue;\n if (outcome.status === \"unsafe\") {\n manual.push(manualFor(file, ops, outcome.unsafe));\n continue;\n }\n const summary = ops\n .filter((op) => evaluateOp(source, op).status === \"edit\")\n .map((op) => opSummary(source, op))\n .filter((line): line is string => line !== undefined);\n await write(file, outcome.text, summary);\n }\n\n if (addon.env.length > 0) {\n const current = (await read(ENV_EXAMPLE)) ?? \"\";\n const missing = addon.env.filter(\n (variable) => !new RegExp(`^${variable.name}=`, \"m\").test(current),\n );\n if (missing.length > 0) {\n const lines = missing.map(\n (variable) =>\n `# ${variable.description}\\n${variable.name}=${variable.example}\\n`,\n );\n const separator =\n current === \"\" || current.endsWith(\"\\n\\n\")\n ? \"\"\n : current.endsWith(\"\\n\")\n ? \"\\n\"\n : \"\\n\\n\";\n await write(\n ENV_EXAMPLE,\n `${current}${separator}${lines.join(\"\\n\")}`,\n missing.map((variable) => variable.name),\n );\n }\n }\n\n for (const [dependency, version] of Object.entries(addon.dependencies)) {\n if (dependencies.some((planned) => planned.name === dependency)) continue;\n if (listed(dependency)) continue;\n dependencies.push({\n name: dependency,\n version: await resolveVersion(version, project),\n dev: false,\n });\n }\n\n for (const generation of addon.generate) {\n if (!(await generationDone(layout, generation, project))) generate.push(generation);\n }\n\n if (fingerprint() !== before) notes.push(...addon.notes);\n }\n\n if (manual.length > 0) return { kind: \"blocked\", addons, manual };\n if (drafts.size === 0 && dependencies.length === 0 && generate.length === 0) {\n return { kind: \"done\", addons };\n }\n return {\n kind: \"ready\",\n addons,\n writes: [...drafts].map(([path, draft]) => ({ path, ...draft })),\n dependencies,\n generate,\n notes,\n };\n}\n\nconst ENV_EXAMPLE = \".env.example\";\n\nfunction unmetRequirement(\n name: AddonName,\n addon: Addon,\n layout: ProjectLayout,\n): ManualChange | undefined {\n const { requires } = addon;\n if (requires.serverAtRoot && layout.serverEntry.includes(\"/\")) {\n return {\n file: layout.serverEntry,\n reason: `${name} needs the server entry at the project root, and it is ${layout.serverEntry}.`,\n change: `Move ${layout.serverEntry} to server.ts and set server.entry to \"server.ts\" in parlor.config.ts.`,\n };\n }\n if (requires.schemaDir && layout.schemaDir !== requires.schemaDir) {\n return {\n file: \"parlor.config.ts\",\n reason: `${name} needs the schema in ${requires.schemaDir}/, and it is in ${layout.schemaDir}.`,\n change: `Set database.schema to \"${requires.schemaDir}\" in parlor.config.ts and move the tables there.`,\n };\n }\n const routes = `${dirname(layout.routeTree)}/routes`;\n if (requires.routesDir && routes !== requires.routesDir) {\n return {\n file: \"parlor.config.ts\",\n reason: `${name} needs the routes in ${requires.routesDir}/, and they are in ${routes}/.`,\n change: `Keep web.routeTree at its default so the routes live in ${requires.routesDir}/.`,\n };\n }\n return undefined;\n}\n\nasync function mounted(\n mount: Mount,\n project: ProjectFiles,\n drafts: ReadonlyMap<string, { readonly content: string }>,\n): Promise<boolean> {\n const paths = new Set([\n ...(await project.list(\"src\")),\n ...[...drafts.keys()].filter((path) => path.startsWith(\"src/\")),\n ]);\n for (const path of paths) {\n if (!isModule(path) || path === mount.module) continue;\n const text = drafts.get(path)?.content ?? (await project.read(path));\n if (text === undefined || !text.includes(mount.component)) continue;\n const source = parseSource(path, text);\n if (importedName(source, mount.component, relativeImport(path, mount.module)))\n return true;\n }\n return false;\n}\n\nfunction manualFor(\n file: string,\n ops: readonly Op[],\n failed: readonly UnsafeOp[],\n): ManualChange {\n const imports = ops.filter((op) => op.kind === \"import\").map((op) => manualCode(op));\n const changes = failed\n .filter((entry) => entry.op.kind !== \"import\")\n .map((entry) => manualCode(entry.op));\n return {\n file,\n reason: [...new Set(failed.map((entry) => entry.reason))].join(\" \"),\n change: [...(imports.length > 0 ? [imports.join(\"\\n\")] : []), ...changes].join(\n \"\\n\\n\",\n ),\n };\n}\n\nasync function resolveVersion(\n version: DependencyVersion,\n project: ProjectFiles,\n): Promise<string | FromPackage> {\n if (version === \"framework\") return FRAMEWORK_VERSION;\n if (typeof version === \"string\") return version;\n return (await resolveFromPackage(version, project)) ?? version;\n}\n\n/**\n * Whether a generation's declared outputs are in `project`: the route tree lists every route\n * id; the latest drizzle snapshot (the last entry of `meta/_journal.json`) has every table.\n */\nexport async function generationDone(\n layout: ProjectLayout,\n generation: Generation,\n project: ProjectFiles,\n): Promise<boolean> {\n if (generation.kind === \"route-tree\") {\n const tree = await project.read(layout.routeTree);\n return (\n tree !== undefined &&\n generation.routes.every((route) => tree.includes(`\"${route}\"`))\n );\n }\n const journal = await project.read(`${layout.migrationsDir}/meta/_journal.json`);\n if (journal === undefined) return false;\n const entries = (JSON.parse(journal) as { entries?: { idx: number }[] }).entries ?? [];\n const last = entries.at(-1);\n if (!last) return false;\n const snapshot = await project.read(\n `${layout.migrationsDir}/meta/${String(last.idx).padStart(4, \"0\")}_snapshot.json`,\n );\n if (snapshot === undefined) return false;\n const tables = Object.values(\n (JSON.parse(snapshot) as { tables?: Record<string, { name: string }> }).tables ?? {},\n ).map((table) => table.name);\n return generation.tables.every((table) => tables.includes(table));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/add/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAuB,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAmC,UAAU,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EAEnB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AA+D1B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmB;IACjD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;IACtF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACrF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,UAAU,CACd,OAAO,EACP,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACjE,CAAC;QACF,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;QACjF,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,SAAS,EAAE,EAAE;YACb,OAAO,EAAE;gBACP,GAAG,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;gBAC/E,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D;SACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAsC,CAAC;IAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,mBAAmB,CACzC,OAAO,EACP,IAAI,CAAC,YAAY,EACjB,cAAc,EACd,YAAY,CAAC,OAAO,CAAC,EACrB,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QAClF,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,GAAG,CACD,cAAc,IAAI,CAAC,QAAQ;aACxB,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAClB,UAAU,CAAC,IAAI,KAAK,YAAY;YAC9B,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,kBAAkB,UAAU,CAAC,IAAI,GAAG,CACzC;aACA,IAAI,CAAC,SAAS,CAAC,EAAE,CACrB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,iBAAiB,CACvC,MAAM,EACN,OAAO,EACP,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CACd,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,QAAQ;gBAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QACnF,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI;QACJ,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAe,EAAE,SAA4B;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,GAAG,IAAI,CAAC,MAAM;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;SAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACrC,CAAC;IACF,OAAO;QACL,GAAG,IAAI,CAAC,MAAM;aACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC,GAAG,IAAI,CAAC,MAAM;aACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9D,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CACtB;QACH,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,OAAuB;IAEvB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,MAA4B,EAAE,EAAE,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACnF,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kCAAkC;gBAChH,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,KAAK,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3D,OAAO;gBACL,IAAI,EAAE;oBACJ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC;oBAC5F,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;wBACnC,EAAE;wBACF,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE;wBACpC,0CAA0C,KAAK,WAAW;wBAC1D,EAAE;wBACF,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;qBACnC,CAAC;iBACH,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QACD,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,2CAA2C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mFAAmF;gBACpL,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,OAAO,wBAAwB;gBAC1E,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,KAAK,SAAS,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC3D,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ;gBACpC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE;gBAC5C,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,eAAe,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,CACvE,CAAC;YACF,OAAO;gBACL,IAAI,EAAE;oBACJ,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,kCAAkC;iBACnC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QACD,KAAK,SAAS;YACZ,OAAO;gBACL,IAAI,EAAE;oBACJ,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;oBAC3C,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK;oBACpB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAC3B,CAAC,CAAC,CAAC,EAAE,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;wBAC5E,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,CAAC;aACZ,CAAC;IACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/add/run.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AddonName } from \"../addons/index.js\";\nimport { indentLines } from \"../edit/ops.js\";\nimport { projectFiles, templateFiles, writeFiles } from \"../files.js\";\nimport { uncommittedChanges } from \"../git.js\";\nimport { commandsFor, formatCommand, type PackageManager } from \"../package-manager.js\";\nimport type { ProjectLayout } from \"./addon.js\";\nimport { type AddPlan, type ManualChange, planAddons } from \"./plan.js\";\nimport {\n commitStaging,\n discardStaging,\n generateInStaging,\n installDependencies,\n type ManifestSnapshot,\n pendingInstallCommands,\n restoreManifests,\n snapshotManifests,\n stageProject,\n} from \"./transaction.js\";\n\n/**\n * The framework tools a run needs after files are staged. `parlor add` passes the same code\n * `parlor typegen` and `parlor db generate` run, so this package stays free of the toolchain.\n * Each takes the directory to run in, because the transaction runs them against the staging\n * copy, never against the project.\n */\nexport interface AddTools {\n routeTree(rootDir: string): Promise<void>;\n migration(rootDir: string, name: string): Promise<void>;\n}\n\nexport interface AddRequest {\n readonly layout: ProjectLayout;\n readonly addons: readonly AddonName[];\n readonly packageManager: PackageManager;\n readonly tools: AddTools;\n /** `dry-run` plans and reports without writing or installing. */\n readonly mode: \"apply\" | \"dry-run\";\n /** `false` (`--no-install`) writes files only and reports the install and generate commands. */\n readonly install: boolean;\n /** `false` (`--no-git-check`) skips the refusal on uncommitted changes. */\n readonly gitCheck: boolean;\n readonly log: (line: string) => void;\n}\n\ntype ReadyPlan = Extract<AddPlan, { kind: \"ready\" }>;\n\nexport type AddResult =\n | { readonly kind: \"done\"; readonly addons: readonly AddonName[] }\n | {\n readonly kind: \"blocked\";\n readonly addons: readonly AddonName[];\n readonly manual: readonly ManualChange[];\n }\n | { readonly kind: \"planned\"; readonly plan: ReadyPlan }\n /** The project has uncommitted changes and `gitCheck` is on: nothing was touched. */\n | {\n readonly kind: \"dirty\";\n readonly addons: readonly AddonName[];\n readonly files: readonly string[];\n }\n /** `pending` lists commands skipped by `--no-install`, to run before the next `parlor dev`. */\n | {\n readonly kind: \"applied\";\n readonly plan: ReadyPlan;\n /** Files the generators wrote, beyond the plan's own writes. */\n readonly generated: readonly string[];\n readonly pending: readonly string[];\n }\n /**\n * Nothing reached the project: a failed install restored `package.json` and the lockfile; a\n * failed or unvalidated generation discarded the staging copy and restored them too. Only\n * `node_modules` may hold more than before, which is a cache, not state.\n */\n | {\n readonly kind: \"failed\";\n readonly addons: readonly AddonName[];\n readonly stage: \"install\" | \"generate\";\n readonly message: string;\n };\n\n/**\n * The one entry point behind `parlor add`. A transaction in stages, so a failure never leaves\n * an app that cannot boot and a crash is finished by the next run (every step it already did\n * is `done`):\n * 1. plan (no writes); `blocked`, `done` and `dry-run` return here\n * 2. git: `uncommittedChanges(rootDir)` non-empty and `gitCheck` -> `dirty`\n * 3. install: snapshot `package.json` and the lockfile; round one adds every dependency whose\n * version is known (`<pm> add`), round two resolves each `FromPackage` from the manifest\n * round one installed and adds those; any failure restores the snapshot -> `failed`\n * 4. stage: `stageProject` copies the tree (minus node_modules, .git, .parlor) into\n * `.parlor/add/<run id>/` and lays the planned writes over it\n * 5. generate: each pending generation's tool runs in the staging dir; `generationDone`\n * against the staging copy must then hold, else the copy is discarded -> `failed`\n * 6. commit: every staged file whose bytes differ from the project is written through a temp\n * file and a rename; the staging dir is removed\n * `install: false` skips 3 and 5; `pending` then names the install commands and a second\n * `parlor add` to generate.\n */\nexport async function addAddons(request: AddRequest): Promise<AddResult> {\n const { layout, addons, packageManager, log } = request;\n const { rootDir } = layout;\n const plan = await planAddons(layout, addons, projectFiles(rootDir), templateFiles());\n if (plan.kind === \"done\") return plan;\n if (plan.kind === \"blocked\") return { kind: \"blocked\", addons, manual: plan.manual };\n if (request.mode === \"dry-run\") return { kind: \"planned\", plan };\n if (request.gitCheck) {\n const files = await uncommittedChanges(rootDir);\n if (files && files.length > 0) return { kind: \"dirty\", addons, files };\n }\n if (!request.install) {\n await writeFiles(\n rootDir,\n new Map(plan.writes.map((write) => [write.path, write.content])),\n );\n const pm = commandsFor(packageManager);\n const rerun =\n plan.generate.length > 0 ||\n plan.dependencies.some((dependency) => typeof dependency.version !== \"string\");\n return {\n kind: \"applied\",\n plan,\n generated: [],\n pending: [\n ...pendingInstallCommands(plan.dependencies, packageManager).map(formatCommand),\n ...(rerun ? [pm.exec(\"parlor\", [\"add\", ...addons])] : []),\n ],\n };\n }\n let snapshot: ManifestSnapshot | undefined;\n if (plan.dependencies.length > 0) {\n snapshot = await snapshotManifests(rootDir);\n const installed = await installDependencies(\n rootDir,\n plan.dependencies,\n packageManager,\n projectFiles(rootDir),\n log,\n );\n if (!installed.ok) {\n await restoreManifests(rootDir, snapshot);\n return { kind: \"failed\", addons, stage: \"install\", message: installed.message };\n }\n }\n const staging = await stageProject(rootDir, plan.writes);\n if (plan.generate.length > 0) {\n log(\n `generating ${plan.generate\n .map((generation) =>\n generation.kind === \"route-tree\"\n ? \"the route tree\"\n : `the migration \"${generation.name}\"`,\n )\n .join(\", then \")}`,\n );\n const generated = await generateInStaging(\n layout,\n staging,\n plan.generate,\n request.tools,\n );\n if (!generated.ok) {\n await discardStaging(staging);\n if (snapshot) await restoreManifests(rootDir, snapshot);\n return { kind: \"failed\", addons, stage: \"generate\", message: generated.message };\n }\n }\n const written = await commitStaging(rootDir, staging);\n const planned = new Set(plan.writes.map((write) => write.path));\n return {\n kind: \"applied\",\n plan,\n generated: written.filter((path) => !planned.has(path)),\n pending: [],\n };\n}\n\nfunction planLines(plan: ReadyPlan, generated: readonly string[]): string[] {\n const width = Math.max(\n 0,\n ...plan.writes\n .filter((write) => write.change === \"update\")\n .map((write) => write.path.length),\n );\n return [\n ...plan.writes\n .filter((write) => write.change === \"create\")\n .map((write) => `+ ${write.path}`),\n ...plan.writes\n .filter((write) => write.change === \"update\")\n .map((write) =>\n write.summary.length > 0\n ? `~ ${write.path.padEnd(width)} ${write.summary.join(\", \")}`\n : `~ ${write.path}`,\n ),\n ...(generated.length > 0 ? [`~ ${generated.join(\", \")}`] : []),\n ];\n}\n\n/** The terminal text for a result and the exit code: 1 for `blocked`, `dirty` and `failed`, else 0. */\nexport function formatAddResult(\n result: AddResult,\n manager: PackageManager,\n): { readonly text: string; readonly exitCode: 0 | 1 } {\n const pm = commandsFor(manager);\n const command = (addons: readonly AddonName[]) => `parlor add ${addons.join(\" \")}`;\n switch (result.kind) {\n case \"done\":\n return {\n text: `${result.addons.join(\", \")} ${result.addons.length === 1 ? \"is\" : \"are\"} already added. Nothing changed.`,\n exitCode: 0,\n };\n case \"blocked\": {\n const files = [...new Set(result.manual.map((change) => change.file))];\n const rerun = pm.exec(\"parlor\", [\"add\", ...result.addons]);\n return {\n text: [\n `${command(result.addons)}: cannot edit ${files.join(\", \")} safely, so nothing was changed.`,\n ...result.manual.flatMap((change) => [\n \"\",\n ` ${change.file}: ${change.reason}`,\n ` Make this change by hand, then run \\`${rerun}\\` again:`,\n \"\",\n indentLines(change.change, \" \"),\n ]),\n ].join(\"\\n\"),\n exitCode: 1,\n };\n }\n case \"dirty\":\n return {\n text: `${command(result.addons)}: this project has uncommitted changes (${result.files.join(\", \")}).\\nCommit or stash them so the change is easy to review, or pass --no-git-check.`,\n exitCode: 1,\n };\n case \"failed\":\n return {\n text: `${command(result.addons)}: ${result.message}\\nNothing was changed.`,\n exitCode: 1,\n };\n case \"planned\": {\n const installs = result.plan.dependencies.map((dependency) =>\n typeof dependency.version === \"string\"\n ? `${dependency.name}@${dependency.version}`\n : `${dependency.name} (pinned by ${dependency.version.fromPackage})`,\n );\n return {\n text: [\n ...planLines(result.plan, []),\n ...(installs.length > 0 ? [`would install ${installs.join(\", \")}`] : []),\n \"Nothing was written (--dry-run).\",\n ].join(\"\\n\"),\n exitCode: 0,\n };\n }\n case \"applied\":\n return {\n text: [\n ...planLines(result.plan, result.generated),\n ...result.plan.notes,\n ...(result.pending.length > 0\n ? [\"\", \"Run these to finish:\", ...result.pending.map((line) => ` ${line}`)]\n : []),\n ].join(\"\\n\"),\n exitCode: 0,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/add/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/add/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAEL,WAAW,EACX,aAAa,EAGb,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,cAAc,EAId,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAGnB,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC;IACrD,cAAc;IACd,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,gBAAgB;IAChB,mBAAmB;IACnB,WAAW;IACX,UAAU;IACV,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,QAA0B;IAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;YACtD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,YAA0C,EAC1C,OAAuB,EACvB,OAAqB,EACrB,GAA2B;IAE3B,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;IACrC,IAAI,OAAO,GAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,EACjB,QAAuE,EACnC,EAAE;QACtC,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACjC,MAAM,OAAO,GAAG,GAAG,CACjB,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,EACrE,EAAE,GAAG,EAAE,CACR,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,QAAQ,IAAI;iBACvE,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB;gBAAE,OAAO,GAAG,MAAM,CAAC;QACzD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAC/B,CAAC,UAAU,EAAkE,EAAE,CAC7E,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CACzC,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,GAAG,CACD,cAAc,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAyD,EAAE,CAAC;IACxE,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ;YAAE,SAAS;QACrD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,qBAAqB,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE;aAC/F,CAAC;QACJ,CAAC;QACD,GAAG,CACD,cAAc,UAAU,CAAC,IAAI,IAAI,OAAO,eAAe,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,CACzF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CACpC,YAA0C,EAC1C,OAAuB;IAEvB,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAC/B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CACjF,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,GAAG,CACD,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAC7E,EAAE,GAAG,EAAE,CACR;aACF,CAAC;IACR,CAAC,CAAC,CAAC;AACL,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,MAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3C,CAAC;AAMD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqB,EACrB,OAAgB,EAChB,WAAkC,EAClC,KAAe;IAEf,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GACR,UAAU,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC7E,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY;gBAAE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;gBACpE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,UAAU;gBACV,OAAO,EAAE,GAAG,IAAI,YAAa,KAAe,CAAC,OAAO,EAAE;aACvD,CAAC;QACJ,CAAC;QACD,IACE,CAAC,CAAC,MAAM,cAAc,CACpB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EACnC,UAAU,EACV,OAAO,CAAC,KAAK,CACd,CAAC,EACF,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,UAAU;gBACV,OAAO,EACL,UAAU,CAAC,IAAI,KAAK,YAAY;oBAC9B,CAAC,CAAC,GAAG,IAAI,mBAAmB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1D,CAAC,CAAC,GAAG,IAAI,mCAAmC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,OAAgB;IAEhB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YAAE,SAAS;QACtC,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,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { cp, mkdir, readdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport { projectFiles } from \"../files.js\";\nimport {\n type Command,\n commandsFor,\n formatCommand,\n type InstallOutcome,\n type PackageManager,\n runInstall,\n} from \"../package-manager.js\";\nimport type { Generation, ProjectLayout } from \"./addon.js\";\nimport {\n generationDone,\n type PlannedDependency,\n type PlannedWrite,\n type ProjectFiles,\n resolveFromPackage,\n} from \"./plan.js\";\nimport type { AddTools } from \"./run.js\";\n\n/** Under `.parlor/`, which every project ignores, so a crash leaves nothing a commit would pick up. */\nexport const STAGING_DIR = \".parlor/add\";\n\n/** Never copied into a staging dir and never committed back from one. */\nexport const NOT_STAGED: ReadonlySet<string> = new Set([\n \"node_modules\",\n \".git\",\n \".parlor\",\n]);\n\n/** `package.json` plus whichever lockfile the project has, as they were before the install. */\nexport interface ManifestSnapshot {\n readonly files: ReadonlyMap<string, Buffer | undefined>;\n}\n\nexport const LOCKFILES = [\n \"pnpm-lock.yaml\",\n \"package-lock.json\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n] as const;\n\nexport async function snapshotManifests(rootDir: string): Promise<ManifestSnapshot> {\n const files = new Map<string, Buffer | undefined>();\n for (const name of [\"package.json\", ...LOCKFILES]) {\n files.set(name, await readFile(join(rootDir, name)).catch(() => undefined));\n }\n return { files };\n}\n\n/** Puts every snapshotted file back, deleting the ones that did not exist. */\nexport async function restoreManifests(\n rootDir: string,\n snapshot: ManifestSnapshot,\n): Promise<void> {\n for (const [name, content] of snapshot.files) {\n const path = join(rootDir, name);\n if (content === undefined) await rm(path, { force: true });\n else await writeFile(path, content);\n }\n}\n\nexport type InstallResult =\n | { readonly ok: true; readonly outcome: InstallOutcome }\n | { readonly ok: false; readonly message: string };\n\n/**\n * Two rounds of `<pm> add`, because a `FromPackage` version is readable only once that package\n * is in `node_modules`: round one adds every dependency with a known version, round two reads\n * each `FromPackage` through `project.manifest` and adds those. A `listed` dependency with no\n * known version is a plain `<pm> install`. Nothing here touches files other than the ones the\n * package manager owns.\n */\nexport async function installDependencies(\n rootDir: string,\n dependencies: readonly PlannedDependency[],\n manager: PackageManager,\n project: ProjectFiles,\n log: (line: string) => void,\n): Promise<InstallResult> {\n const add = commandsFor(manager).add;\n let outcome: InstallOutcome = { kind: \"installed\" };\n const round = async (\n resolved: readonly (PlannedDependency & { readonly version: string })[],\n ): Promise<InstallResult | undefined> => {\n for (const dev of [false, true]) {\n const group = resolved.filter((dependency) => dependency.dev === dev);\n if (group.length === 0) continue;\n const command = add(\n group.map((dependency) => `${dependency.name}@${dependency.version}`),\n { dev },\n );\n const result = await runInstall(rootDir, command, log);\n if (result.kind === \"failed\") {\n return {\n ok: false,\n message: `${formatCommand(command)} failed (exit ${result.exitCode}).`,\n };\n }\n if (result.kind === \"ignored-builds\") outcome = result;\n }\n return undefined;\n };\n const known = dependencies.filter(\n (dependency): dependency is PlannedDependency & { readonly version: string } =>\n typeof dependency.version === \"string\",\n );\n if (known.length > 0) {\n log(\n `installing ${known.map((dependency) => `${dependency.name}@${dependency.version}`).join(\", \")}`,\n );\n const failed = await round(known);\n if (failed) return failed;\n }\n const pinned: (PlannedDependency & { readonly version: string })[] = [];\n for (const dependency of dependencies) {\n if (typeof dependency.version === \"string\") continue;\n const version = await resolveFromPackage(dependency.version, project);\n if (version === undefined) {\n return {\n ok: false,\n message: `${dependency.version.fromPackage} does not declare ${dependency.version.dependency}`,\n };\n }\n log(\n `installing ${dependency.name}@${version} (pinned by ${dependency.version.fromPackage})`,\n );\n pinned.push({ ...dependency, version });\n }\n const failed = await round(pinned);\n return failed ?? { ok: true, outcome };\n}\n\n/** The install commands `--no-install` left for the developer, in the order to run them. */\nexport function pendingInstallCommands(\n dependencies: readonly PlannedDependency[],\n manager: PackageManager,\n): readonly Command[] {\n const add = commandsFor(manager).add;\n return [false, true].flatMap((dev) => {\n const group = dependencies.filter(\n (dependency) => dependency.dev === dev && typeof dependency.version === \"string\",\n );\n return group.length === 0\n ? []\n : [\n add(\n group.map((dependency) => `${dependency.name}@${String(dependency.version)}`),\n { dev },\n ),\n ];\n });\n}\n\nexport interface Staging {\n /** Absolute: `<rootDir>/.parlor/add/<run id>`. */\n readonly dir: string;\n /** A `ProjectFiles` over `dir`, for `generationDone` and the commit diff. */\n readonly files: ProjectFiles;\n}\n\n/**\n * Copies the project tree except `NOT_STAGED` into a fresh staging dir and lays `writes` over\n * it. Module resolution from the staging dir walks up to the project's `node_modules`, so the\n * generators run there unchanged.\n */\nexport async function stageProject(\n rootDir: string,\n writes: readonly PlannedWrite[],\n): Promise<Staging> {\n const dir = join(rootDir, STAGING_DIR, randomUUID());\n await mkdir(dir, { recursive: true });\n for (const entry of await readdir(rootDir)) {\n if (NOT_STAGED.has(entry)) continue;\n await cp(join(rootDir, entry), join(dir, entry), { recursive: true });\n }\n for (const write of writes) {\n const target = join(dir, write.path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, write.content);\n }\n return { dir, files: projectFiles(dir) };\n}\n\nexport type GenerateResult =\n | { readonly ok: true }\n | { readonly ok: false; readonly generation: Generation; readonly message: string };\n\n/**\n * Runs each generation's tool in the staging dir, then checks `generationDone` there. A tool\n * that throws, or whose declared outputs are not in the copy afterwards, fails the whole run\n * before anything reaches the project.\n */\nexport async function generateInStaging(\n layout: ProjectLayout,\n staging: Staging,\n generations: readonly Generation[],\n tools: AddTools,\n): Promise<GenerateResult> {\n for (const generation of generations) {\n const tool =\n generation.kind === \"route-tree\" ? \"parlor typegen\" : \"parlor db generate\";\n try {\n if (generation.kind === \"route-tree\") await tools.routeTree(staging.dir);\n else await tools.migration(staging.dir, generation.name);\n } catch (error) {\n return {\n ok: false,\n generation,\n message: `${tool} failed: ${(error as Error).message}`,\n };\n }\n if (\n !(await generationDone(\n { ...layout, rootDir: staging.dir },\n generation,\n staging.files,\n ))\n ) {\n return {\n ok: false,\n generation,\n message:\n generation.kind === \"route-tree\"\n ? `${tool} wrote no route ${generation.routes.join(\", \")}`\n : `${tool} wrote no migration with tables ${generation.tables.join(\", \")}`,\n };\n }\n }\n return { ok: true };\n}\n\n/**\n * Every file in the staging dir whose bytes differ from the project's is written through\n * `<path>.parlor-tmp` and a rename, then the staging dir is removed. Returns the project paths\n * written. A crash between two renames leaves whole files, and the next run's plan finds each\n * written step `done`.\n */\nexport async function commitStaging(\n rootDir: string,\n staging: Staging,\n): Promise<readonly string[]> {\n const written: string[] = [];\n for (const path of await staging.files.list(\"\")) {\n const staged = await readFile(join(staging.dir, path));\n const current = await readFile(join(rootDir, path)).catch(() => undefined);\n if (current?.equals(staged)) continue;\n const target = join(rootDir, path);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(`${target}.parlor-tmp`, staged);\n await rename(`${target}.parlor-tmp`, target);\n written.push(path);\n }\n await discardStaging(staging);\n return written;\n}\n\nexport async function discardStaging(staging: Staging): Promise<void> {\n await rm(staging.dir, { recursive: true, force: true });\n}\n"]}
@@ -38,10 +38,7 @@ export declare const agent: {
38
38
  readonly from: "../agent/views.js";
39
39
  }, {
40
40
  readonly kind: "append-element";
41
- readonly call: {
42
- readonly callee: "createRootRoute";
43
- readonly from: "@tanstack/react-router";
44
- };
41
+ readonly call: import("../edit/syntax.js").CallSite;
45
42
  readonly path: readonly ["staticData", "views"];
46
43
  readonly element: "agentPanel";
47
44
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/addons/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ChB,CAAC"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/addons/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExE;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ChB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { defineAddon, SERVER_ENTRY } from "../add/addon.js";
1
+ import { defineAddon, ROOT_ROUTE, SERVER_ENTRY } from "../add/addon.js";
2
2
  /**
3
3
  * The default template already contains all of this; a test runs this add-on on it and expects
4
4
  * no change, which is what keeps the two from drifting.
@@ -27,7 +27,7 @@ export const agent = defineAddon({
27
27
  { kind: "import", names: ["agentPanel"], from: "../agent/views.js" },
28
28
  {
29
29
  kind: "append-element",
30
- call: { callee: "createRootRoute", from: "@tanstack/react-router" },
30
+ call: ROOT_ROUTE,
31
31
  path: ["staticData", "views"],
32
32
  element: "agentPanel",
33
33
  },
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/addons/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,OAAO,EAAE,oEAAoE;IAC7E,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;IACrC,YAAY,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;IAC7C,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAClD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE;gBACH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE;gBAChE;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE;oBACxD,IAAI,EAAE,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,QAAQ;iBAClB;aACF;SACF;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,GAAG,EAAE;gBACH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE;gBACpE;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE;oBACnE,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;oBAC7B,OAAO,EAAE,YAAY;iBACtB;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN;YACE,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,4BAA4B;YACpC,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE;SAClE;KACF;IACD,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE;QACL,gGAAgG;KACjG;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/addons/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,OAAO,EAAE,oEAAoE;IAC7E,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;IACrC,YAAY,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;IAC7C,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;IAClD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE;gBACH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE;gBAChE;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE;oBACxD,IAAI,EAAE,CAAC,SAAS,CAAC;oBACjB,OAAO,EAAE,QAAQ;iBAClB;aACF;SACF;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,GAAG,EAAE;gBACH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE;gBACpE;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;oBAC7B,OAAO,EAAE,YAAY;iBACtB;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN;YACE,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,4BAA4B;YACpC,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE;SAClE;KACF;IACD,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE;QACL,gGAAgG;KACjG;CACF,CAAC,CAAC","sourcesContent":["import { defineAddon, ROOT_ROUTE, SERVER_ENTRY } from \"../add/addon.js\";\n\n/**\n * The default template already contains all of this; a test runs this add-on on it and expects\n * no change, which is what keeps the two from drifting.\n */\nexport const agent = defineAddon({\n summary: \"The agent sidebar: chat with your own coding agent inside the app.\",\n requires: { routesDir: \"src/routes\" },\n dependencies: { \"@parlor/chat\": \"framework\" },\n files: [{ template: \"default\", dir: \"src/agent\" }],\n edits: [\n {\n file: SERVER_ENTRY,\n ops: [\n { kind: \"import\", names: [\"chat\"], from: \"@parlor/chat/server\" },\n {\n kind: \"append-element\",\n call: { callee: \"createServer\", from: \"@parlor/server\" },\n path: [\"plugins\"],\n element: \"chat()\",\n },\n ],\n },\n {\n file: \"src/routes/__root.tsx\",\n ops: [\n { kind: \"import\", names: [\"agentPanel\"], from: \"../agent/views.js\" },\n {\n kind: \"append-element\",\n call: ROOT_ROUTE,\n path: [\"staticData\", \"views\"],\n element: \"agentPanel\",\n },\n ],\n },\n ],\n mounts: [\n {\n component: \"AgentButton\",\n module: \"src/agent/agent-button.tsx\",\n into: { file: \"src/header-actions.tsx\", parent: \"HeaderActions\" },\n },\n ],\n env: [],\n generate: [],\n notes: [\n \"Restart the dev server. Open the Agent button to chat with the coding agents on this computer.\",\n ],\n});\n"]}
@@ -68,10 +68,7 @@ export declare const auth: {
68
68
  readonly from: "../auth/sign-in-gate.js";
69
69
  }, {
70
70
  readonly kind: "wrap-property";
71
- readonly call: {
72
- readonly callee: "createRootRoute";
73
- readonly from: "@tanstack/react-router";
74
- };
71
+ readonly call: import("../edit/syntax.js").CallSite;
75
72
  readonly path: readonly ["component"];
76
73
  readonly wrapper: "withSignIn";
77
74
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/addons/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Ff,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/addons/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Ff,CAAC"}
@@ -1,4 +1,4 @@
1
- import { defineAddon, SERVER_ENTRY } from "../add/addon.js";
1
+ import { defineAddon, ROOT_ROUTE, SERVER_ENTRY } from "../add/addon.js";
2
2
  export const auth = defineAddon({
3
3
  summary: "Sign-in with email and password; each user sees only their own data.",
4
4
  requires: { serverAtRoot: true, schemaDir: "schema", routesDir: "src/routes" },
@@ -50,7 +50,7 @@ export const auth = defineAddon({
50
50
  { kind: "import", names: ["withSignIn"], from: "../auth/sign-in-gate.js" },
51
51
  {
52
52
  kind: "wrap-property",
53
- call: { callee: "createRootRoute", from: "@tanstack/react-router" },
53
+ call: ROOT_ROUTE,
54
54
  path: ["component"],
55
55
  wrapper: "withSignIn",
56
56
  },
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/addons/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/addons/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAddon, ROOT_ROUTE, SERVER_ENTRY } from \"../add/addon.js\";\n\nexport const auth = defineAddon({\n summary: \"Sign-in with email and password; each user sees only their own data.\",\n requires: { serverAtRoot: true, schemaDir: \"schema\", routesDir: \"src/routes\" },\n dependencies: {\n \"@parlor/auth\": \"framework\",\n \"better-auth\": { fromPackage: \"@parlor/auth\", dependency: \"better-auth\" },\n },\n files: [{ template: \"auth\", dir: \"\" }],\n edits: [\n {\n file: SERVER_ENTRY,\n ops: [\n { kind: \"import\", names: [\"createAuth\"], from: \"./auth.js\" },\n {\n kind: \"set-property\",\n call: { callee: \"createServer\", from: \"@parlor/server\" },\n path: [\"auth\"],\n value: \"createAuth($database)\",\n onConflict: \"unsafe\",\n },\n ],\n },\n {\n file: \"schema/index.ts\",\n ops: [{ kind: \"export-all\", from: \"./auth.js\" }],\n },\n {\n file: \"src/main.tsx\",\n ops: [\n { kind: \"import\", names: [\"auth\"], from: \"./auth/client.js\" },\n {\n kind: \"set-property\",\n call: { callee: \"createActionClient\", from: \"@parlor/client\" },\n path: [\"headers\"],\n value: \"auth.headers\",\n onConflict: \"unsafe\",\n },\n {\n kind: \"jsx-attribute\",\n element: \"FrameworkProvider\",\n name: \"auth\",\n value: \"{auth}\",\n },\n ],\n },\n {\n file: \"src/routes/__root.tsx\",\n ops: [\n { kind: \"import\", names: [\"withSignIn\"], from: \"../auth/sign-in-gate.js\" },\n {\n kind: \"wrap-property\",\n call: ROOT_ROUTE,\n path: [\"component\"],\n wrapper: \"withSignIn\",\n },\n ],\n },\n ],\n mounts: [\n {\n component: \"SignOutButton\",\n module: \"src/auth/sign-out-button.tsx\",\n into: { file: \"src/header-actions.tsx\", parent: \"HeaderActions\" },\n },\n ],\n env: [\n {\n name: \"PARLOR_ORIGIN\",\n example: \"https://your-app.example.com\",\n description:\n \"The public origin the app is served from. `parlor dev` sets it for you.\",\n },\n {\n name: \"BETTER_AUTH_SECRET\",\n example: \"\",\n description:\n \"Signs sessions in production. Generate one with: openssl rand -base64 32\",\n },\n ],\n generate: [\n { kind: \"route-tree\", routes: [\"/sign-in\", \"/link\"] },\n {\n kind: \"migration\",\n name: \"auth\",\n tables: [\"user\", \"session\", \"account\", \"verification\"],\n },\n ],\n notes: [\n 'Rows created before sign-in belong to the scope \"default\", which no signed-in user sees.',\n \"The sidebar now connects agents with `npx @parlor/agent-host connect`, shown in the sidebar.\",\n \"In production set PARLOR_ORIGIN and BETTER_AUTH_SECRET; see .env.example.\",\n ],\n});\n"]}
@@ -34,10 +34,7 @@ export declare const ADDONS: {
34
34
  readonly from: "../agent/views.js";
35
35
  }, {
36
36
  readonly kind: "append-element";
37
- readonly call: {
38
- readonly callee: "createRootRoute";
39
- readonly from: "@tanstack/react-router";
40
- };
37
+ readonly call: import("../edit/syntax.js").CallSite;
41
38
  readonly path: readonly ["staticData", "views"];
42
39
  readonly element: "agentPanel";
43
40
  }];
@@ -123,10 +120,7 @@ export declare const ADDONS: {
123
120
  readonly from: "../auth/sign-in-gate.js";
124
121
  }, {
125
122
  readonly kind: "wrap-property";
126
- readonly call: {
127
- readonly callee: "createRootRoute";
128
- readonly from: "@tanstack/react-router";
129
- };
123
+ readonly call: import("../edit/syntax.js").CallSite;
130
124
  readonly path: readonly ["component"];
131
125
  readonly wrapper: "withSignIn";
132
126
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/addons/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA2B,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAE5C,eAAO,MAAM,WAAW,EAA0B,SAAS,SAAS,EAAE,CAAC;AAEvE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAE3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/addons/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA2B,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAE5C,eAAO,MAAM,WAAW,EAA0B,SAAS,SAAS,EAAE,CAAC;AAEvE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAE3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/addons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;AAI/C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAyB,CAAC;AAEvE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/addons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;AAI/C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAyB,CAAC;AAEvE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { agent } from \"./agent.js\";\nimport { auth } from \"./auth.js\";\n\nexport const ADDONS = { agent, auth } as const;\n\nexport type AddonName = keyof typeof ADDONS;\n\nexport const ADDON_NAMES = Object.keys(ADDONS) as readonly AddonName[];\n\nexport function isAddonName(name: string): name is AddonName {\n return Object.hasOwn(ADDONS, name);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,gJAAgJ;AAChJ,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,UAAU;IACnC,wBAAwB,EAAE,WAAW;IACrC,uBAAuB,EAAE,WAAW;IACpC,4BAA4B,EAAE,WAAW;IACzC,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,SAAS;IACnC,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,SAAS;IACzB,kBAAkB,EAAE,SAAS;IAC7B,sBAAsB,EAAE,QAAQ;IAChC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,QAAQ;CACd,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,gJAAgJ;AAChJ,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,UAAU;IACnC,wBAAwB,EAAE,WAAW;IACrC,uBAAuB,EAAE,WAAW;IACpC,4BAA4B,EAAE,WAAW;IACzC,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,SAAS;IACnC,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,SAAS;IACzB,kBAAkB,EAAE,SAAS;IAC7B,sBAAsB,EAAE,QAAQ;IAChC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,QAAQ;CACd,CAAC","sourcesContent":["/** Generated from the `catalog` in the repo's `pnpm-workspace.yaml` by `scripts/write-catalog.ts`; `catalog.spec.ts` fails when they differ. */\nexport const CATALOG: Readonly<Record<string, string>> = {\n \"@standard-schema/spec\": \"^1.1.0\",\n \"@tanstack/react-query\": \"^5.104.1\",\n \"@tanstack/react-router\": \"^1.170.45\",\n \"@tanstack/router-core\": \"^1.171.38\",\n \"@tanstack/router-generator\": \"^1.167.45\",\n \"@tanstack/router-plugin\": \"^1.168.47\",\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/node\": \"^24.14.0\",\n \"@types/react\": \"^19.3.0\",\n \"@types/react-dom\": \"^19.3.0\",\n \"@vitejs/plugin-react\": \"^6.1.2\",\n h3: \"^2.0.1\",\n \"happy-dom\": \"^20.14.5\",\n react: \"^19.3.0\",\n \"react-dom\": \"^19.3.0\",\n typescript: \"^7.0.2\",\n vite: \"^8.3.5\",\n vitest: \"^5.0.3\",\n zod: \"^4.6.5\",\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,UAAU,EAAW,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAsB,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAoB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,WAAW,EACX,WAAW,EAGX,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA2BjD,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,MAAM;IACN,WAAW;IACX,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAqB;IAC/C,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAChE,OAAO;QACL;YACE,IAAI,EAAE,cAAc;YACpB,IAAI;YACJ,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;YACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrC,UAAU,EAAE,SAAS;SACtB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,IAAI;YACJ,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YACrB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvC,UAAU,EAAE,SAAS;SACtB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,SAAS,SAAS,CAAC,IAAY,EAAE,QAAqB;IACpD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,0BAA0B,WAAW,uBAAuB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAqB,EACrB,cAA8B,EAC9B,SAAwB,EACxB,OAAO,GAAW,iBAAiB;IAEnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CACP,IAAI,EACJ,IAAI,KAAK,cAAc;YACrB,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC;YAC7D,CAAC,CAAC,IAAI,KAAK,WAAW;gBACpB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAC3B,CAAC,CAAC,IAAI,CACX,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACnD,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,cAAc,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtF,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAUD,MAAM,aAAa,GAAG,0CAA0C,CAAC;AAEjE,kHAAkH;AAClH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,QAAqB,EACrB,cAA8B,EAC9B,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,YAA8C,EAAE,EAAE,CACjE,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;YAC7C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,KAAK,KAAK,UAAU;gBACpB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBAC1B,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,IAAI,KAAK,+CAA+C,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CACH,CAAC;IACJ,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IACpE,MAAM,SAAS,GAAa;QAC1B,IAAI,EAAE,QAAQ,CAAC,WAAW;QAC1B,GAAG,IAAI;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,QAAQ,CAAC,eAAe;YAC1B,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;YACxD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,SAAiB;IAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;QAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CACnB,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG;QACb,SAAS;QACT,QAAQ;QACR,cAAc;QACd,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAA+B;QACzD,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE;QACjD,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAA2B;KACnD,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC9C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;QAC7B,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;QAC/E,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACnB,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAC/D,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC;QAC9D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACtE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7C,CAAC;AAED,+FAA+F;AAC/F,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,cAA8B,EAC9B,MAA4B;IAE5B,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE;YACpD,KAAK;YACL,KAAK;YACL,gBAAgB;SACjB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;YACxD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC7C,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdir, readdir } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\n\nimport type { AddonName } from \"./addons/index.js\";\nimport { CATALOG } from \"./catalog.js\";\nimport { renderAgentsMd, renderReadme } from \"./docs.js\";\nimport { editSource, type Op } from \"./edit/ops.js\";\nimport { parseSource } from \"./edit/source.js\";\nimport { CreateError } from \"./errors.js\";\nimport { type TemplateFiles, templateFiles, writeFiles } from \"./files.js\";\nimport { type GitOutcome, initialCommit } from \"./git.js\";\nimport { type AppIdentity, identityFor } from \"./identity.js\";\nimport {\n commandsFor,\n execCommand,\n type InstallOutcome,\n type PackageManager,\n packageManagerField,\n packageManagerFiles,\n runInstall,\n} from \"./package-manager.js\";\nimport { FRAMEWORK_VERSION } from \"./version.js\";\n\nexport interface CreateOptions {\n readonly directory: string;\n readonly packageManager: PackageManager;\n readonly mode: \"apply\" | \"dry-run\";\n readonly install: boolean;\n readonly git: boolean;\n /** Run through the project's own CLI after a successful install, so create needs no toolchain. */\n readonly addons: readonly AddonName[];\n readonly log: (line: string) => void;\n}\n\nexport interface CreatedProject {\n readonly directory: string;\n readonly identity: AppIdentity;\n readonly packageManager: PackageManager;\n readonly files: readonly string[];\n readonly install: InstallOutcome | { readonly kind: \"skipped\" };\n readonly addons: {\n readonly applied: readonly AddonName[];\n /** Still to run as `<pm> exec parlor add <name>`; the next steps print the command. */\n readonly deferred: readonly AddonName[];\n };\n readonly git: GitOutcome | { readonly kind: \"disabled\" };\n}\n\nexport const CREATE_SAFE_ENTRIES: ReadonlySet<string> = new Set([\n \".git\",\n \".DS_Store\",\n \".idea\",\n \".vscode\",\n \".claude\",\n \".cursor\",\n \"LICENSE\",\n \"Thumbs.db\",\n]);\n\nconst DEFAULT_TEMPLATE = \"default\";\n\n/**\n * The default template's `parlor.config.ts` names itself; create renames it through the same\n * edit engine `parlor add` uses, so the template stays a plain project with no placeholders.\n */\nexport function identityOps(identity: AppIdentity): readonly Op[] {\n const call = { callee: \"defineConfig\", from: \"@parlor/config\" };\n return [\n {\n kind: \"set-property\",\n call,\n path: [\"app\", \"id\"],\n value: JSON.stringify(identity.appId),\n onConflict: \"replace\",\n },\n {\n kind: \"set-property\",\n call,\n path: [\"app\", \"name\"],\n value: JSON.stringify(identity.appName),\n onConflict: \"replace\",\n },\n ];\n}\n\nconst CONFIG_FILE = \"parlor.config.ts\";\n\nfunction renameApp(text: string, identity: AppIdentity): string {\n const outcome = editSource(parseSource(CONFIG_FILE, text), identityOps(identity));\n if (outcome.status === \"unsafe\") {\n throw new Error(\n `The default template's ${CONFIG_FILE} cannot be renamed: ${outcome.unsafe.map((entry) => entry.reason).join(\" \")}`,\n );\n }\n return outcome.status === \"edit\" ? outcome.text : text;\n}\n\nexport async function renderProject(\n identity: AppIdentity,\n packageManager: PackageManager,\n templates: TemplateFiles,\n version: string = FRAMEWORK_VERSION,\n): Promise<ReadonlyMap<string, string>> {\n const files = new Map<string, string>();\n for (const path of await templates.list(DEFAULT_TEMPLATE, \"\")) {\n const text = await templates.read(DEFAULT_TEMPLATE, path);\n files.set(\n path,\n path === \"package.json\"\n ? rewritePackageJson(text, identity, packageManager, version)\n : path === CONFIG_FILE\n ? renameApp(text, identity)\n : text,\n );\n }\n const docs = { identity, packageManager, version };\n files.set(\"README.md\", renderReadme(docs));\n files.set(\"AGENTS.md\", renderAgentsMd(docs));\n for (const [path, text] of packageManagerFiles(packageManager)) files.set(path, text);\n return new Map([...files].sort(([a], [b]) => a.localeCompare(b)));\n}\n\ninterface Manifest {\n readonly name?: string;\n readonly packageManager?: string;\n readonly dependencies?: Readonly<Record<string, string>>;\n readonly devDependencies?: Readonly<Record<string, string>>;\n readonly [key: string]: unknown;\n}\n\nconst UNINSTALLABLE = /^(?:workspace|catalog|link|file|portal):/;\n\n/** `catalog:` takes the range the framework was published with, so the project resolves one zod and one React. */\nexport function rewritePackageJson(\n text: string,\n identity: AppIdentity,\n packageManager: PackageManager,\n version: string,\n): string {\n const manifest = JSON.parse(text) as Manifest;\n const resolve = (dependencies: Readonly<Record<string, string>>) =>\n Object.fromEntries(\n Object.entries(dependencies).map(([name, range]) => {\n const resolved = range.startsWith(\"workspace:\")\n ? version\n : range === \"catalog:\"\n ? (CATALOG[name] ?? range)\n : range;\n if (UNINSTALLABLE.test(resolved)) {\n throw new Error(\n `${name}@${range} cannot be installed outside the Parlor repo.`,\n );\n }\n return [name, resolved];\n }),\n );\n const field = packageManagerField(packageManager);\n const { name: _name, packageManager: _manager, ...rest } = manifest;\n const rewritten: Manifest = {\n name: identity.packageName,\n ...rest,\n ...(field ? { packageManager: field } : {}),\n ...(manifest.dependencies ? { dependencies: resolve(manifest.dependencies) } : {}),\n ...(manifest.devDependencies\n ? { devDependencies: resolve(manifest.devDependencies) }\n : {}),\n };\n return `${JSON.stringify(rewritten, null, 2)}\\n`;\n}\n\nasync function checkTarget(directory: string): Promise<void> {\n const entries = await readdir(directory).catch((error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") return [];\n throw error;\n });\n const blocking = entries.filter((entry) => !CREATE_SAFE_ENTRIES.has(entry)).sort();\n if (blocking.length > 0) {\n throw new CreateError(\n `${basename(directory)} is not empty (${blocking.join(\", \")}). Pick a new folder name.`,\n );\n }\n}\n\n/** Install and git failures are reported, never thrown: the files are already a working project. */\nexport async function createProject(options: CreateOptions): Promise<CreatedProject> {\n const { directory, packageManager } = options;\n await checkTarget(directory);\n const identity = identityFor(basename(directory));\n const files = await renderProject(identity, packageManager, templateFiles());\n const result = {\n directory,\n identity,\n packageManager,\n files: [...files.keys()],\n install: { kind: \"skipped\" } as CreatedProject[\"install\"],\n addons: { applied: [], deferred: options.addons },\n git: { kind: \"disabled\" } as CreatedProject[\"git\"],\n };\n if (options.mode === \"dry-run\") return result;\n await mkdir(directory, { recursive: true });\n await writeFiles(directory, files);\n const install = options.install\n ? await runInstall(directory, commandsFor(packageManager).install, options.log)\n : result.install;\n const addons =\n install.kind === \"installed\" || install.kind === \"ignored-builds\"\n ? await applyAddons(directory, packageManager, options.addons)\n : result.addons;\n const git = options.git ? await initialCommit(directory) : result.git;\n return { ...result, install, addons, git };\n}\n\n/** `--no-git-check`: the files are about to be committed as one, so they are untracked now. */\nasync function applyAddons(\n directory: string,\n packageManager: PackageManager,\n addons: readonly AddonName[],\n): Promise<CreatedProject[\"addons\"]> {\n const applied: AddonName[] = [];\n const deferred: AddonName[] = [];\n for (const addon of addons) {\n const command = execCommand(packageManager, \"parlor\", [\n \"add\",\n addon,\n \"--no-git-check\",\n ]);\n const code = await new Promise<number | null>((resolve) => {\n const child = spawn(command.bin, command.args, {\n cwd: directory,\n stdio: \"inherit\",\n });\n child.once(\"error\", () => resolve(null));\n child.once(\"close\", resolve);\n });\n (code === 0 ? applied : deferred).push(addon);\n }\n return { applied, deferred };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAmCnF;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAwBpF"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAmCnF;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,MAAM,CA4BpF"}
package/dist/docs.js CHANGED
@@ -49,6 +49,8 @@ ${DOCS_URL}/llms.txt (every page, as Markdown) before changing how the app is wi
49
49
 
50
50
  - Business logic lives only in \`actions/\` as \`defineAction\`. The UI calls actions with
51
51
  \`useActionQuery\` and \`useActionMutation\` from \`@parlor/client/react\`, never \`fetch\`.
52
+ A page loads its data in its route \`loader\` with \`ensureActionQueryData\` and reads it with
53
+ \`useActionSuspenseQuery\`.
52
54
  - Every table has a \`scope\` column and every action filters by \`ctx.scope\`.
53
55
  - An action that changes data declares \`writes\`; one that reads declares \`reads\`. That is how
54
56
  pages refresh when an agent changes something.
@@ -56,6 +58,8 @@ ${DOCS_URL}/llms.txt (every page, as Markdown) before changing how the app is wi
56
58
  - \`.parlor/\` is generated. Never edit it. There is no \`vite.config.ts\`: Vite options go in the
57
59
  \`vite\` field of \`parlor.config.ts\`.
58
60
  - Add features with \`${pm.exec("parlor", ["add", "<auth|agent>"])}\` instead of wiring them by hand.
61
+ - Porting an existing app into this project? Follow ${DOCS_URL}/guides/migrating/ step by step,
62
+ and ask the person before working around anything it lists as not supported yet.
59
63
 
60
64
  ## Commands
61
65
 
package/dist/docs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQxC,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAoB;IACzE,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IACvC,OAAO,KAAK,QAAQ,CAAC,OAAO;;aAEjB,QAAQ;;;;;;EAMnB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;;;;;;;;MAQT,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;MACb,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;MACnB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;MACd,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;MACrB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;MACf,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;MAClC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;;;;;;;;;gBASnC,QAAQ;CACvB,CAAC;AACF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,EAAoB;IAC1E,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IACvC,OAAO;;mBAEU,OAAO;EACxB,QAAQ;;;;;;;;;sCAS4B,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;;;wBAGnC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;;;;MAI5D,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;MACb,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;CAClD,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQxC,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAoB;IACzE,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IACvC,OAAO,KAAK,QAAQ,CAAC,OAAO;;aAEjB,QAAQ;;;;;;EAMnB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;;;;;;;;MAQT,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;MACb,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;MACnB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;MACd,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;MACrB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;MACf,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;MAClC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;;;;;;;;;gBASnC,QAAQ;CACvB,CAAC;AACF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,EAAoB;IAC1E,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IACvC,OAAO;;mBAEU,OAAO;EACxB,QAAQ;;;;;;;;;;;sCAW4B,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;;;wBAGnC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;sDACZ,QAAQ;;;;;MAKxD,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;MACb,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;CAClD,CAAC;AACF,CAAC","sourcesContent":["import type { AppIdentity } from \"./identity.js\";\nimport { commandsFor, type PackageManager } from \"./package-manager.js\";\nimport { DOCS_URL } from \"./version.js\";\n\nexport interface ProjectDocsInput {\n readonly identity: AppIdentity;\n readonly packageManager: PackageManager;\n readonly version: string;\n}\n\n/** Rendered per package manager, so every command in it runs as written. */\nexport function renderReadme({ identity, packageManager }: ProjectDocsInput): string {\n const pm = commandsFor(packageManager);\n return `# ${identity.appName}\n\nA [Parlor](${DOCS_URL}) app. Everything the UI does goes through actions, so your coding agent\ncan do it too: from the sidebar, over MCP, or over HTTP.\n\n## Develop\n\n\\`\\`\\`sh\n${pm.run(\"dev\")}\n\\`\\`\\`\n\nOpen http://localhost:5173 and press **Agent** to chat with the coding agent on this computer\n(Claude Code or Codex). Ask it to add a todo.\n\n| Command | What it does |\n| --- | --- |\n| \\`${pm.run(\"dev\")}\\` | App, API and agent host with hot reload |\n| \\`${pm.run(\"typecheck\")}\\` | Regenerate the route tree, then \\`tsc\\` |\n| \\`${pm.run(\"test\")}\\` | Vitest |\n| \\`${pm.run(\"db:generate\")}\\` | A SQL migration from \\`schema/\\` |\n| \\`${pm.run(\"build\")}\\` | Production build in \\`.parlor/\\` |\n| \\`${pm.exec(\"parlor\", [\"add\", \"auth\"])}\\` | Sign-in, so each user sees only their own data |\n| \\`${pm.exec(\"parlor\", [\"dev\", \"--target\", \"mac\"])}\\` | The same app as a macOS window |\n\n## Layout\n\n- \\`actions/\\`: every piece of business logic, as \\`defineAction\\`. The UI, agents, HTTP and MCP all call these.\n- \\`schema/\\`: the Drizzle tables; \\`migrations/\\` is generated from them.\n- \\`src/routes/\\`: pages. \\`src/agent/\\`: the agent sidebar, yours to change.\n- \\`parlor.config.ts\\`: app name, id, ports, and Vite options under \\`vite\\`.\n\nLearn more at ${DOCS_URL}/getting-started/.\n`;\n}\n\n/** Facts a coding agent cannot infer from the files, plus where the full docs are. */\nexport function renderAgentsMd({ packageManager, version }: ProjectDocsInput): string {\n const pm = commandsFor(packageManager);\n return `# AGENTS.md\n\nThis is a Parlor ${version} app. Parlor changes faster than your training data: read\n${DOCS_URL}/llms.txt (every page, as Markdown) before changing how the app is wired.\n\n## Rules\n\n- Business logic lives only in \\`actions/\\` as \\`defineAction\\`. The UI calls actions with\n \\`useActionQuery\\` and \\`useActionMutation\\` from \\`@parlor/client/react\\`, never \\`fetch\\`.\n A page loads its data in its route \\`loader\\` with \\`ensureActionQueryData\\` and reads it with\n \\`useActionSuspenseQuery\\`.\n- Every table has a \\`scope\\` column and every action filters by \\`ctx.scope\\`.\n- An action that changes data declares \\`writes\\`; one that reads declares \\`reads\\`. That is how\n pages refresh when an agent changes something.\n- After changing \\`schema/\\`, run \\`${pm.run(\"db:generate\")}\\` and commit the migration.\n- \\`.parlor/\\` is generated. Never edit it. There is no \\`vite.config.ts\\`: Vite options go in the\n \\`vite\\` field of \\`parlor.config.ts\\`.\n- Add features with \\`${pm.exec(\"parlor\", [\"add\", \"<auth|agent>\"])}\\` instead of wiring them by hand.\n- Porting an existing app into this project? Follow ${DOCS_URL}/guides/migrating/ step by step,\n and ask the person before working around anything it lists as not supported yet.\n\n## Commands\n\n- \\`${pm.run(\"dev\")}\\`: runs until stopped; the app is on http://localhost:5173.\n- \\`${pm.run(\"typecheck\")}\\` and \\`${pm.run(\"test\")}\\` must pass before you finish.\n`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/edit/inspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/edit/inspect.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Expression } from \"@babel/types\";\n\nimport { parseSource, type SourceFile } from \"./source.js\";\nimport {\n type CallSite,\n findCall,\n importedName,\n objectArgument,\n propertyOf,\n valueOf,\n} from \"./syntax.js\";\n\nexport type Presence = \"installed\" | \"absent\" | \"unknown\";\n\n/**\n * What the app's server entry passes to `createServer`, read from its syntax without running\n * it. `unknown` when the shape hides it (options built elsewhere, spreads, a plugins variable),\n * so every reader picks the behavior that is safe when it cannot tell.\n */\nexport interface ServerShape {\n readonly auth: Presence;\n readonly chat: Presence;\n}\n\nexport const UNKNOWN_SERVER: ServerShape = { auth: \"unknown\", chat: \"unknown\" };\n\nconst SERVER: CallSite = { callee: \"createServer\", from: \"@parlor/server\" };\nconst CHAT: CallSite = { callee: \"chat\", from: \"@parlor/chat/server\" };\n\n/** A call, or a module-scope `const` bound once to a call; anything conditional is unknown. */\nfunction authPresence(file: SourceFile, value: Expression): Presence {\n if (value.type === \"Identifier\" && value.name === \"undefined\") return \"absent\";\n const unwrapped = value.type === \"AwaitExpression\" ? value.argument : value;\n if (unwrapped.type === \"CallExpression\" || unwrapped.type === \"NewExpression\") {\n return \"installed\";\n }\n if (value.type !== \"Identifier\") return \"unknown\";\n const declarators = file.ast.program.body.flatMap((statement) => {\n const declaration =\n statement.type === \"ExportNamedDeclaration\" ? statement.declaration : statement;\n return declaration?.type === \"VariableDeclaration\" && declaration.kind === \"const\"\n ? declaration.declarations.filter(\n (declarator) =>\n declarator.id.type === \"Identifier\" && declarator.id.name === value.name,\n )\n : [];\n });\n const init = declarators.length === 1 ? declarators[0]?.init : undefined;\n const call = init?.type === \"AwaitExpression\" ? init.argument : init;\n return call?.type === \"CallExpression\" || call?.type === \"NewExpression\"\n ? \"installed\"\n : \"unknown\";\n}\n\nfunction chatPresence(file: SourceFile, plugins: Expression): Presence {\n if (plugins.type !== \"ArrayExpression\") return \"unknown\";\n if (plugins.elements.some((element) => element?.type === \"SpreadElement\"))\n return \"unknown\";\n const local = importedName(file, CHAT.callee, CHAT.from);\n if (!local) return \"absent\";\n return plugins.elements.some(\n (element) =>\n element?.type === \"CallExpression\" &&\n element.callee.type === \"Identifier\" &&\n element.callee.name === local,\n )\n ? \"installed\"\n : \"absent\";\n}\n\nexport function inspectServer(file: SourceFile): ServerShape {\n const call = findCall(file, SERVER);\n if (!call.ok) return UNKNOWN_SERVER;\n const argument = objectArgument(file, SERVER, call.value);\n if (!argument.ok) return UNKNOWN_SERVER;\n if (argument.value.kind === \"none\") return { auth: \"absent\", chat: \"absent\" };\n const auth = propertyOf(file, argument.value.node, \"auth\");\n const plugins = propertyOf(file, argument.value.node, \"plugins\");\n if (!auth.ok || !plugins.ok) return UNKNOWN_SERVER;\n return {\n auth: auth.value ? authPresence(file, valueOf(auth.value)) : \"absent\",\n chat: plugins.value ? chatPresence(file, valueOf(plugins.value)) : \"absent\",\n };\n}\n\nexport async function inspectServerEntry(\n rootDir: string,\n entry: string,\n): Promise<ServerShape> {\n const text = await readFile(join(rootDir, entry), \"utf8\").catch(() => undefined);\n if (text === undefined) return UNKNOWN_SERVER;\n try {\n return inspectServer(parseSource(entry, text));\n } catch {\n return UNKNOWN_SERVER;\n }\n}\n"]}