fix(core): preserve level child id types
This commit is contained in:
@@ -50,10 +50,10 @@ describe('LevelNode', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('accepts level child IDs minted by plugins', () => {
|
test('accepts level child IDs minted by plugins', () => {
|
||||||
expect(
|
const children = LevelNode.parse({
|
||||||
LevelNode.parse({
|
children: ['tree_plugin-child', 'flower_plugin-child', 'grass_plugin-child'],
|
||||||
children: ['tree_plugin-child', 'flower_plugin-child', 'grass_plugin-child'],
|
}).children as string[]
|
||||||
}).children,
|
|
||||||
).toEqual(['tree_plugin-child', 'flower_plugin-child', 'grass_plugin-child'])
|
expect(children).toEqual(['tree_plugin-child', 'flower_plugin-child', 'grass_plugin-child'])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,13 +1,63 @@
|
|||||||
import dedent from 'dedent'
|
import dedent from 'dedent'
|
||||||
import { z } from 'zod'
|
import { z } from 'zod'
|
||||||
import { BaseNode, nodeType, objectId } from '../base'
|
import { BaseNode, nodeType, objectId } from '../base'
|
||||||
|
import type { CeilingNode } from './ceiling'
|
||||||
|
import type { ColumnNode } from './column'
|
||||||
|
import type { DuctFittingNode } from './duct-fitting'
|
||||||
|
import type { DuctSegmentNode } from './duct-segment'
|
||||||
|
import type { DuctTerminalNode } from './duct-terminal'
|
||||||
|
import type { FenceNode } from './fence'
|
||||||
|
import type { GuideNode } from './guide'
|
||||||
|
import type { HvacEquipmentNode } from './hvac-equipment'
|
||||||
|
import type { ItemNode } from './item'
|
||||||
|
import type { LinesetNode } from './lineset'
|
||||||
|
import type { LiquidLineNode } from './liquid-line'
|
||||||
|
import type { MeasurementNode } from './measurement'
|
||||||
|
import type { PipeFittingNode } from './pipe-fitting'
|
||||||
|
import type { PipeSegmentNode } from './pipe-segment'
|
||||||
|
import type { PipeTrapNode } from './pipe-trap'
|
||||||
|
import type { RoofNode } from './roof'
|
||||||
|
import type { ScanNode } from './scan'
|
||||||
|
import type { ShelfNode } from './shelf'
|
||||||
|
import type { SlabNode } from './slab'
|
||||||
|
import type { SpawnNode } from './spawn'
|
||||||
|
import type { StairNode } from './stair'
|
||||||
|
import type { WallNode } from './wall'
|
||||||
|
import type { ZoneNode } from './zone'
|
||||||
|
|
||||||
|
type CoreLevelChildId =
|
||||||
|
| WallNode['id']
|
||||||
|
| FenceNode['id']
|
||||||
|
| ColumnNode['id']
|
||||||
|
| ItemNode['id']
|
||||||
|
| ZoneNode['id']
|
||||||
|
| SlabNode['id']
|
||||||
|
| CeilingNode['id']
|
||||||
|
| RoofNode['id']
|
||||||
|
| StairNode['id']
|
||||||
|
| ScanNode['id']
|
||||||
|
| GuideNode['id']
|
||||||
|
| MeasurementNode['id']
|
||||||
|
| SpawnNode['id']
|
||||||
|
| ShelfNode['id']
|
||||||
|
| DuctSegmentNode['id']
|
||||||
|
| DuctFittingNode['id']
|
||||||
|
| DuctTerminalNode['id']
|
||||||
|
| HvacEquipmentNode['id']
|
||||||
|
| LinesetNode['id']
|
||||||
|
| LiquidLineNode['id']
|
||||||
|
| PipeSegmentNode['id']
|
||||||
|
| PipeFittingNode['id']
|
||||||
|
| PipeTrapNode['id']
|
||||||
|
|
||||||
|
const LevelChildId = z.string().transform((id) => id as CoreLevelChildId)
|
||||||
|
|
||||||
export const LevelNode = BaseNode.extend({
|
export const LevelNode = BaseNode.extend({
|
||||||
id: objectId('level'),
|
id: objectId('level'),
|
||||||
type: nodeType('level'),
|
type: nodeType('level'),
|
||||||
// The node registry owns child-kind validity. Persisted level relationships
|
// The node registry owns child-kind validity. Persisted level relationships
|
||||||
// must also admit IDs minted by plugins that core cannot enumerate.
|
// must also admit IDs minted by plugins that core cannot enumerate.
|
||||||
children: z.array(z.string()).default([]),
|
children: z.array(LevelChildId).default([]),
|
||||||
// Specific props
|
// Specific props
|
||||||
level: z.number().default(0),
|
level: z.number().default(0),
|
||||||
}).describe(
|
}).describe(
|
||||||
|
|||||||
Reference in New Issue
Block a user