Reset core/viewer/editor/mcp packages and apps/editor from private-editor
Wholesale swap of packages/{core,viewer,editor,mcp} and apps/editor with the
versions from the private editor repo, which is the production source of truth.
Setup changes:
- packages/{core,viewer,editor} versions held at 0.7.0 baseline (matching
the most recent published release) so a bump=minor publishes 0.8.0
- packages/mcp held at 0.1.1 (never published; first publish will go through
the new release.yml flow)
- peerDependencies and devDependencies for inter-package @pascal-app/*
references pinned to ^0.7.0 instead of '*' / 'workspace:*' so they are
valid for npm consumers
- Root package.json: TypeScript bumped to 6.0.2, added overrides for
@types/react, @types/react-dom, @types/three to prevent JSX namespace
fragmentation across the workspace
- release.yml extended to also publish editor and mcp; 'both' option renamed
to 'all'; added a sync step that updates inter-package peerDeps/devDeps to
match the new versions on every bump (so viewer/editor/mcp tarballs always
reference the version of core they were built against)
- Root scripts gained release:editor and release:mcp shortcuts
Verification:
- bun install --frozen-lockfile is consistent
- packages/{core,viewer,mcp} build cleanly, dist/index.d.ts emitted
- packages/editor check-types reports 21 pre-existing errors, identical to
what private-editor currently reports
Open PRs against editor-v2 will need rebasing/conflict resolution.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
export type {
|
||||
ActiveSceneMeta,
|
||||
CreatePatch,
|
||||
DeletePatch,
|
||||
Patch,
|
||||
UpdatePatch,
|
||||
ValidationError,
|
||||
ValidationResult,
|
||||
} from './scene-bridge'
|
||||
export { SceneBridge } from './scene-bridge'
|
||||
@@ -401,27 +401,6 @@ describe('SceneBridge', () => {
|
||||
})
|
||||
|
||||
describe('setScene / exportJSON / loadJSON', () => {
|
||||
test('setScene prunes duplicated levels that were accidentally saved as roots', () => {
|
||||
const level0 = LevelNode.parse({ level: 0, children: [] })
|
||||
const building = BuildingNode.parse({ children: [level0.id] })
|
||||
const site = SiteNode.parse({ children: [building] })
|
||||
const orphanLevel = LevelNode.parse({ level: 1, children: [] })
|
||||
|
||||
bridge.setScene(
|
||||
{
|
||||
[site.id]: site,
|
||||
[building.id]: building,
|
||||
[level0.id]: level0,
|
||||
[orphanLevel.id]: orphanLevel,
|
||||
} as any,
|
||||
[site.id, orphanLevel.id] as any,
|
||||
)
|
||||
|
||||
expect(bridge.getRootNodeIds()).toEqual([site.id])
|
||||
expect(bridge.getNode(orphanLevel.id)).toBeNull()
|
||||
expect(bridge.findNodes({ type: 'level' }).map((node) => node.id)).toEqual([level0.id])
|
||||
})
|
||||
|
||||
test('exportJSON returns the scene shape', () => {
|
||||
const exp = bridge.exportJSON()
|
||||
expect(typeof exp.nodes).toBe('object')
|
||||
|
||||
@@ -493,7 +493,7 @@ export class SceneBridge {
|
||||
private _findParentByChildrenScan(id: AnyNodeId): AnyNode | null {
|
||||
const nodes = useScene.getState().nodes
|
||||
for (const candidate of Object.values(nodes)) {
|
||||
if (!('children' in candidate) || !Array.isArray(candidate.children)) continue
|
||||
if (!('children' in candidate && Array.isArray(candidate.children))) continue
|
||||
for (const child of candidate.children as unknown[]) {
|
||||
let childId: string | null = null
|
||||
if (typeof child === 'string') childId = child
|
||||
|
||||
Reference in New Issue
Block a user