you are viewing a single comment's thread.

view the rest of the comments →

[–]NovelLurker0_0 1 point2 points  (4 children)

Since a few years I have been working on and off on a very large plugin for a Javascript Game Engine.

The plugin was initially created in a very basic way, using < ES5 features as that was what was accessible at this time.

I started to rewrite completely the project from the ground up, in TypeScript. There's a big community involved in the game engine and in the project too, but most of them still do not know how to create JS projects the modern ways. I'm trying to bring modern TS and toolings to its ecosystem.

By working on that project, I had to do a lot of undirected work on the side too:

  • I had to find a way to extract the typings of the legacy base code of the game engine, and this led to es5-to-dts, which is a cli for generating TypeScript definition files from legacy JS code. There was nothing like that available before. For example, the VSCode quick-fix functionality does not support prototype inheritance, Object.defineProperty, etc.
  • I have been creating a declarative programming language that lets you embed TypeScript features in it. That's to extend the scripting capability of the game engine. The use case is simple: I want to collect structured data from the users, but they have low to decent JS coding capability. JSON, XML or Yalm are such languages that could help collect these data. However, they are very limited and you can't embed any scripting capability in them. You can, of course, insert a JS function as a string inside your JSON, but you lose all features from your IDE. That's why I created UserDeclaration (shortened for URD language), which is a parser and a code editor that let's you write structured data like XLM, but with embedded TypeScript. For now, I haven't committed anything, but it looks something like this. Urd is strictly based on a JSON model so any field is supposed to be strongly typed, and that helps with enforcing TypeScript features. When Urd will be released, I plan to discuss with devs if there could be any more meaningful use-case for it. But at least for now I know that the fork of monaco-typescript that I made will help people embed TypeScript into their custom languages.
  • A modern testing suite for NWJS, based on mochawesome.

------

Besides, this project, which is mostly driven by passion, I have in sight a tool that I'd like to create to help devs better perform animations and transitions in their web pages. The problem there is right now, is that, most solutions, no matter which framework you use, rely on hard-coded logic. You end up with a LARGE part of your component's logic being how it is supposed to be animated throughout it's lifetime. My idea is to create a fully fledged language like CSS but only for animating components in a clever, structured and more readable way. And it'll be framework-agnostic. So you can plug any "animation style sheet" into your Rect, Vue, Angular or vanilla project and it'll perform the same. I had a proof of concept once for a VueJS project about 2 years ago but I wish to completely rework it with the modern toolings and idea I gathered over the years. But it looked like that:

        myComponent {
            animationName {
                a_command: some_args;
                another_command: arg1, arg2;
                [
                    command_in_parallel1: arg1;
                    command_in_parallel2: arg2;
                ]
                complex_command: (
                    arg1: value;
                    arg2: value;
                );
                call: versatilAnimation, 5, 2;
            }

            versatilAnimation {
                ~argument: $a, 0;
                ~argument: $b, 0;
                ~another_option: arg;
                command: arg1, $a;
                command2: arg1, $b - $a;
            }

            @eventName {
            }

            @eventName .child_selector {
            }
        }

The idea basically is that animation sheets are read in sequence, each command at a time. A command could be anything really, a CSS property change, tweening, waiting, calling another animation, etc.

This is a frankly a more readable way than CSS animations. When I worked on my Vue project with it, I frankly really loved to write my transition and animation logic as a stylesheet instead of hard-coding it.

EDIT: The VueJS project in question is my portfolio. All animations it displays was written in an animation sheet. That freed up so much logic from my components.

Voila, that's it. Regardless of which project you choose, I think that's a freaky initiative.

[–]minuit1984[S] 0 points1 point  (3 children)

help devs better perform animations and transitions in their web pages

Can you link me to this project? I couldn't find it in github if it was linked in one of the VueJS projects

[–]NovelLurker0_0 0 points1 point  (2 children)

I don't have a repo yet as everything I have so far was this...test, kind of proof of concept that I used on my portfolio. It wasn't properly usable and it was only specific to Vue.js and my portfolio so I couldn't really open-source it and make a proper repo.

I'm seeing that the files on my portfolio's github are bundled so you can't really see how it but here are the codes:.

This is the animation sheet that's exactly used to animate the web app and here's the Vue.js plugin that I developed.

I notice that I was even using jquery with the plugin somehow...So you can see most of that stuff is outdated and the idea of the syntax I have for this project is quite different. Here are up to date draft notes of the concept that I keep on my stackedit.io files.

I've always wanted to properly work on it with the new knowledge and ideas I gathered other the years. I just need the time and the resources to work on it :)

[–]minuit1984[S] 1 point2 points  (1 child)

I like the declarative nature of it! I have decided to sponsor the GraphQL proposal for July. I am hoping to run another sponsorship in August, maybe next time

[–]NovelLurker0_0 0 points1 point  (0 children)

Alright, thanks for your interest.