refactor: mixin

This commit is contained in:
cha0s 2024-01-05 20:07:42 -06:00
parent 3553d6ca8d
commit a60ac484fc
5 changed files with 26 additions and 11 deletions

View File

@ -8,9 +8,24 @@ import startFlush from './start-flush';
const resources = express.static(join(process.cwd(), 'projects'));
export const hooks = {
'@flecks/core.mixin': (Flecks) => (
class FlecksWithPerseaCore extends Flecks {
constructor(...args) {
super(...args);
if (!this.persea) {
this.persea = {};
}
if (!this.persea.core) {
this.persea.core = {};
}
this.persea.core.patches = [];
this.persea.core.replacements = [];
}
}
),
'@flecks/core.starting': (flecks) => {
flecks.set('$persea/core.patches', []);
flecks.set('$persea/core.replacements', []);
startFlush(flecks);
},
'@flecks/core.webpack': (target, config) => {

View File

@ -15,13 +15,13 @@ export default (Action, flecks) => class ProjectAction extends Action {
const {data: {type, payload}} = packet;
switch (type) {
case patchJsonResource.toString(): {
flecks.get('$persea/core.patches').push(payload);
flecks.persea.core.patches.push(payload);
break;
}
case redo.toString(): {
const {project, uri} = payload;
const path = join(process.cwd(), 'projects', project, uri);
const {toBuffer, fromBuffer} = flecks.get('$avocado/resource/persea.controllers')
const {toBuffer, fromBuffer} = flecks.avocado.resource.persea.Controllers
.find(({matcher}) => uri.match(matcher));
const buffer = await readFile(path);
const json = fromBuffer(buffer, flecks);
@ -39,13 +39,13 @@ export default (Action, flecks) => class ProjectAction extends Action {
break;
}
case replaceResource.toString(): {
flecks.get('$persea/core.replacements').push(payload);
flecks.persea.core.replacements.push(payload);
break;
}
case undo.toString(): {
const {project, uri} = payload;
const path = join(process.cwd(), 'projects', project, uri);
const {toBuffer, fromBuffer} = flecks.get('$avocado/resource/persea.controllers')
const {toBuffer, fromBuffer} = flecks.avocado.resource.persea.Controllers
.find(({matcher}) => uri.match(matcher));
const buffer = await readFile(path);
const json = fromBuffer(buffer, flecks);

View File

@ -5,7 +5,7 @@ import {applyPatch, compare} from 'fast-json-patch';
const startFlush = (flecks) => {
const flushPatches = async () => {
const patches = flecks.get('$persea/core.patches');
const {patches} = flecks.persea.core;
if (patches.length > 0) {
while (patches.length > 0) {
const {
@ -16,7 +16,7 @@ const startFlush = (flecks) => {
} = patches.shift();
const path = join(process.cwd(), 'projects', project, uri);
// Get controller.
const {toBuffer, fromBuffer} = flecks.get('$avocado/resource/persea.controllers')
const {toBuffer, fromBuffer} = flecks.avocado.resource.persea.Controllers
.find(({matcher}) => uri.match(matcher));
// Load.
// eslint-disable-next-line no-await-in-loop
@ -44,7 +44,7 @@ const startFlush = (flecks) => {
};
setTimeout(flushPatches, 0);
const flushReplacements = async () => {
const replacements = flecks.get('$persea/core.replacements');
const {replacements} = flecks.persea.core;
if (replacements.length > 0) {
while (replacements.length > 0) {
const {value, project, uri} = replacements.shift();

View File

@ -92,7 +92,7 @@ function Organization({
nodes={nodesFromResourcePaths(label, uuid, resourcePaths)}
renderLabel={({label, nodes, value}) => {
const {displayName = 'Binary'} = flecks
.get('$avocado/resource/persea.controllers')
.avocado.resource.persea.Controllers
.find(({matcher}) => value.match(matcher))
.Component;
return (

View File

@ -17,7 +17,7 @@ export const fetchProjectResource = createAsyncThunk(
async ({uri, uuid}, {extra: flecks}) => {
Resource.root = join('/projects', uuid);
const buffer = await Resource.read(uri);
const {fromBuffer} = flecks.get('$avocado/resource/persea.controllers')
const {fromBuffer} = flecks.avocado.resource.persea.Controllers
.find(({matcher}) => uri.match(matcher));
try {
return fromBuffer(Buffer.from(buffer), flecks);