Best JavaScript code snippet using ts-auto-mock
container.ts
Source:container.ts
1import { AsyncHookMap } from 'async-hooks-map';23import { getBindMeta, getDepencyMeta } from './decorators';4import { AliasRegistion, ClassRegistion, FactoryRegistion, Registion, ValueRegistion } from './registion';5import { BindOption, Constructor, ContainerBinder, ContainerResolver, Factory, ID, InjectError } from './types';6789export class Container implements ContainerResolver, ContainerBinder {1011 protected _map = new AsyncHookMap<any, Registion<any>>()1213 protected _lazyBinds: { [scope: string]: Map<any, Registion<any>> } = {}1415 protected _autoBinds: Set<Function> = new Set()1617 /**18 * alias of bindValue19 * 20 * @template T 21 * @param {ID<T>} id 22 * @param {T} value 23 * @memberof ContainerClass24 */25 set<T> (id: ID<T>, value: T, opt: { scope?: string } = {}): this {26 return this.bindValue(id, value, opt)27 }28 /**29 * bind with value, it will be singleton30 * 31 * @template T 32 * @param {ID<T>} id 33 * @param {T} value 34 * @memberof ContainerClass35 */36 bindValue<T> (id: ID<T>, value: T, opt: { scope?: string } = {}): this {37 const registion = new ValueRegistion(value, opt ? opt.scope : undefined)38 if (!opt.scope || this._map.hasName(opt.scope)) {39 this._map.set(id, registion)40 } else {41 const map = this._map.parent(opt.scope)42 if (map) {43 map.set(id, registion)44 } else {45 this._bindLazy(opt.scope, id, registion)46 }47 }48 return this49 }50 /**51 * bind lazy52 * 53 * @template T 54 * @param {ID<T>} id 55 * @param {() => T} func 56 * @param {BindOption} [opt] 57 * @memberof ContainerClass58 */59 bind<T> (id: ID<T>, creater: () => T, opt: BindOption = {}): this {60 const registion = new FactoryRegistion({ create: creater }, opt.singleton || false, opt.scope)61 if (!opt.scope || this._map.hasName(opt.scope)) {62 this._map.set(id, registion)63 } else {64 const map = this._map.parent(opt.scope)65 if (map) {66 map.set(id, registion)67 } else {68 this._bindLazy(opt.scope, id, registion)69 }70 }71 return this72 }7374 bindFactory<T> (id: Constructor<T>, factory: Factory<T> | Constructor<Factory<T>>, opt: Partial<BindOption & { factorySingleton: boolean }> = {}): this {75 if (typeof factory === 'function') {76 // factory is constructor77 const factoryOpt = {78 scope: opt.scope,79 singleton: opt.factorySingleton === false ? false : true80 }81 this.bindClass(factory, factoryOpt)82 this.bind(id, () => {83 const f = this.get(factory, opt.scope)84 return f.create()85 }, opt)86 } else {87 this.bind(id, factory.create.bind(factory))88 }89 return this90 }91 /**92 * 93 *94 * @template T95 * @param {ID<T>} id96 * @param {Function} cls97 * @param {BindOption} [opt={}]98 * @memberof Container99 */100 bindClassWithId (id: ID<any>, cls: Constructor<any>, opt: BindOption = {}): this {101 const registion = new ClassRegistion(cls, opt.singleton || false, opt.scope)102 if (!opt.scope || this._map.hasName(opt.scope)) {103 this._map.set(id, registion)104 } else {105 const map = this._map.parent(opt.scope)106 if (map) {107 map.set(id, registion)108 } else {109 this._bindLazy(opt.scope, id, registion)110 }111 }112 return this113 }114 /**115 * bind a class, ignore the decoractors116 * 117 * @template T 118 * @param {Constructor<T>} cls 119 * @param {BindOption} [opt] 120 * @memberof ContainerClass121 */122 bindClass<T> (cls: Constructor<T>, opt: BindOption = {}): this {123 const registion = new ClassRegistion(cls, opt.singleton || false, opt.scope)124 if (!opt.scope || this._map.hasName(opt.scope)) {125 this._map.set(cls, registion)126 } else {127 const map = this._map.parent(opt.scope)128 if (map) {129 map.set(cls, registion)130 } else {131 this._bindLazy(opt.scope, cls, registion)132 }133 }134 return this135 }136137 bindAlias<T> (id: ID<T>, toId: ID<T>, opt: Pick<BindOption, 'scope'> = {}): this {138 const registion = new AliasRegistion(toId)139 if (!opt.scope || this._map.hasName(opt.scope)) {140 this._map.set(id, registion)141 } else {142 const map = this._map.parent(opt.scope)143 if (map) {144 map.set(id, registion)145 } else {146 this._bindLazy(opt.scope, id, registion)147 }148 }149 return this150 }151152 /**153 * auto bind a class with decorectors154 *155 * @param {Function} target156 * @memberof Container157 */158 autoBind (target: Function): this {159 if (this._autoBinds.has(target)) {160 return this161 }162 this._autoBinds.add(target)163 const bindMeta = getBindMeta(target)164 if (bindMeta) {165 bindMeta.actions.forEach(action => {166 action(target, this)167 })168 }169 return this170 }171172 /**173 * create name or alias a async scope174 *175 * @param {string} name176 * @memberof Container177 */178 aliasScope (name: string) {179 if (this._map.parent(name)) {180 throw new Error('scope name should not be same with parent')181 }182 this._map.alias(name)183 if (this._lazyBinds[name]) {184 this._lazyBinds[name].forEach((reg, id) => {185 this._map.set(id, reg)186 })187 }188 return this189 }190 /**191 * detect a scope192 *193 * @param {string} name194 * @returns195 * @memberof Container196 */197 hasScope (name: string) {198 return this._map.hasName(name) || !!this._map.parent(name)199 }200 /**201 * fill a instance by it't prop decorectors202 *203 * @param {*} target204 * @param {string} [fromScope]205 * @memberof Container206 */207 fill (target: any, fromScope?: string) {208 const meta = getDepencyMeta(target)209 if (!meta) {210 return211 }212 for (let k of Object.keys(meta.props)) {213 if (!target[k]) {214 const resolver = meta.props[k]215 const value = resolver.resolve(this, fromScope)216 if (resolver.required && typeof value === 'undefined') {217 throw new InjectError('cant resolve depency,bug target prop is required')218 }219 target[k] = value220 }221 }222 }223 /**224 * get instance with id or class225 *226 * @template T227 * @param {(Function | Constructor<T>)} id228 * @param {string} [fromScope]229 * @returns {T}230 * @memberof Container231 */232 get<T> (id: Function | Constructor<T>, fromScope?: string): T233 get<T=any> (id: string | symbol, fromScope?: string): T | undefined234 get (id: ID<any>, fromScope?: string): any {235 const map = fromScope ? this._map.closest(fromScope) : this._map236 let reg = map.get(id)237 if (reg) {238 return reg.getInstance(this, fromScope)239 }240 if (typeof id === 'function') {241 if (!this._autoBinds.has(id)) {242 this.autoBind(id)243 return this.get(id)244 }245 const reg = new ClassRegistion(id, false)246 return reg.getInstance(this, fromScope)247 }248 }249250251 /**252 * get the distance of scope which has the key253 *254 * @param {ID<any>} id255 * @returns256 * @memberof Container257 */258 distance (id: ID<any>) {259 return this._map.distance(id)260 }261262 protected _bindLazy (scope: string, id: any, registion: Registion<any>) {263 if (!this._lazyBinds[scope]) {264 this._lazyBinds[scope] = new Map()265 }266 this._lazyBinds[scope].set(id, registion)267 }
...
types.ts
Source:types.ts
12export interface BindOption {3 scope?: string4 singleton?: boolean5}67export interface Factory<T> {8 create (): T9}1011export type Constructor<T> = Function | (Function & {12 new(...args: any[]): T13})1415export type ID<T> = string | symbol | Constructor<T>161718export interface InjectOption {19 required: boolean20 scope?: string21}2223export interface ContainerResolver {24 /**25 * get instance from container26 *27 * @template T28 * @param {Constructor<T>} id29 * @param {string} [fromScope]30 * @returns {T}31 * @memberof ContainerResolver32 */33 get<T> (id: Constructor<T>, fromScope?: string): T34 get<T=any> (id: string | symbol, fromScope?: string): T | undefined3536 /**37 * fill prop depencies of an exist instalce38 * it will ignore when target prop has value39 *40 * @param {*} target41 * @param {string} [fromScope]42 * @memberof ContainerResolver43 */44 fill (target: any, fromScope?: string): void45}4647export interface ContainerBinder {48 /**49 * alias of bind Value50 *51 * @template T52 * @param {ID<T>} id53 * @param {T} value54 * @param {Pick<BindOption, 'scope'>} [opt]55 * @memberof ContainerBinder56 */57 set<T> (id: ID<T>, value: T, opt?: Pick<BindOption, 'scope'>): this58 /**59 * bind a exist instalce60 *61 * @template T62 * @param {ID<T>} id63 * @param {T} value64 * @param {Pick<BindOption, 'scope'>} [opt]65 * @memberof ContainerBinder66 */67 bindValue<T> (id: ID<T>, value: T, opt?: Pick<BindOption, 'scope'>): this68 /**69 * bind lazy initialize instance70 *71 * @template T72 * @param {ID<T>} id73 * @param {() => T} creater74 * @param {Partial<BindOption>} [opt]75 * @memberof ContainerBinder76 */77 bind<T> (id: ID<T>, creater: () => T, opt?: Partial<BindOption>): this7879 /**80 * bind a class with factory81 *82 * @template T83 * @param {Constructor<T>} id84 * @param {(Factory<T> | Constructor<Factory<T>>)} factory85 * @param {Partial<BindOption>} [opt]86 * @returns {this}87 * @memberof ContainerBinder88 */89 bindFactory<T> (id: Constructor<T>, factory: Factory<T> | Constructor<Factory<T>>, opt?: Partial<BindOption & { factorySingleton: boolean }>): this9091 /**92 * bind a class93 * set scope or singleton94 *95 * @template T96 * @param {Constructor<T>} cls97 * @param {Partial<BindOption>} [opt]98 * @memberof ContainerBinder99 */100 bindClass<T> (cls: Constructor<T>, opt?: Partial<BindOption>): this101 /**102 * bind a class with an diffrent id103 *104 * @param {ID<any>} id105 * @param {Constructor<any>} cls106 * @param {Partial<BindOption>} [opt]107 * @memberof ContainerBinder108 */109 bindClassWithId (id: ID<any>, cls: Constructor<any>, opt?: Partial<BindOption>): this110111 /**112 * alias a id113 *114 * @param {ID<any>} id115 * @param {ID<any>} toId116 * @param {Pick<BindOption, 'scope'>} [opt]117 * @memberof ContainerBinder118 */119 bindAlias (id: ID<any>, toId: ID<any>, opt?: Pick<BindOption, 'scope'>): this120121}122123export class ContainerError extends Error {124 code = 'ERR_CONTAINER'125}126127export class InjectError extends ContainerError {128 code = 'ERR_CONTAINER.INJECT'
...
globalValaaScriptBuiltinObjects.js
Source:globalValaaScriptBuiltinObjects.js
2import VALEK from "~/valaa-engine/VALEK";3import { asyncRequest } from "~/valaa-tools";4export default {5 vRef,6 setField: VALEK.setField(VALEK.fromScope("$1"), VALEK.fromScope("$2")),7 addToField: VALEK.addToField(VALEK.fromScope("$1"), VALEK.fromScope("$2")),8 removeFromField: VALEK.removeFromField(VALEK.fromScope("$1"), VALEK.fromScope("$2")),9 create: VALEK.create(VALEK.fromScope("$1"), VALEK.fromScope("$2")),10 destroy: VALEK.destroy(VALEK.fromScope("$1")),11 emplaceSetField: VALEK.emplaceSetField(VALEK.fromScope("$1"), VALEK.fromScope("$2")),12 emplaceAddToField: VALEK.emplaceAddToField(VALEK.fromScope("$1"), VALEK.fromScope("$2")),13 do: VALEK.do(VALEK.fromScope("$1"), VALEK.fromScope("$2")),14 blobContent: VALEK.blobContent(VALEK.fromScope("$1"), VALEK.fromScope("$2")),15 mediaURL: VALEK.mediaURL(),16 mediaContent: VALEK.mediaContent(),17 prepareBlob: VALEK.prepareBlob(VALEK.fromScope("$1"), VALEK.fromScope("$1")),18 asyncRequest,...
Using AI Code Generation
1import { fromScope } from 'ts-auto-mock';2describe('fromScope', () => {3 it('should create a mock from a scope', () => {4 const mock: ScopeInterface = fromScope<ScopeInterface>('ScopeInterface');5 expect(mock).toEqual({6 method: jasmine.any(Function),7 propertyWithInterface: { property: 'property' },8 propertyWithInterfaceArray: [{ property: 'property' }],9 propertyWithInterfaceArrayWithUnion: [{ property: 'property' }],10 propertyWithUnionArrayWithInterface: [{ property: 'property' }],11 [{ property: 'property' }],12 });13 });14});15import { fromScope } from 'ts-auto-mock';16describe('fromScope', () => {17 it('should create a mock from a scope', () => {18 const mock: ScopeInterface = fromScope<ScopeInterface>('ScopeInterface');19 expect(mock).toEqual({20 method: jasmine.any(Function),21 propertyWithInterface: { property: 'property' },22 propertyWithInterfaceArray: [{ property: 'property' }],23 propertyWithInterfaceArrayWithUnion: [{ property: 'property' }],24 propertyWithUnionArrayWithInterface: [{ property: 'property' }],25 [{ property: 'property' }],
Using AI Code Generation
1import { fromScope } from 'ts-auto-mock/extension';2export interface Test1 {3 test1: string;4}5let test1: Test1 = fromScope<Test1>('test1');6console.log(test1.test1);7import { fromScope } from 'ts-auto-mock/extension';8export interface Test2 {9 test2: string;10}11let test2: Test2 = fromScope<Test2>('test2');12console.log(test2.test2);13import { fromScope } from 'ts-auto-mock/extension';14export interface Test3 {15 test3: string;16}17let test3: Test3 = fromScope<Test3>('test3');18console.log(test3.test3);19import { fromScope } from 'ts-auto-mock/extension';20export interface Test4 {21 test4: string;22}23let test4: Test4 = fromScope<Test4>('test4');24console.log(test4.test4);25import { fromScope } from 'ts-auto-mock/extension';26export interface Test5 {27 test5: string;28}29let test5: Test5 = fromScope<Test5>('test5');30console.log(test5.test5);31import { fromScope } from 'ts-auto-mock/extension';32export interface Test6 {33 test6: string;34}35let test6: Test6 = fromScope<Test6>('test6');36console.log(test6.test6);37import { fromScope } from 'ts-auto-mock/extension';38export interface Test7 {39 test7: string;40}41let test7: Test7 = fromScope<Test7>('test7');42console.log(test7.test7);43import { fromScope } from 'ts-auto-mock/extension';44export interface Test8 {
Using AI Code Generation
1import {fromScope} from 'ts-auto-mock/extension';2const interfaceName = 'InterfaceName';3const scope = {4 InterfaceName: {5 }6};7const result = fromScope<InterfaceName>(scope, interfaceName);8console.log(result);9export interface InterfaceName {10 property1: string;11 property2: string;12}13import {fromScope} from 'ts-auto-mock/extension';14const interfaceName = 'InterfaceName';15const scope = {16 InterfaceName: {17 }18};19const result = fromScope<InterfaceName>(scope, interfaceName);20console.log(result);21export interface InterfaceName<T> {22 property1: T;23 property2: string;24}25import {fromScope} from 'ts-auto-mock/extension';26const interfaceName = 'InterfaceName';27const scope = {28 InterfaceName: {29 }30};31const result = fromScope<InterfaceName<string>>(scope, interfaceName);32console.log(result);33export interface InterfaceName<T> {34 property1: T;35 property2: InterfaceName2<T>;36}37export interface InterfaceName2<T> {38 property3: T;39}40import {fromScope} from 'ts-auto-mock/extension';41const interfaceName = 'InterfaceName';42const scope = {43 InterfaceName: {44 property2: {45 }46 }47};48const result = fromScope<InterfaceName<string>>(scope,
Using AI Code Generation
1import { fromScope } from 'ts-auto-mock/extension';2const scope = fromScope('test1');3scope.mock('test2').for('test2').return({ test: 123 });4scope.mock('test3').for('test3').return({ test: 123 });5import { fromScope } from 'ts-auto-mock/extension';6const scope = fromScope('test1');7scope.mock('test1').for('test1').return({ test: 123 });8scope.mock('test3').for('test3').return({ test: 123 });9import { fromScope } from 'ts-auto-mock/extension';10const scope = fromScope('test1');11scope.mock('test1').for('test1').return({ test: 123 });12scope.mock('test2').for('test2').return({ test: 123 });13import { fromScope } from 'ts-auto-mock/extension';14const scope = fromScope('test');15scope.mock('test').for('test').return((arg: number) => arg);16const test = require('test');17import { fromScope } from 'ts-auto-mock/extension';18const scope = fromScope('test');19scope.mock('test').for('test').return({ test: 123 });20const test = require('test');21const testClass = new test();22import { fromScope } from 'ts-auto-mock/extension';23const scope = fromScope('test');24scope.mock('test').for('test').return({ test: 123 });25const test = require('test');26const testClass: test = { test: 123 };27import { fromScope } from 'ts-auto-mock/extension';28const scope = fromScope('test');29scope.mock('test').for('test').return({ test: 123 });30const test = require('test');
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!