diff --git a/packages/core/draw.mjs b/packages/core/draw.mjs
index f63acdf3f..3bfcd37cd 100644
--- a/packages/core/draw.mjs
+++ b/packages/core/draw.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern, getTime } from './index.mjs';
-const { Pattern } = pattern;
+import core from './index.mjs';
+const { Pattern } = core;
export const getDrawContext = (id = 'test-canvas') => {
let canvas = document.querySelector('#' + id);
diff --git a/packages/core/evaluate.mjs b/packages/core/evaluate.mjs
index f2879a55d..63f7a58dc 100644
--- a/packages/core/evaluate.mjs
+++ b/packages/core/evaluate.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern } from './index.mjs';
-const { isPattern, Pattern } = pattern;
+import core from './index.mjs';
+const { isPattern, Pattern } = core;
let scoped = false;
export const evalScope = async (...args) => {
diff --git a/packages/core/index.mjs b/packages/core/index.mjs
index 0a6c32a82..a063307db 100644
--- a/packages/core/index.mjs
+++ b/packages/core/index.mjs
@@ -4,27 +4,36 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import pattern from './pattern.mjs';
-import controls from './controls.mjs';
-export * from './euclid.mjs';
import Fraction from './fraction.mjs';
+
+import drawLine from './drawLine.mjs';
+import gist from './gist.js';
import { logger } from './logger.mjs';
-export { Fraction, controls, pattern };
-export * from './hap.mjs';
-export * from './signal.mjs';
-export * from './state.mjs';
-export * from './timespan.mjs';
-export * from './util.mjs';
-export * from './speak.mjs';
-export * from './evaluate.mjs';
-export * from './repl.mjs';
-export * from './logger.mjs';
-export * from './time.mjs';
-export * from './draw.mjs';
-export * from './pianoroll.mjs';
-export * from './ui.mjs';
-export { default as drawLine } from './drawLine.mjs';
-export { default as gist } from './gist.js';
+// Fraction: Fraction, drawLine: drawline, gist: gist, logger: logger,
+
+import controls from './controls.mjs';
+import pattern from './pattern.mjs';
+
+import * as draw from './draw.mjs';
+import * as euclid from './euclid.mjs';
+import * as evaluate from './evaluate.mjs';
+import * as hap from './hap.mjs';
+import * as repl from './repl.mjs';
+import * as pianoroll from './pianoroll.mjs';
+import * as signal from './signal.mjs';
+import * as speak from './speak.mjs';
+import * as state from './state.mjs';
+import * as time from './time.mjs';
+import * as timespan from './timespan.mjs';
+import * as ui from './ui.mjs';
+import * as util from './util.mjs';
+
+const core = { ...controls, ...pattern, ...draw, ...euclid,
+ ...evaluate, ...hap, ...logger, ...repl, ...pianoroll, ...signal, ...speak,
+ ...state, ...time, ...timespan, ...ui, ...util
+ };
+export default core;
+
// below won't work with runtime.mjs (json import fails)
/* import * as p from './package.json';
export const version = p.version; */
diff --git a/packages/core/pianoroll.mjs b/packages/core/pianoroll.mjs
index c383dfe2c..94ad716ec 100644
--- a/packages/core/pianoroll.mjs
+++ b/packages/core/pianoroll.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern } from './index.mjs';
-const { Pattern } = pattern;
+import core from './index.mjs';
+const { Pattern } = core;
const scale = (normalized, min, max) => normalized * (max - min) + min;
const getValue = (e) => {
diff --git a/packages/core/speak.mjs b/packages/core/speak.mjs
index 96c8f8a78..a997762a9 100644
--- a/packages/core/speak.mjs
+++ b/packages/core/speak.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern } from './index.mjs';
-const {Pattern, patternify2} = pattern;
+import core from './index.mjs';
+const {Pattern, patternify2} = core;
let synth;
try {
diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs
index 036053bc2..556cc914b 100644
--- a/packages/core/test/pattern.test.mjs
+++ b/packages/core/test/pattern.test.mjs
@@ -8,22 +8,7 @@ import Fraction from 'fraction.js';
import { describe, it, expect } from 'vitest';
-import { pattern,
- TimeSpan,
- Hap,
- State,
- saw,
- saw2,
- isaw,
- isaw2,
- sine,
- sine2,
- square,
- square2,
- tri,
- tri2,
- time,
- } from '../index.mjs';
+import core from '../index.mjs';
const {
Pattern,
@@ -46,7 +31,20 @@ const {
id,
ply,
rev,
-} = pattern;
+ TimeSpan,
+ Hap,
+ State,
+ saw,
+ saw2,
+ isaw,
+ isaw2,
+ sine,
+ sine2,
+ square,
+ square2,
+ tri,
+ tri2,
+ time} = core;
import { steady } from '../signal.mjs';
diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs
index 10ece6416..eab353633 100644
--- a/packages/midi/midi.mjs
+++ b/packages/midi/midi.mjs
@@ -5,8 +5,8 @@ This program is free software: you can redistribute it and/or modify it under th
*/
import * as _WebMidi from 'webmidi';
-import { pattern, logger } from '@strudel.cycles/core';
-const { Pattern, isPattern, isNote, getPlayableNoteValue } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern, isPattern, isNote, getPlayableNoteValue, logger } = core;
import { getAudioContext } from '@strudel.cycles/webaudio';
// if you use WebMidi from outside of this package, make sure to import that instance:
diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs
index a9a28e52b..93261c563 100644
--- a/packages/osc/osc.mjs
+++ b/packages/osc/osc.mjs
@@ -5,8 +5,8 @@ This program is free software: you can redistribute it and/or modify it under th
*/
import OSC from 'osc-js';
-import { logger, parseNumeral, pattern } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern, logger, parseNumeral } = core;
let connection; // Promise
function connect() {
diff --git a/packages/serial/serial.mjs b/packages/serial/serial.mjs
index 8d7785bcd..19077bf1b 100644
--- a/packages/serial/serial.mjs
+++ b/packages/serial/serial.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern } from '@strudel.cycles/core';
-const { Pattern, isPattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern, isPattern } = core;
var serialWriter;
var choosing = false;
diff --git a/packages/soundfonts/sfumato.mjs b/packages/soundfonts/sfumato.mjs
index d9770b1e8..f1d6cfb4e 100644
--- a/packages/soundfonts/sfumato.mjs
+++ b/packages/soundfonts/sfumato.mjs
@@ -1,5 +1,5 @@
-import { pattern } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import strudel from '@strudel.cycles/core';
+const { Pattern } = strudel;
import { loadSoundfont as _loadSoundfont, startPresetNote } from 'sfumato';
diff --git a/packages/tonal/test/tonal.test.mjs b/packages/tonal/test/tonal.test.mjs
index cb293cf39..d7ed53243 100644
--- a/packages/tonal/test/tonal.test.mjs
+++ b/packages/tonal/test/tonal.test.mjs
@@ -7,8 +7,8 @@ This program is free software: you can redistribute it and/or modify it under th
// import { strict as assert } from 'assert';
import '../tonal.mjs'; // need to import this to add prototypes
-import { pattern } from '@strudel.cycles/core';
-const { pure } = pattern;
+import core from '@strudel.cycles/core';
+const { pure } = core;
import { describe, it, expect } from 'vitest';
describe('tonal', () => {
diff --git a/packages/tonal/tonal.mjs b/packages/tonal/tonal.mjs
index 973eeb437..e4ff0aa0f 100644
--- a/packages/tonal/tonal.mjs
+++ b/packages/tonal/tonal.mjs
@@ -5,8 +5,8 @@ This program is free software: you can redistribute it and/or modify it under th
*/
import { Note, Interval, Scale } from '@tonaljs/tonal';
-import { pattern, mod } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern, pattern, mod } = core;
// transpose note inside scale by offset steps
// function scaleOffset(scale: string, offset: number, note: string) {
diff --git a/packages/tonal/voicings.mjs b/packages/tonal/voicings.mjs
index 62d83457f..cb0edc50b 100644
--- a/packages/tonal/voicings.mjs
+++ b/packages/tonal/voicings.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern, Hap } from '@strudel.cycles/core';
-const { Pattern, stack, reify } = pattern
+import core from '@strudel.cycles/core';
+const { Pattern, stack, reify, Hap } = core
import _voicings from 'chord-voicings';
const { dictionaryVoicing, minTopNoteDiff, lefthand } = _voicings.default || _voicings; // parcel module resolution fuckup
diff --git a/packages/tone/test/tone.test.mjs b/packages/tone/test/tone.test.mjs
index 586b11931..9c78dc2e0 100644
--- a/packages/tone/test/tone.test.mjs
+++ b/packages/tone/test/tone.test.mjs
@@ -5,8 +5,8 @@ This program is free software: you can redistribute it and/or modify it under th
*/
import '../tone.mjs';
-import { pattern } from '@strudel.cycles/core';
-const { pure } = pattern;
+import strudel from '@strudel.cycles/core';
+const { pure } = strudel;
import { describe, it, expect } from 'vitest';
describe('tone', () => {
diff --git a/packages/tone/tone.mjs b/packages/tone/tone.mjs
index 17f029fb6..a11277d19 100644
--- a/packages/tone/tone.mjs
+++ b/packages/tone/tone.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern } = core;
import * as _Tone from 'tone';
diff --git a/packages/webaudio/webaudio.mjs b/packages/webaudio/webaudio.mjs
index 561ee9980..4ebc9116c 100644
--- a/packages/webaudio/webaudio.mjs
+++ b/packages/webaudio/webaudio.mjs
@@ -4,13 +4,12 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-// import { Pattern, getFrequency, patternify2 } from '@strudel.cycles/core';
-import * as strudel from '@strudel.cycles/core';
+import strudel from '@strudel.cycles/core';
import { fromMidi, logger, toMidi } from '@strudel.cycles/core';
import './feedbackdelay.mjs';
import './reverb.mjs';
import { getSampleBufferSource } from './sampler.mjs';
-const { Pattern } = strudel.pattern;
+const { Pattern } = strudel;
import './vowel.mjs';
import workletsUrl from './worklets.mjs?url';
diff --git a/packages/xen/tune.mjs b/packages/xen/tune.mjs
index 1429edfcc..5d693e969 100644
--- a/packages/xen/tune.mjs
+++ b/packages/xen/tune.mjs
@@ -5,8 +5,8 @@ This program is free software: you can redistribute it and/or modify it under th
*/
import Tune from './tunejs.js';
-import { pattern } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern } = core;
Pattern.prototype._tune = function (scale, tonic = 220) {
const tune = new Tune();
diff --git a/packages/xen/xen.mjs b/packages/xen/xen.mjs
index 63e1ee44f..b05fa8e09 100644
--- a/packages/xen/xen.mjs
+++ b/packages/xen/xen.mjs
@@ -4,8 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { pattern, mod } from '@strudel.cycles/core';
-const { Pattern } = pattern;
+import core from '@strudel.cycles/core';
+const { Pattern, mod } = core;
export function edo(name) {
if (!/^[1-9]+[0-9]*edo$/.test(name)) {
diff --git a/repl/src/App.jsx b/repl/src/App.jsx
index 0886bd115..a2aaddd6d 100644
--- a/repl/src/App.jsx
+++ b/repl/src/App.jsx
@@ -4,7 +4,8 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import { cleanupDraw, cleanupUi, controls, evalScope, logger, pattern } from '@strudel.cycles/core';
+import core from '@strudel.cycles/core';
+const { cleanupDraw, cleanupUi, evalScope, logger } = core;
import { CodeMirror, cx, flash, useHighlighting, useStrudel } from '@strudel.cycles/react';
import {
getAudioContext,
@@ -46,8 +47,7 @@ const modules = [
evalScope(
// Tone,
- controls, // sadly, this cannot be exported from core direclty
- pattern,
+ core,
{ WebDirt },
...modules,
);