diff --git a/package-lock.json b/package-lock.json index 7e769e7..ed78627 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,11 +20,11 @@ "react": "^16.14.0", "react-dom": "^16.14.0", "tsdx": "^0.13.3", - "tslib": "^1.14.1", - "typescript": "^3.7.3" + "tslib": "^2.8.1", + "typescript": "^4.9.5" }, "engines": { - "node": ">=10" + "node": ">=20" }, "peerDependencies": { "react": ">=16" @@ -2770,12 +2770,6 @@ "node": ">=18.2.0" } }, - "node_modules/automation-events/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -10992,6 +10986,13 @@ "npm": ">=2.0.0" } }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/sade": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", @@ -11613,12 +11614,6 @@ "tslib": "^2.7.0" } }, - "node_modules/standardized-audio-context/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -12204,12 +12199,6 @@ "tslib": "^2.3.1" } }, - "node_modules/tone/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -12501,6 +12490,13 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/tsdx/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/tsdx/node_modules/typescript": { "version": "3.9.10", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", @@ -12515,10 +12511,10 @@ } }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -12535,6 +12531,13 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -12578,10 +12581,11 @@ } }, "node_modules/typescript": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", - "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 6220cf3..72dd699 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "react": "^16.14.0", "react-dom": "^16.14.0", "tsdx": "^0.13.3", - "tslib": "^1.14.1", - "typescript": "^3.7.3" + "tslib": "^2.8.1", + "typescript": "^4.9.5" }, "husky": { "hooks": { diff --git a/src/components/Effect.tsx b/src/components/Effect.tsx index 0574eaf..3e17d0d 100644 --- a/src/components/Effect.tsx +++ b/src/components/Effect.tsx @@ -33,6 +33,37 @@ export interface EffectConsumerProps extends EffectProps { onRemoveFromEffectsChain?: Function; } +type EffectInstance = { + id?: string | number; + feedback?: { + value: number; + }; + delay?: { + value: number; + }; + delayTime?: { + value: string; + }; + wet?: { + value: number; + }; + low?: { + value: number; + }; + mid?: { + value: number; + }; + high?: { + value: number; + }; + lowFrequency?: { + value: number; + }; + highFrequency?: { + value: number; + }; +}; + const EffectConsumer: React.FC = ({ type, id, @@ -47,67 +78,45 @@ const EffectConsumer: React.FC = ({ onAddToEffectsChain, onRemoveFromEffectsChain, }) => { - const effect = useRef<{ - id: string | number; - feedback?: { - value: number; - }; - delay?: { - value: number; - }; - delayTime?: { - value: string; - }; - wet?: { - value: number; - }; - low?: { - value: number; - }; - mid?: { - value: number; - }; - high?: { - value: number; - }; - lowFrequency?: { - value: number; - }; - highFrequency?: { - value: number; - }; - }>(); + const effect = useRef(); useEffect(() => { // console.log(' mount'); // console.log(`id: ${id}`); if (type === 'autoFilter') { - effect.current = new Tone.AutoFilter(); + effect.current = (new Tone.AutoFilter() as unknown) as EffectInstance; } else if (type === 'autoPanner') { - effect.current = new Tone.AutoPanner(); + effect.current = (new Tone.AutoPanner() as unknown) as EffectInstance; } else if (type === 'autoWah') { - effect.current = new Tone.AutoWah(); + effect.current = (new Tone.AutoWah() as unknown) as EffectInstance; } else if (type === 'bitCrusher') { - effect.current = new Tone.BitCrusher(); + effect.current = (new Tone.BitCrusher() as unknown) as EffectInstance; // Removed for now because delayTime has to be in ms // } else if (type === 'chorus') { // effect.current = new Tone.Chorus(); } else if (type === 'distortion') { - effect.current = new Tone.Distortion(0.5); + effect.current = (new Tone.Distortion(0.5) as unknown) as EffectInstance; } else if (type === 'feedbackDelay') { - effect.current = new Tone.FeedbackDelay(delayTime, feedback); + effect.current = (new Tone.FeedbackDelay( + delayTime, + feedback, + ) as unknown) as EffectInstance; } else if (type === 'freeverb') { - effect.current = new Tone.Freeverb(); + effect.current = (new Tone.Freeverb() as unknown) as EffectInstance; } else if (type === 'panVol') { - effect.current = new Tone.PanVol(); + effect.current = (new Tone.PanVol() as unknown) as EffectInstance; // Needs generate() // } else if (type === 'reverb') { // effect.current = new Tone.Reverb(); } else if (type === 'tremolo') { - effect.current = new Tone.Tremolo(); + effect.current = (new Tone.Tremolo() as unknown) as EffectInstance; } else if (type === 'eq3') { - effect.current = new Tone.EQ3(low, mid, high); + effect.current = (new Tone.EQ3( + low, + mid, + high, + ) as unknown) as EffectInstance; } if (effect.current) { diff --git a/src/components/Instrument.tsx b/src/components/Instrument.tsx index 3f5eb40..27b59b2 100644 --- a/src/components/Instrument.tsx +++ b/src/components/Instrument.tsx @@ -64,6 +64,19 @@ interface InstrumentConsumerProps extends InstrumentProps { onInstrumentsUpdate?: Function; } +type InstrumentInstance = Partial<{ + curve: number; + release: number; + triggerAttack: Function; + triggerAttackRelease: Function; + triggerRelease: Function; + add: Function; + set: Function; + chain: Function; + dispose: Function; + disconnect: Function; +}>; + const InstrumentConsumer: React.FC = ({ // Props type = 'synth', @@ -82,20 +95,7 @@ const InstrumentConsumer: React.FC = ({ effectsChain, onInstrumentsUpdate, }) => { - const instrumentRef = useRef< - Partial<{ - curve: number; - release: number; - triggerAttack: Function; - triggerAttackRelease: Function; - triggerRelease: Function; - add: Function; - set: Function; - chain: Function; - dispose: Function; - disconnect: Function; - }> - >(); + const instrumentRef = useRef(); // const trackChannelBase = useRef(new Tone.PanVol(pan, volume)); // const trackChannelBase = useRef(new Tone.Channel(volume, pan)); const trackChannelBase = useRef(null); @@ -125,7 +125,10 @@ const InstrumentConsumer: React.FC = ({ useEffect(() => { if (type === 'sampler') { - instrumentRef.current = new Tone.Sampler(samples, onLoad); + instrumentRef.current = (new Tone.Sampler( + samples, + (onLoad as unknown) as () => void, + ) as unknown) as InstrumentInstance; if (options && options.curve) { instrumentRef.current.curve = options.curve; @@ -146,7 +149,7 @@ const InstrumentConsumer: React.FC = ({ } else if (type === 'noiseSynth') { instrumentRef.current = new Tone.NoiseSynth(); } else if (type === 'pluckSynth') { - instrumentRef.current = new Tone.PluckSynth(); + instrumentRef.current = (new Tone.PluckSynth() as unknown) as InstrumentInstance; } else { let synth; diff --git a/src/components/Song.tsx b/src/components/Song.tsx index 1fd7e2a..0992516 100644 --- a/src/components/Song.tsx +++ b/src/components/Song.tsx @@ -49,7 +49,7 @@ const Song: React.FC = ({ transport.bpm.value = bpm; transport.swing = swing; - transport.swingSubdivision = swingSubdivision; + transport.swingSubdivision = swingSubdivision as typeof transport.swingSubdivision; }, [bpm, swing, swingSubdivision]); useEffect(() => { @@ -59,7 +59,7 @@ const Song: React.FC = ({ // Hack to get Tone to NOT use same settings from another instance transport.bpm.value = bpm; transport.swing = swing; - transport.swingSubdivision = swingSubdivision; + transport.swingSubdivision = swingSubdivision as typeof transport.swingSubdivision; transport.start(); } else { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index bc54d90..9ac0493 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -37,6 +37,8 @@ export const isEqual = function(value, other) { if (item1 !== item2) return false; } } + + return true; }; // Compare properties diff --git a/src/types/index.d.ts b/src/types/index.d.ts index b1d32a0..7dc3680 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,3 +1 @@ -declare module 'tone'; - declare module 'startaudiocontext';