mapikit / meta-system Goto Github PK
View Code? Open in Web Editor NEWThe open-source no-code engine/framework. A system to be any system.
Home Page: https://mapikit.github.io/meta-system-docs/
License: GNU General Public License v3.0
The open-source no-code engine/framework. A system to be any system.
Home Page: https://mapikit.github.io/meta-system-docs/
License: GNU General Public License v3.0
I have a function that takes a long time to be executed and not being able to change the BOP TTL is a problem to me
Currently, there's a lot of doc-reading until you're at the point of having a valid Addon to work with. This Issue outlines the possibility of having a CLI command for creating an Addon boilerplate with a few parameters, so developers can more readily start developing, only adjusting what is necessary for their use-case.
To solve this issue, It would be interesting to have these features:
meta-system create-addon
The CLI flag --skip-prop-validation
is documented, but MSYS does not recognize it.
As of 0.1.4 string related functions seem to be lacking. Two quite useful functions would be:
Receives two or more strings and returns one single string from the concatenated input strings. Ex.:
{
strings: { aString: "Hello ", anotherString: "World", lastString: "!" }
} => "Hello World!"
Why should this be added?: This would avoid having to put the strings into an array and then join
the array, which is more time consuming and much less intuitive.
Receives a string template and replacers. Then, replaces the template with all replacer values with the same name in the template. Ex.:
{
template: "You thought it was ${hero}, but it was me, ${villain}!!",
replacers: { hero: "Dio", villain: "Jojo", notUsed: "thisIsExtra" }
} => "You thought it was Dio, but it was me, Jojo!!"
Why should this be added?: This avoids the need for multiple string constants to be joined later (this simple example would require three constants).
Notes:
""
by defaultAs plain as it it, the -t
option does not affect the application, while the --type-check
does.
Module alias is a package used in order to not need relative imports in the project. While using it in a final project is its designed use case, it is not recommended for npm packages, such as meta-system
.
We should remove this dependency and fix the imports, as well as remove the no-relative-imports lint rule.
Enums are not being validated in the plain object validation function.
If we need to have a feature like a chat, or sending a message in an SQS queue, the current protocols
configuration for the Meta-system does not suffice our needs.
Let's say that we want to send said SQS queue message. It is better to store connections to be used instead of creating and terminating them for each message. As of version 0.1.4
, we cannot do that.
A similar story goes for a a websocket: Currently, as a protocol, I can call a BOp, but a BOp cannot never "call", or use a protocol.
If we broaden the protocols interfaces to be able to also provide their own BOps functions or information when installed, such things should no longer be a problem.
For such issues, there are two things we could do:
In the BOps configuration, the first option could look like:
"configuration": [
{
"moduleRepo": "=sqs=Send",
"dependencies": [...]
}
]
The =
would be analogous to the @
for Schemas BOps Functions, but for the protocols.
For the second option, the configuration could take the following formation:
"configuration": [
{
"moduleRepo": ":sqsSend",
"dependencies": [
{ "origin": "protocols", "originPath": "sqs.connection", "targetPath": "connection" }
]
}
]
Both features together would make the best for having a slim, yet capable, protocol interface.
Before the newest version, the documentation had a search bar, but it disappeared after the latest changes. Needless to say, we need it back to make navigating around the docs a little less challenging.
We could either bring back the old search bar (AKA fix it) or we could remove it entirely and add a different one.
For medium to big systems, the configuration file size can become quite the challenge to manage, given that all the system configuration must be contained in a single file.
The user should be able to define BOps and protocols configurations in separate files, since they tend to be the largest part of a system configuration, and are independent from one another.
The file break should be indicated having a file path string present in the place of the object.
{
"businessOperations": [
{ /*bops1*/ },
"/path/to/bops2",
{ /*bops3*/ },
// And so on
]
}
A couple of rules should apply:
Currently, meta-system validates the dependencies to download required external packages. That validation is not working properly, as if we try to use the same module twice, with the same version, which should be okay, the validator throws an error.
Using the same version of the package twice in a same BOps should not throw an error.
Meta-system is using the import
statement to import JSON files. This makes node throw an ugly warning about asserting imports. ๐
Replace JSON imports with FS operations. If there are imports that are not importing system configuration files, they should be consts instead.
Hi again,
https://mapikit.github.io/meta-system-docs/docs/api-docs/configuring/basics/
All section links are missing
When I try to execute a non existent SchemaFunction, MSYS does not fail to boot, additionally, it does not fail to execute the BOp either.
Functions are the base of meta-system, for everything a system needs, there is a function to do it; However, any new function requires a new repo, new definitions, and a new name we don't know if it is available on the NPM registry. This problem can be completely avoided if we use a packaging solution for multiple functions.
The package naming is already available in the version branch v0.2
, so there is a base to follow and a partial solution implemented.
Also, packaging would benefit creators of functions to maintain their functions in a single repo and npm package.
Of course, changing the meta-function-helper means changing the Meta-system as well, so let's go on details of those changes.
Currently there is no way a newcomer can know how to contribute to Meta-System, where to look for bugs, and how the project is structured. We should have at least a .md
file for specifying these aspects of the software.
A BOP with more than one equally numbered keys should not be valid, but MSYS stitches the functions.
Here We will describe all remaining topics to solve about MSYS v0.4 - Andromeda.
done()
function was called in the "configure"
step of an Addon.More tasks will be added as we see fit.
Running the test-bop
cli command exits with an error: TypeError: Cannot read properties of undefined (reading 'input')
Cannot launch on windows for version 0.4.5 - The path for the file is not found. There is an error pointing to a path like C:\C:\<rest of the path>
Probably a problem caused by the fix of #112 .
Debugging is more than just a thing to solve bugs, it helps the person/user to understand better the flow and what happens in each step, how the data is transformed and used throughout the flow. Meta-System, currently, has no such capabilities.
I'd say there are two main ways the current state could be improved, but the perfect solution would be to have both.
Clearly, the number 1 be best suited for running Meta-System in a standalone way, while the Number 1 would be for running it alongside another software, but both share the same usefulness.
Some libraries are made to work together with other libraries, such as Express and Socket.io. Currently, MSYS has a completely isolated workspace for every added Addon, meaning no Addon can directly affect other Addons.
We could create another Broker action that allows for Addons to export values, classes, and functions, and another action that enables their retrieval.
When a BOp throws (a module inside it fails) the Addon does not return a 500 at the request, instead it finishes the request. Since it is the last step before the data exits MSYS, it should be the responsible for treating errors.
While trying to use an Env created in the configuration in a BOp as a module dependency, no value is resolved.
In the new version 0.4 the Addons got introduced, but it did not receive the feature of file-splitting.
Implement file-splitting similar to how the Schemas and BOps are implemented.
This is marked as a bug because it is something actually expected to work, but dumb me forgot to implement it ๐คก
Currently MSYS does not execute such check, so in the end we end up giving bad data to the DBProtocols to consume, or the Schemas to bind to their protocols.
We need this verification to happen.
Currently on MSYS, whenever we need to supply an array for a function to consume, we require the Array Push function to concatenate values into an array, which does not scale well when we can have 10 functions in the same BOP requiring arrays... making the process in the end quite bloated.
As we currently have a way of creating objects keys in the "targetProp"
, we could also have an analogous version for creating arrays and setting an index of it, as the following:
"targetProp": "bar.newKey"
"targetProp": "foo.prop[0]"
- "prop"
is a key of the "foo"
object, and the target prop ends up in being the "0"
index in the array.Background: This issue was created to track development for solving #50 ,
Upon an architectural conversation, me and @homemmakako came to an agreement on how we should structure the new protocols capabilities. For v0.2
, the protocols should be able to provide functions to be used in BOps, and also, they will be downloadable, just like a function is (and in the future, function packages #53 will be too).
This issue needs two pieces of code to be considered solved:
The protocol helper should be able to do the following functions:
meta-function-helper
for the latter.Quite some changes are needed:
Currently BOps do not handle throws from modules, simply quitting execution.
BOps should gracefully handle problems within Modules, logging a good error message, and then returning an error to be handled by the caller of the BOp.
Whenever making a request using the protocol, no body is shown and the request is dropped.
To not drop the body from the requests.
Currently the docs are only in English. We should provide access to more people around the world to learn and use meta-system in their native language.
When a Bop A has another Bop B as its dependency but Bop B is not declared in the config, MSys just goes into a loop until it eventually breaks with a "Too much recursion" error.
We should check if bop dependencies exist beforehand to make sure this does not happen.
Since V0.4, a lot changed in Meta-System internally, and because of that, many tests ended up being discarded. This lowered the overall regression-safety of PRs.
This is more of an Ongoing issue, so please, if you can improve on any Tests, PRs are welcome.
Missing url https://mapikit.github.io/meta-system-docs/docs/api-docs/getting-started/configuring/basics
Linked from last paragraph here
https://mapikit.github.io/meta-system-docs/docs/api-docs/getting-started/
Meta-system currently does not prevent booting when having multiple versions of the same package in a config.
I believe it should not boot given the way it installs packages via NPM, so a package install overrides another with a different version.
On Meta-System, you are required to specify a MongoDB connection string whenever using schemas. The way this current module is structure makes evident the lack of flexibility of the module. We simply cannot use other databases than MongoDB.
Now, given that for 0.2 the protocols have received a "power up", we can leverage on that same structure and introduce "DBProtocols". They would be protocols but for accessing the Database, and interacting with Schemas.
With this, without any change to the schemas or any other part of the configuration, we should be able to use any different form of data persistence/caching. We could, for instance, have a DBProtocol that stores data in memory, and another that writes into a Redis.
The plan would be to use the same structure built for v0.2 for the protocols. This means the DBProtocols should:
Also this would mean we would have to extract the current drivers for MongoDB from the core into a separate library, which sounds like an architectural improvement to me.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.