paperclip-ui / legacy-paperclip

Paperclip is a common language for designers and developers
http://paperclip.dev
Other
201 stars 13 forks source link

PC Engine diff consumer #1038

Open crcn opened 2 years ago

crcn commented 2 years ago

Currently, the engine delegate is doing all of the work around collecting related information about PC content, including all imported style sheets (even of dependencies). This is expensive, not to mention this information is also emitted over RPC.

To reduce some of the cost of this, it makes sense to have a consumer of emitted PC event data that can be used to aggregate this information for things like renderers. For example:

const delegate = createEngineDelegate();

// ... somewhere var events is wired up ...

const consumer = createEngineEventConsumer(events);

const frames = renderFrames(consumer.getContent("file.pc"));

for (const frame of frames) {
  document.body.appendChild(frame);
}

// Consumer handles all patching of PC content, and emits changes
consumer.onChange((uri, currContent, prevContent, event) => {
   patchFrames(frames, currContent, prevCount);
});

the editor client PC document should ever to a shared consumer that takes these events, then updates its own content when it changes.

Considerations

crcn commented 2 years ago

Consumer can also be used to remove the importedSheets prop emitted by the engine

crcn commented 2 years ago

Also need to be cognizant about consumers that are added after everything evaluates. Need to have some way of populating that data. One possibility is createEngineEventConsumer({ getAllData }) + feeding that through an adapter that works via RPC or in the same process as the engine delegate.