import { type ScriptSkeleton } from '../api/ScriptApi';
import { type ExportMetaData } from '../ops/OpsTypes';
import { State } from '../shared/State';
export type Script = {
    /**
     * Create an empty script export template
     * @returns {ScriptExportInterface} an empty script export template
     */
    createScriptExportTemplate(): ScriptExportInterface;
    /**
     * Read all scripts
     * @returns {Promise<ScriptSkeleton[]>} a promise that resolves to an array of script objects
     */
    readScripts(): Promise<ScriptSkeleton[]>;
    /**
     * Get the names of library scripts required by the input script object
     *
     * @param {ScriptSkeleton} scriptObj the script object
     * @returns an array of required library script names
     */
    getLibraryScriptNames(scriptObj: ScriptSkeleton): string[];
    /**
     * Read script
     * @param {string} scriptId script id
     * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
     */
    readScript(scriptId: string): Promise<ScriptSkeleton>;
    /**
     * Read script by name
     * @param {string} scriptName name of the script
     * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
     */
    readScriptByName(scriptName: string): Promise<ScriptSkeleton>;
    /**
     * Create script
     * @param {string} scriptId script id
     * @param {string} scriptName name of the script
     * @param {ScriptSkeleton} scriptData script object
     * @returns {Promise<ScriptSkeleton>} a status object
     */
    createScript(scriptId: string, scriptName: string, scriptData: ScriptSkeleton): Promise<ScriptSkeleton>;
    /**
     * Create or update script
     * @param {string} scriptId script id
     * @param {ScriptSkeleton} scriptData script object
     * @returns {Promise<ScriptSkeleton>} a status object
     */
    updateScript(scriptId: string, scriptData: ScriptSkeleton): Promise<ScriptSkeleton>;
    /**
     * Delete script
     * @param {string} scriptId script id
     * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
     */
    deleteScript(scriptId: string): Promise<ScriptSkeleton>;
    /**
     * Delete script by name
     * @param {String} scriptName script name
     * @returns {Promise<ScriptSkeleton>} a promise that resolves to a script object
     */
    deleteScriptByName(scriptName: string): Promise<ScriptSkeleton>;
    /**
     * Delete all non-default scripts
     * @returns {Promise<ScriptSkeleton[]>>} a promise that resolves to an array of script objects
     */
    deleteScripts(): Promise<ScriptSkeleton[]>;
    /**
     * Export all scripts
     * @param {ScriptExportOptions} options script export options
     * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
     */
    exportScripts(options?: ScriptExportOptions): Promise<ScriptExportInterface>;
    /**
     * Export script by id
     * @param {string} scriptId script uuid
     * @param {ScriptExportOptions} options script export options
     * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
     */
    exportScript(scriptId: string, options?: ScriptExportOptions): Promise<ScriptExportInterface>;
    /**
     * Export script by name
     * @param {string} scriptName script name
     * @param {ScriptExportOptions} options script export options
     * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
     */
    exportScriptByName(scriptName: string, options?: ScriptExportOptions): Promise<ScriptExportInterface>;
    /**
     * Import scripts
     * @param {string} scriptId Optional id of script. If supplied, only the script of that id is imported. Takes priority over scriptName if both are provided.
     * @param {string} scriptName Optional name of script. If supplied, only the script of that name is imported
     * @param {ScriptExportInterface} importData Script import data
     * @param {ScriptImportOptions} options Script import options
     * @param {boolean} validate If true, validates Javascript scripts to ensure no errors exist in them. Default: false
     * @returns {Promise<ScriptSkeleton[]>} the imported scripts
     */
    importScripts(scriptId: string, scriptName: string, importData: ScriptExportInterface, options?: ScriptImportOptions, validate?: boolean): Promise<ScriptSkeleton[]>;
    /**
     * Get all scripts
     * @returns {Promise<ScriptSkeleton[]>} a promise that resolves to an array of script objects
     * @deprecated since v2.0.0 use {@link Script.readScripts | readScripts} instead
     * ```javascript
     * readScripts(): Promise<ScriptSkeleton[]>
     * ```
     * @group Deprecated
     */
    getScripts(): Promise<ScriptSkeleton[]>;
    /**
     * Get script
     * @param {string} scriptId script id
     * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
     * @deprecated since v2.0.0 use {@link Script.readScript | readScript} instead
     * ```javascript
     * readScript(scriptName: string): Promise<ScriptSkeleton>
     * ```
     * @group Deprecated
     */
    getScript(scriptId: string): Promise<ScriptSkeleton>;
    /**
     * Get script by name
     * @param {string} scriptName name of the script
     * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
     * @deprecated since v2.0.0 use {@link Script.readScriptByName | readScriptByName} instead
     * ```javascript
     * readScriptByName(scriptName: string): Promise<ScriptSkeleton>
     * ```
     * @group Deprecated
     */
    getScriptByName(scriptName: string): Promise<ScriptSkeleton>;
    /**
     * Create or update script
     * @param {string} scriptId script uuid
     * @param {ScriptSkeleton} scriptData script object
     * @returns {Promise<ScriptSkeleton>} a status object
     * @deprecated since v2.0.0 use {@link Script.updateScript | updateScript} or {@link Script.createScript | createScript} instead
     * ```javascript
     * updateScript(scriptId: string, scriptData: ScriptSkeleton): Promise<ScriptSkeleton>
     * createScript(scriptId: string, scriptName: string, scriptData: ScriptSkeleton): Promise<ScriptSkeleton>
     * ```
     * @group Deprecated
     */
    putScript(scriptId: string, scriptData: ScriptSkeleton): Promise<ScriptSkeleton>;
};
declare const _default: (state: State) => Script;
export default _default;
export interface ScriptExportInterface {
    meta?: ExportMetaData;
    script: Record<string, ScriptSkeleton>;
}
/**
 * Script import options
 */
export interface ScriptImportOptions {
    /**
     * Include dependency (library) scripts in export
     */
    deps: boolean;
    /**
     * Generate new UUIDs for all scripts during import.
     */
    reUuid: boolean;
    /**
     * Include default scripts in import if true
     */
    includeDefault: boolean;
}
/**
 * Script export options
 */
export interface ScriptExportOptions {
    /**
     * Include dependency (library) scripts in export
     */
    deps: boolean;
    /**
     * Include default scripts in export if true
     */
    includeDefault: boolean;
    /**
     * Use string arrays to store script code
     */
    useStringArrays: boolean;
}
/**
 * Create an empty script export template
 * @returns {ScriptExportInterface} an empty script export template
 */
export declare function createScriptExportTemplate({ state, }: {
    state: State;
}): ScriptExportInterface;
/**
 * Get all scripts
 * @returns {Promise<ScriptSkeleton[]>} a promise that resolves to an array of script objects
 */
export declare function readScripts({ state, }: {
    state: State;
}): Promise<ScriptSkeleton[]>;
/**
 * Get the names of library scripts required by the input script object
 *
 * @param {ScriptSkeleton} scriptObj the script object
 * @returns {string[]} an array of required library script names
 */
export declare function getLibraryScriptNames(scriptObj: ScriptSkeleton): string[];
/**
 * Gets all library scripts for a given script recursively
 *
 * @param {ScriptSkeleton} scriptData the script object
 * @returns {ScriptSkeleton[]} all the library scripts needed for the given script
 */
export declare function getLibraryScripts({ scriptData, state, }: {
    scriptData: ScriptSkeleton;
    state: State;
}): Promise<ScriptSkeleton[]>;
/**
 * Get script
 *
 * @param {string} scriptId the script id
 * @returns {Promise<ScriptSkeleton>} a promise that resolves to an array of script objects
 */
export declare function readScript({ scriptId, state, }: {
    scriptId: string;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Get script by name
 * @param {string} scriptName name of the script
 * @returns {Promise<ScriptSkeleton>} promise that resolves to a script object
 */
export declare function readScriptByName({ scriptName, state, }: {
    scriptName: string;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Create script
 * @param {string} scriptId the script id
 * @param {string} scriptName the script name
 * @param {ScriptSkeleton} scriptData script object
 * @returns {Promise<ScriptSkeleton>} a promise resolving to a script object
 */
export declare function createScript({ scriptId, scriptName, scriptData, state, }: {
    scriptId: string;
    scriptName: string;
    scriptData: ScriptSkeleton;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Create or update script
 * @param {string} scriptId script uuid
 * @param {ScriptSkeleton} scriptData script object
 * @returns {Promise<ScriptSkeleton>} a status object
 */
export declare function updateScript({ scriptId, scriptData, state, }: {
    scriptId: string;
    scriptData: ScriptSkeleton;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Delete script
 * @param {string} scriptId script uuid
 * @returns {Promise<ScriptSkeleton>} a promise resolving to a script object
 */
export declare function deleteScript({ scriptId, state, }: {
    scriptId: string;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Delete script by name
 * @param {String} scriptName script name
 * @returns {Promise<ScriptSkeleton>} a promise that resolves to a script object
 */
export declare function deleteScriptByName({ scriptName, state, }: {
    scriptName: string;
    state: State;
}): Promise<ScriptSkeleton>;
/**
 * Delete all non-default scripts
 * @returns {Promise<ScriptSkeleton[]>>} a promise that resolves to an array of script objects
 */
export declare function deleteScripts({ state, }: {
    state: State;
}): Promise<ScriptSkeleton[]>;
/**
 * Export script by id
 *
 * @param {string} scriptId script uuid
 * @param {ScriptExportOptions} options script export options
 * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
 */
export declare function exportScript({ scriptId, options, state, }: {
    scriptId: string;
    options?: ScriptExportOptions;
    state: State;
}): Promise<ScriptExportInterface>;
/**
 * Export script by name
 *
 * @param {string} scriptName script name
 * @param {ScriptExportOptions} options script export options
 * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
 */
export declare function exportScriptByName({ scriptName, options, state, }: {
    scriptName: string;
    options?: ScriptExportOptions;
    state: State;
}): Promise<ScriptExportInterface>;
/**
 * Export all scripts
 *
 * @param {ScriptExportOptions} options script export options
 * @returns {Promise<ScriptExportInterface>} a promise that resolved to a ScriptExportInterface object
 */
export declare function exportScripts({ options, state, }: {
    options?: ScriptExportOptions;
    state: State;
}): Promise<ScriptExportInterface>;
/**
 * Import scripts
 * @param {object} params Params object.
 * @param {string} params.scriptId Optional id of script. If supplied, only the script of that id is imported. Takes priority over scriptName if both are provided.
 * @param {string} params.scriptName Optional name of script. If supplied, only the script of that name is imported
 * @param {ScriptExportInterface} params.importData Script import data
 * @param {ScriptImportOptions} params.options Script import options
 * @param {boolean} params.validate If true, validates Javascript scripts to ensure no errors exist in them. Default: false
 * @returns {Promise<ScriptSkeleton[]>} the imported scripts
 */
export declare function importScripts({ scriptId, scriptName, importData, options, validate, state, }: {
    scriptId?: string;
    scriptName?: string;
    importData: ScriptExportInterface;
    options?: ScriptImportOptions;
    validate?: boolean;
    state: State;
}): Promise<ScriptSkeleton[]>;
//# sourceMappingURL=ScriptOps.d.ts.map