@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
1 lines • 1.81 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/engine/utils/index.ts"],"sourcesContent":["export * from \"./damageCalc\";\nexport * from \"./increase\";\nexport * from \"./kicks\";\nexport * from \"./tetromino\";\nexport * from \"./seed\";\nexport * from \"./polyfills\";\nexport * from \"./rng\";\n\nexport interface Handler<T> {\n type: new (...args: any[]) => T;\n copy: (value: T) => T;\n}\nexport function deepCopy<T>(obj: T): T;\nexport function deepCopy<T, H extends Handler<any>[]>(obj: T, handlers: H): T;\nexport function deepCopy<T, H extends Handler<any>[]>(\n obj: T,\n handlers: H = [] as unknown as H\n): T {\n if (obj === null || obj === undefined || typeof obj !== \"object\") {\n return obj;\n }\n\n for (const h of handlers) {\n if (obj instanceof h.type) {\n return h.copy(obj as any) as T;\n }\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepCopy(item, handlers)) as any;\n }\n\n const out: { [k: string]: any } = {};\n for (const key of Object.keys(obj)) {\n out[key] = deepCopy((obj as any)[key], handlers);\n }\n return out as T;\n}\n"],"names":["deepCopy","obj","handlers","undefined","h","type","copy","Array","isArray","map","item","out","key","Object","keys"],"mappings":"AAAA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B,cAAc,UAAU;AACxB,cAAc,cAAc;AAC5B,cAAc,SAAS;AACvB,cAAc,cAAc;AAC5B,cAAc,QAAQ;AAQtB,OAAO,SAASA,SACdC,GAAM,EACNC,WAAc,EAAE,AAAgB;IAEhC,IAAID,QAAQ,QAAQA,QAAQE,aAAa,OAAOF,QAAQ,UAAU;QAChE,OAAOA;IACT;IAEA,KAAK,MAAMG,KAAKF,SAAU;QACxB,IAAID,eAAeG,EAAEC,IAAI,EAAE;YACzB,OAAOD,EAAEE,IAAI,CAACL;QAChB;IACF;IAEA,IAAIM,MAAMC,OAAO,CAACP,MAAM;QACtB,OAAOA,IAAIQ,GAAG,CAAC,CAACC,OAASV,SAASU,MAAMR;IAC1C;IAEA,MAAMS,MAA4B,CAAC;IACnC,KAAK,MAAMC,OAAOC,OAAOC,IAAI,CAACb,KAAM;QAClCU,GAAG,CAACC,IAAI,GAAGZ,SAAS,AAACC,GAAW,CAACW,IAAI,EAAEV;IACzC;IACA,OAAOS;AACT"}