Skip to content

Instantly share code, notes, and snippets.

View lifeart's full-sized avatar
🐹
Working from home

Alex Kanunnikov lifeart

🐹
Working from home
View GitHub Profile
@lifeart
lifeart / index.js
Created December 2, 2021 10:46
Ember-auto-import chunk recorder (in-repo-addon)
'use strict';
// eslint-disable-next-line node/no-extraneous-require
const { MergeTrees } = require('broccoli-merge-trees');
// eslint-disable-next-line node/no-extraneous-require
const Plugin = require('broccoli-plugin');
const fs = require('fs');
const path = require('path');
class ChunksWriter extends Plugin {
@lifeart
lifeart / controllers.application\.js
Last active November 27, 2021 10:58
Tracked Observers
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { getOwner } from '@ember/application';
import { cached } from 'tracked-toolbox';
import { scheduleOnce } from '@ember/runloop';
const Observers = [];
class BasicObserver {
tags = [];
cb = null;
@lifeart
lifeart / example.js
Created November 12, 2021 13:25
Promise queue
async function request() {
const PromiseState = new WeakMap();
const resolveTimers = new Array(10).fill(null).map(() => Math.random() * 10000);
const rejectTImers = new Array(10).fill(null).map(() => Math.random() * 10000);
const promiseArgs = resolveTimers.map((_, i) => [resolveTimers[i], rejectTImers[i]]);
let promises = promiseArgs.map(([resolveTimeout, rejectTimeout]) => {
@lifeart
lifeart / readme.md
Created November 10, 2021 13:12
Template autotracking

Let's assume we have autotracking chain implementation. In general, we could be able to mark "accessed" properties, we could introduce "addToChain" function with 2 arguments,

1.) object (context) 2.) property we trying to access (on object)

like:

{
"version":"0.1.0",
"configurations":[
{
"name": "Launch Tests",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceRoot}",
@lifeart
lifeart / index.js
Last active September 23, 2021 09:18
sass-hook
const stew = require('broccoli-stew');
const themeName = process.env.EMBER_THEME || 'default';
module.exports = {
_registers: [],
setupPreprocessorRegistry(type, registry, isFinal = false) {
if (themeName === 'default') {
return;
@lifeart
lifeart / controllers.application\.js
Last active September 5, 2021 20:30
New Twiddle
import Controller from "@ember/controller";
import agGrid from "agGrid";
import { schedule } from "@ember/runloop";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
function createAgGridWrapper(component) {
class Box {
@tracked
@lifeart
lifeart / ag-iterator.hbs
Last active February 18, 2023 09:11
Ember AgGrid integration | ag-grid
{{#each (get @box 'agGridIterator') key="id" as |node|}}
{{#-in-element node.node}}
{{yield node}}
{{/-in-element}}
{{/each}}
{
"each autocomplete": {
"prefix": "{{#each",
"body": [
"{{#each ${1:items} as |${2:item}|}}",
" ${3:content}",
"{{/each"
],
"description": "each autocomplete"
},
@lifeart
lifeart / index.js
Last active August 27, 2021 18:58
Create Ember app inside ShadowRoot node
class MyApp extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.shadow.classList = {
contains: () => { return false }
};
}
connectedCallback() {
const node = document.createElement('div');