@tradejs/node 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,6 +64,7 @@ var TS_MODULE_RE = /\.(cts|mts|ts)$/i;
64
64
  var cachedByCwd = /* @__PURE__ */ new Map();
65
65
  var announcedConfigFile = /* @__PURE__ */ new Set();
66
66
  var tsNodeRegistered = false;
67
+ var tsconfigPathsRegisteredByCwd = /* @__PURE__ */ new Set();
67
68
  var getTradejsProjectCwd = (cwd) => {
68
69
  const explicit = String(cwd ?? "").trim();
69
70
  if (explicit) {
@@ -105,6 +106,28 @@ var ensureTsNodeRegistered = async () => {
105
106
  });
106
107
  tsNodeRegistered = true;
107
108
  };
109
+ var ensureTsconfigPathsRegistered = async (cwd = getTradejsProjectCwd()) => {
110
+ const projectRoot = getTradejsProjectCwd(cwd);
111
+ if (tsconfigPathsRegisteredByCwd.has(projectRoot)) {
112
+ return;
113
+ }
114
+ const tsconfigPathsModule = await import("tsconfig-paths");
115
+ const loadConfig = tsconfigPathsModule.loadConfig;
116
+ const register = tsconfigPathsModule.register;
117
+ if (typeof loadConfig !== "function" || typeof register !== "function") {
118
+ return;
119
+ }
120
+ const loadedConfig = loadConfig(projectRoot);
121
+ if (loadedConfig.resultType !== "success") {
122
+ return;
123
+ }
124
+ register({
125
+ baseUrl: loadedConfig.absoluteBaseUrl,
126
+ paths: loadedConfig.paths,
127
+ addMatchAll: false
128
+ });
129
+ tsconfigPathsRegisteredByCwd.add(projectRoot);
130
+ };
108
131
  var toImportSpecifier = (moduleName) => {
109
132
  if (moduleName.startsWith("file://")) {
110
133
  return moduleName;
@@ -132,6 +155,7 @@ var importConfigFile = async (configFilePath) => {
132
155
  if (ext === ".ts" || ext === ".mts") {
133
156
  const requireFn = getRequireFn(import_path.default.dirname(configFilePath));
134
157
  await ensureTsNodeRegistered();
158
+ await ensureTsconfigPathsRegistered(import_path.default.dirname(configFilePath));
135
159
  return requireFn(configFilePath);
136
160
  }
137
161
  return import(
@@ -139,7 +163,7 @@ var importConfigFile = async (configFilePath) => {
139
163
  configFileUrl
140
164
  );
141
165
  };
142
- var importTradejsModule = async (moduleName) => {
166
+ var importTradejsModule = async (moduleName, cwd = getTradejsProjectCwd()) => {
143
167
  const normalized = String(moduleName ?? "").trim();
144
168
  if (!normalized) {
145
169
  return {};
@@ -153,13 +177,15 @@ var importTradejsModule = async (moduleName) => {
153
177
  }
154
178
  }
155
179
  const requireFn = getRequireFn(
156
- import_path.default.isAbsolute(modulePath) ? import_path.default.dirname(modulePath) : getTradejsProjectCwd()
180
+ import_path.default.isAbsolute(modulePath) ? import_path.default.dirname(modulePath) : cwd
157
181
  );
158
182
  if (isTsModulePath(modulePath)) {
159
183
  await ensureTsNodeRegistered();
184
+ await ensureTsconfigPathsRegistered(cwd);
160
185
  return requireFn(modulePath);
161
186
  }
162
187
  if (isBareModuleSpecifier(normalized)) {
188
+ await ensureTsconfigPathsRegistered(cwd);
163
189
  return requireFn(normalized);
164
190
  }
165
191
  try {
@@ -170,6 +196,7 @@ var importTradejsModule = async (moduleName) => {
170
196
  } catch (error) {
171
197
  if (isTsModulePath(modulePath)) {
172
198
  await ensureTsNodeRegistered();
199
+ await ensureTsconfigPathsRegistered(cwd);
173
200
  return requireFn(modulePath);
174
201
  }
175
202
  throw error;
@@ -247,9 +274,24 @@ var loadTradejsConfig = async (cwd = getTradejsProjectCwd()) => {
247
274
  };
248
275
 
249
276
  // src/connectorsRegistry.ts
250
- var connectorCreators = /* @__PURE__ */ new Map();
251
- var providerToConnectorName = /* @__PURE__ */ new Map();
252
- var pluginsLoadPromise = null;
277
+ var createConnectorRegistryState = () => ({
278
+ connectorCreators: /* @__PURE__ */ new Map(),
279
+ providerToConnectorName: /* @__PURE__ */ new Map(),
280
+ pluginsLoadPromise: null
281
+ });
282
+ var registryStateByProjectRoot = /* @__PURE__ */ new Map();
283
+ var getConnectorRegistryState = (cwd = getTradejsProjectCwd()) => {
284
+ const projectRoot = getTradejsProjectCwd(cwd);
285
+ let state = registryStateByProjectRoot.get(projectRoot);
286
+ if (!state) {
287
+ state = createConnectorRegistryState();
288
+ registryStateByProjectRoot.set(projectRoot, state);
289
+ }
290
+ return {
291
+ projectRoot,
292
+ state
293
+ };
294
+ };
253
295
  var BUILTIN_CONNECTOR_NAMES = {
254
296
  ByBit: "ByBit",
255
297
  Binance: "Binance",
@@ -260,7 +302,7 @@ var normalizeProvider = (value) => String(value ?? "").trim().toLowerCase();
260
302
  var toUniqueModules = (modules = []) => [
261
303
  ...new Set(modules.map((moduleName) => moduleName.trim()).filter(Boolean))
262
304
  ];
263
- var findConnectorNameInsensitive = (name) => {
305
+ var findConnectorNameInsensitive = (name, connectorCreators) => {
264
306
  const normalized = name.trim().toLowerCase();
265
307
  if (!normalized) {
266
308
  return null;
@@ -280,7 +322,7 @@ var normalizeProviders = (providers, connectorName) => {
280
322
  }
281
323
  return [normalizeProvider(connectorName)];
282
324
  };
283
- var registerProvider = (provider, connectorName, source) => {
325
+ var registerProvider = (provider, connectorName, source, providerToConnectorName) => {
284
326
  const existing = providerToConnectorName.get(provider);
285
327
  if (existing && existing !== connectorName) {
286
328
  import_logger2.logger.warn(
@@ -293,7 +335,7 @@ var registerProvider = (provider, connectorName, source) => {
293
335
  }
294
336
  providerToConnectorName.set(provider, connectorName);
295
337
  };
296
- var registerEntry = (entry, source) => {
338
+ var registerEntry = (entry, source, state) => {
297
339
  const connectorName = String(entry?.name ?? "").trim();
298
340
  if (!connectorName) {
299
341
  import_logger2.logger.warn("Skip connector entry without name from %s", source);
@@ -307,7 +349,10 @@ var registerEntry = (entry, source) => {
307
349
  );
308
350
  return;
309
351
  }
310
- const existingByName = findConnectorNameInsensitive(connectorName);
352
+ const existingByName = findConnectorNameInsensitive(
353
+ connectorName,
354
+ state.connectorCreators
355
+ );
311
356
  if (existingByName) {
312
357
  import_logger2.logger.warn(
313
358
  'Skip duplicate connector "%s" from %s: already registered as %s',
@@ -317,15 +362,20 @@ var registerEntry = (entry, source) => {
317
362
  );
318
363
  return;
319
364
  }
320
- connectorCreators.set(connectorName, entry.creator);
365
+ state.connectorCreators.set(connectorName, entry.creator);
321
366
  const providers = normalizeProviders(entry.providers, connectorName);
322
367
  for (const provider of providers) {
323
- registerProvider(provider, connectorName, source);
368
+ registerProvider(
369
+ provider,
370
+ connectorName,
371
+ source,
372
+ state.providerToConnectorName
373
+ );
324
374
  }
325
375
  };
326
- var registerEntries = (entries, source) => {
376
+ var registerEntries = (entries, source, state) => {
327
377
  for (const entry of entries) {
328
- registerEntry(entry, source);
378
+ registerEntry(entry, source, state);
329
379
  }
330
380
  };
331
381
  var extractConnectorPluginDefinition = (moduleExport) => {
@@ -346,110 +396,130 @@ var extractConnectorPluginDefinition = (moduleExport) => {
346
396
  }
347
397
  return null;
348
398
  };
349
- var importConnectorPluginModule = async (moduleName) => {
399
+ var importConnectorPluginModule = async (moduleName, cwd = getTradejsProjectCwd()) => {
350
400
  if (typeof importTradejsModule === "function") {
351
- return importTradejsModule(moduleName);
401
+ return importTradejsModule(moduleName, cwd);
352
402
  }
353
403
  return import(
354
404
  /* webpackIgnore: true */
355
405
  moduleName
356
406
  );
357
407
  };
358
- var ensureConnectorPluginsLoaded = async () => {
359
- if (pluginsLoadPromise) {
360
- return pluginsLoadPromise;
361
- }
362
- pluginsLoadPromise = (async () => {
363
- const config = await loadTradejsConfig();
364
- const connectorModules = toUniqueModules(config.connectors);
365
- if (!connectorModules.length) {
366
- return;
367
- }
368
- for (const moduleName of connectorModules) {
369
- try {
370
- const resolvedModuleName = resolvePluginModuleSpecifier(moduleName);
371
- const moduleExport = await importConnectorPluginModule(resolvedModuleName);
372
- const pluginDefinition = extractConnectorPluginDefinition(moduleExport);
373
- if (!pluginDefinition) {
408
+ var ensureConnectorPluginsLoaded = async (cwd = getTradejsProjectCwd()) => {
409
+ const { projectRoot, state } = getConnectorRegistryState(cwd);
410
+ if (!state.pluginsLoadPromise) {
411
+ state.pluginsLoadPromise = (async () => {
412
+ const config = await loadTradejsConfig(projectRoot);
413
+ const connectorModules = toUniqueModules(config.connectors);
414
+ if (!connectorModules.length) {
415
+ return;
416
+ }
417
+ for (const moduleName of connectorModules) {
418
+ try {
419
+ const resolvedModuleName = resolvePluginModuleSpecifier(
420
+ moduleName,
421
+ projectRoot
422
+ );
423
+ const moduleExport = await importConnectorPluginModule(
424
+ resolvedModuleName,
425
+ projectRoot
426
+ );
427
+ const pluginDefinition = extractConnectorPluginDefinition(moduleExport);
428
+ if (!pluginDefinition) {
429
+ import_logger2.logger.warn(
430
+ 'Skip connector plugin "%s": export { connectorEntries } is missing',
431
+ moduleName
432
+ );
433
+ continue;
434
+ }
435
+ registerEntries(pluginDefinition.connectorEntries, moduleName, state);
436
+ } catch (error) {
374
437
  import_logger2.logger.warn(
375
- 'Skip connector plugin "%s": export { connectorEntries } is missing',
376
- moduleName
438
+ 'Failed to load connector plugin "%s": %s',
439
+ moduleName,
440
+ String(error)
377
441
  );
378
- continue;
379
442
  }
380
- registerEntries(pluginDefinition.connectorEntries, moduleName);
381
- } catch (error) {
382
- import_logger2.logger.warn(
383
- 'Failed to load connector plugin "%s": %s',
384
- moduleName,
385
- String(error)
386
- );
387
443
  }
388
- }
389
- })();
390
- return pluginsLoadPromise;
444
+ })();
445
+ }
446
+ await state.pluginsLoadPromise;
391
447
  };
392
- var getConnectorCreatorByName = async (connectorName) => {
393
- await ensureConnectorPluginsLoaded();
448
+ var getConnectorCreatorByName = async (connectorName, cwd = getTradejsProjectCwd()) => {
449
+ await ensureConnectorPluginsLoaded(cwd);
450
+ const { state } = getConnectorRegistryState(cwd);
394
451
  const raw = String(connectorName ?? "").trim();
395
452
  if (!raw) {
396
453
  return void 0;
397
454
  }
398
- const direct = connectorCreators.get(raw);
455
+ const direct = state.connectorCreators.get(raw);
399
456
  if (direct) {
400
457
  return direct;
401
458
  }
402
- const existing = findConnectorNameInsensitive(raw);
459
+ const existing = findConnectorNameInsensitive(raw, state.connectorCreators);
403
460
  if (!existing) {
404
461
  return void 0;
405
462
  }
406
- return connectorCreators.get(existing);
463
+ return state.connectorCreators.get(existing);
407
464
  };
408
- var getConnectorNameByProvider = async (provider) => {
409
- await ensureConnectorPluginsLoaded();
465
+ var getConnectorNameByProvider = async (provider, cwd = getTradejsProjectCwd()) => {
466
+ await ensureConnectorPluginsLoaded(cwd);
467
+ const { state } = getConnectorRegistryState(cwd);
410
468
  const normalized = normalizeProvider(provider);
411
469
  if (!normalized) {
412
470
  return void 0;
413
471
  }
414
- return providerToConnectorName.get(normalized);
472
+ return state.providerToConnectorName.get(normalized);
415
473
  };
416
- var getConnectorCreatorByProvider = async (provider) => {
417
- const connectorName = await getConnectorNameByProvider(provider);
474
+ var getConnectorCreatorByProvider = async (provider, cwd = getTradejsProjectCwd()) => {
475
+ await ensureConnectorPluginsLoaded(cwd);
476
+ const { state } = getConnectorRegistryState(cwd);
477
+ const normalized = normalizeProvider(provider);
478
+ if (!normalized) {
479
+ return void 0;
480
+ }
481
+ const connectorName = state.providerToConnectorName.get(normalized);
418
482
  if (!connectorName) {
419
483
  return void 0;
420
484
  }
421
- return connectorCreators.get(connectorName);
485
+ return state.connectorCreators.get(connectorName);
422
486
  };
423
- var resolveConnectorName = async (providerOrName) => {
487
+ var resolveConnectorName = async (providerOrName, cwd = getTradejsProjectCwd()) => {
488
+ await ensureConnectorPluginsLoaded(cwd);
489
+ const { state } = getConnectorRegistryState(cwd);
424
490
  const raw = String(providerOrName ?? "").trim();
425
491
  if (!raw) {
426
492
  return void 0;
427
493
  }
428
- const byProvider = await getConnectorNameByProvider(raw);
494
+ const byProvider = state.providerToConnectorName.get(normalizeProvider(raw));
429
495
  if (byProvider) {
430
496
  return byProvider;
431
497
  }
432
- const byName = await getConnectorCreatorByName(raw);
433
- if (!byName) {
434
- return void 0;
435
- }
436
- return findConnectorNameInsensitive(raw) ?? void 0;
498
+ return state.connectorCreators.get(raw) && raw ? raw : findConnectorNameInsensitive(raw, state.connectorCreators) ?? void 0;
437
499
  };
438
- var getAvailableConnectorNames = async () => {
439
- await ensureConnectorPluginsLoaded();
440
- return [...connectorCreators.keys()].sort((a, b) => a.localeCompare(b));
500
+ var getAvailableConnectorNames = async (cwd = getTradejsProjectCwd()) => {
501
+ await ensureConnectorPluginsLoaded(cwd);
502
+ const { state } = getConnectorRegistryState(cwd);
503
+ return [...state.connectorCreators.keys()].sort((a, b) => a.localeCompare(b));
441
504
  };
442
- var getAvailableConnectorProviders = async () => {
443
- await ensureConnectorPluginsLoaded();
444
- return [...providerToConnectorName.keys()].sort((a, b) => a.localeCompare(b));
505
+ var getAvailableConnectorProviders = async (cwd = getTradejsProjectCwd()) => {
506
+ await ensureConnectorPluginsLoaded(cwd);
507
+ const { state } = getConnectorRegistryState(cwd);
508
+ return [...state.providerToConnectorName.keys()].sort(
509
+ (a, b) => a.localeCompare(b)
510
+ );
445
511
  };
446
- var registerConnectorEntries = (entries) => {
447
- registerEntries(entries, "runtime");
512
+ var registerConnectorEntries = (entries, cwd = getTradejsProjectCwd()) => {
513
+ const { state } = getConnectorRegistryState(cwd);
514
+ registerEntries(entries, "runtime", state);
448
515
  };
449
- var resetConnectorRegistryCache = () => {
450
- connectorCreators.clear();
451
- providerToConnectorName.clear();
452
- pluginsLoadPromise = null;
516
+ var resetConnectorRegistryCache = (cwd) => {
517
+ const normalizedCwd = String(cwd ?? "").trim();
518
+ if (!normalizedCwd) {
519
+ registryStateByProjectRoot.clear();
520
+ return;
521
+ }
522
+ registryStateByProjectRoot.delete(getTradejsProjectCwd(normalizedCwd));
453
523
  };
454
524
  var DEFAULT_CONNECTOR_NAME = BUILTIN_CONNECTOR_NAMES.ByBit;
455
525
  // Annotate the CommonJS export names for ESM import in node:
@@ -10,8 +10,8 @@ import {
10
10
  registerConnectorEntries,
11
11
  resetConnectorRegistryCache,
12
12
  resolveConnectorName
13
- } from "./chunk-E2QNOA5M.mjs";
14
- import "./chunk-DE7ADBIR.mjs";
13
+ } from "./chunk-CIY64D57.mjs";
14
+ import "./chunk-P2ZUWONT.mjs";
15
15
  import "./chunk-6DZX6EAA.mjs";
16
16
  export {
17
17
  BUILTIN_CONNECTOR_NAMES,
package/dist/pine.d.mts CHANGED
@@ -25,7 +25,6 @@ declare const getPinePlotSeries: (context: PineContextLike, plotName: string) =>
25
25
  declare const getLatestPinePlotValue: (context: PineContextLike, plotName: string) => unknown;
26
26
  declare const asFiniteNumber: (value: unknown) => number | undefined;
27
27
  declare const asPineBoolean: (value: unknown) => boolean;
28
-
29
28
  declare const loadPineScript: (filePath: string, fallback?: string) => string;
30
29
  declare const createLoadPineScript: (baseDir: string) => ((fileNameOrPath: string, fallback?: string) => string);
31
30
  declare const runPineScript: ({ candles, script, symbol, timeframe, inputs, limit, }: RunPineScriptParams) => Promise<PineContextLike>;
package/dist/pine.d.ts CHANGED
@@ -25,7 +25,6 @@ declare const getPinePlotSeries: (context: PineContextLike, plotName: string) =>
25
25
  declare const getLatestPinePlotValue: (context: PineContextLike, plotName: string) => unknown;
26
26
  declare const asFiniteNumber: (value: unknown) => number | undefined;
27
27
  declare const asPineBoolean: (value: unknown) => boolean;
28
-
29
28
  declare const loadPineScript: (filePath: string, fallback?: string) => string;
30
29
  declare const createLoadPineScript: (baseDir: string) => ((fileNameOrPath: string, fallback?: string) => string);
31
30
  declare const runPineScript: ({ candles, script, symbol, timeframe, inputs, limit, }: RunPineScriptParams) => Promise<PineContextLike>;
package/dist/pine.js CHANGED
@@ -41,8 +41,6 @@ __export(pine_exports, {
41
41
  module.exports = __toCommonJS(pine_exports);
42
42
  var import_node_fs = __toESM(require("fs"));
43
43
  var import_node_path = __toESM(require("path"));
44
-
45
- // src/pineShared.ts
46
44
  var getPinePlotSeries = (context, plotName) => {
47
45
  const name = String(plotName || "").trim();
48
46
  if (!name) return [];
@@ -65,8 +63,6 @@ var asPineBoolean = (value) => {
65
63
  if (typeof value === "number") return Number.isFinite(value) && value !== 0;
66
64
  return false;
67
65
  };
68
-
69
- // src/pine.ts
70
66
  var loadPinets = () => {
71
67
  const resolvedPath = require.resolve("pinets");
72
68
  const cjsPath = resolvedPath.includes("pinets.min.browser") ? resolvedPath.replace(/pinets\.min\.browser(\.es)?\.js$/, "pinets.min.cjs") : resolvedPath;
package/dist/pine.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  getPinePlotSeries,
7
7
  loadPineScript,
8
8
  runPineScript
9
- } from "./chunk-OB4CSYDJ.mjs";
9
+ } from "./chunk-7ICOZAKA.mjs";
10
10
  import "./chunk-6DZX6EAA.mjs";
11
11
  export {
12
12
  asFiniteNumber,
@@ -1,15 +1,15 @@
1
1
  import { StrategyManifest, StrategyCreator, StrategyRegistryEntry } from '@tradejs/types';
2
2
 
3
- declare const ensureStrategyPluginsLoaded: () => Promise<void>;
4
- declare const ensureIndicatorPluginsLoaded: () => Promise<void>;
5
- declare const getStrategyCreator: (name: string) => Promise<StrategyCreator | undefined>;
6
- declare const getAvailableStrategyNames: () => Promise<string[]>;
7
- declare const getRegisteredStrategies: () => Record<string, StrategyCreator>;
8
- declare const getRegisteredManifests: () => StrategyManifest[];
9
- declare const getStrategyManifest: (name?: string) => StrategyManifest | undefined;
10
- declare const isKnownStrategy: (name: string) => boolean;
11
- declare const registerStrategyEntries: (entries: readonly StrategyRegistryEntry[]) => void;
12
- declare const resetStrategyRegistryCache: () => void;
3
+ declare const ensureStrategyPluginsLoaded: (cwd?: string) => Promise<void>;
4
+ declare const ensureIndicatorPluginsLoaded: (cwd?: string) => Promise<void>;
5
+ declare const getStrategyCreator: (name: string, cwd?: string) => Promise<StrategyCreator | undefined>;
6
+ declare const getAvailableStrategyNames: (cwd?: string) => Promise<string[]>;
7
+ declare const getRegisteredStrategies: (cwd?: string) => Record<string, StrategyCreator>;
8
+ declare const getRegisteredManifests: (cwd?: string) => StrategyManifest[];
9
+ declare const getStrategyManifest: (name?: string, cwd?: string) => StrategyManifest | undefined;
10
+ declare const isKnownStrategy: (name: string, cwd?: string) => boolean;
11
+ declare const registerStrategyEntries: (entries: readonly StrategyRegistryEntry[], cwd?: string) => void;
12
+ declare const resetStrategyRegistryCache: (cwd?: string) => void;
13
13
  declare const strategies: Record<string, StrategyCreator>;
14
14
 
15
15
  export { ensureIndicatorPluginsLoaded, ensureStrategyPluginsLoaded, getAvailableStrategyNames, getRegisteredManifests, getRegisteredStrategies, getStrategyCreator, getStrategyManifest, isKnownStrategy, registerStrategyEntries, resetStrategyRegistryCache, strategies };
@@ -1,15 +1,15 @@
1
1
  import { StrategyManifest, StrategyCreator, StrategyRegistryEntry } from '@tradejs/types';
2
2
 
3
- declare const ensureStrategyPluginsLoaded: () => Promise<void>;
4
- declare const ensureIndicatorPluginsLoaded: () => Promise<void>;
5
- declare const getStrategyCreator: (name: string) => Promise<StrategyCreator | undefined>;
6
- declare const getAvailableStrategyNames: () => Promise<string[]>;
7
- declare const getRegisteredStrategies: () => Record<string, StrategyCreator>;
8
- declare const getRegisteredManifests: () => StrategyManifest[];
9
- declare const getStrategyManifest: (name?: string) => StrategyManifest | undefined;
10
- declare const isKnownStrategy: (name: string) => boolean;
11
- declare const registerStrategyEntries: (entries: readonly StrategyRegistryEntry[]) => void;
12
- declare const resetStrategyRegistryCache: () => void;
3
+ declare const ensureStrategyPluginsLoaded: (cwd?: string) => Promise<void>;
4
+ declare const ensureIndicatorPluginsLoaded: (cwd?: string) => Promise<void>;
5
+ declare const getStrategyCreator: (name: string, cwd?: string) => Promise<StrategyCreator | undefined>;
6
+ declare const getAvailableStrategyNames: (cwd?: string) => Promise<string[]>;
7
+ declare const getRegisteredStrategies: (cwd?: string) => Record<string, StrategyCreator>;
8
+ declare const getRegisteredManifests: (cwd?: string) => StrategyManifest[];
9
+ declare const getStrategyManifest: (name?: string, cwd?: string) => StrategyManifest | undefined;
10
+ declare const isKnownStrategy: (name: string, cwd?: string) => boolean;
11
+ declare const registerStrategyEntries: (entries: readonly StrategyRegistryEntry[], cwd?: string) => void;
12
+ declare const resetStrategyRegistryCache: (cwd?: string) => void;
13
13
  declare const strategies: Record<string, StrategyCreator>;
14
14
 
15
15
  export { ensureIndicatorPluginsLoaded, ensureStrategyPluginsLoaded, getAvailableStrategyNames, getRegisteredManifests, getRegisteredStrategies, getStrategyCreator, getStrategyManifest, isKnownStrategy, registerStrategyEntries, resetStrategyRegistryCache, strategies };