Navigation Menu

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 / instrument-test-build.js
Created November 21, 2022 10:53
Instrument vite build using nyc
// @ts-check
const fs = require('fs');
const path = require('path');
const os = require('os');
var { spawn } = require('child_process');
const systemCpuCores = os.cpus();
const pathToArtifacts = path.join(__dirname, '..', 'build', 'assets');
const processes = systemCpuCores.length > 1 ? systemCpuCores.length - 1 : 1;
@lifeart
lifeart / index.js
Created February 7, 2022 14:13
v2 addon migrator
import path from 'path';
import os from 'os';
import fs from 'fs-extra';
// https://github.com/embroider-build/embroider/blob/main/PORTING-ADDONS-TO-V2.md
async function migrate(entry) {
const { default: walkSync } = await import('walk-sync');
const files = () => walkSync(entry, {
ignore: [
'.git',
// A launch configuration that compiles the extension and then opens it inside a new window
{
"version": "0.1.0",
"configurations": [
{
"name": "Attach by Process ID",
"processId": "${command:PickProcess}",
"request": "attach",
"resolveSourceMapLocations": null,
"sourceMaps": true,
import Controller from '@ember/controller';
import { htmlSafe } from '@ember/template';
export default class ApplicationController extends Controller {
appName = htmlSafe('Ember <br> Twiddle');
}
@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;