blob: 3c634a5309ef81aa038559f93b78de54aacdf30d [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#ifdef _MSC_VER
#pragma once
#endif // _MSC_VER
#ifndef _CHAKRACOMMONWINDOWS_H_
#define _CHAKRACOMMONWINDOWS_H_
/// <summary>
/// Called by the runtime to load the source code of the serialized script.
/// The caller must keep the script buffer valid until the JsSerializedScriptUnloadCallback.
/// This callback is only supported by the Win32 version of the API
/// </summary>
/// <param name="sourceContext">The context passed to Js[Parse|Run]SerializedScriptWithCallback</param>
/// <param name="scriptBuffer">The script returned.</param>
/// <returns>
/// true if the operation succeeded, false otherwise.
/// </returns>
typedef bool (CHAKRA_CALLBACK * JsSerializedScriptLoadSourceCallback)(_In_ JsSourceContext sourceContext, _Outptr_result_z_ const WCHAR** scriptBuffer);
/// <summary>
/// Parses a script and returns a function representing the script.
/// </summary>
/// <remarks>
/// Requires an active script context.
/// </remarks>
/// <param name="script">The script to parse.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">A function representing the script code.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsParseScript(
_In_z_ const wchar_t *script,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef *result);
/// <summary>
/// Parses a script and returns a function representing the script.
/// </summary>
/// <remarks>
/// Requires an active script context.
/// </remarks>
/// <param name="script">The script to parse.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="parseAttributes">Attribute mask for parsing the script</param>
/// <param name="result">A function representing the script code.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsParseScriptWithAttributes(
_In_z_ const wchar_t *script,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_In_ JsParseScriptAttributes parseAttributes,
_Out_ JsValueRef *result);
/// <summary>
/// Executes a script.
/// </summary>
/// <remarks>
/// Requires an active script context.
/// </remarks>
/// <param name="script">The script to run.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">The result of the script, if any. This parameter can be null.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsRunScript(
_In_z_ const wchar_t *script,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef *result);
/// <summary>
/// Executes a module.
/// </summary>
/// <remarks>
/// Requires an active script context.
/// </remarks>
/// <param name="script">The module script to parse and execute.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the module script came from.</param>
/// <param name="result">The result of executing the module script, if any. This parameter can be null.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsExperimentalApiRunModule(
_In_z_ const wchar_t *script,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef *result);
/// <summary>
/// Serializes a parsed script to a buffer than can be reused.
/// </summary>
/// <remarks>
/// <para>
/// <c>JsSerializeScript</c> parses a script and then stores the parsed form of the script in a
/// runtime-independent format. The serialized script then can be deserialized in any
/// runtime without requiring the script to be re-parsed.
/// </para>
/// <para>
/// Requires an active script context.
/// </para>
/// </remarks>
/// <param name="script">The script to serialize.</param>
/// <param name="buffer">The buffer to put the serialized script into. Can be null.</param>
/// <param name="bufferSize">
/// On entry, the size of the buffer, in bytes; on exit, the size of the buffer, in bytes,
/// required to hold the serialized script.
/// </param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsSerializeScript(
_In_z_ const wchar_t *script,
_Out_writes_to_opt_(*bufferSize, *bufferSize) BYTE *buffer,
_Inout_ unsigned int *bufferSize);
/// <summary>
/// Parses a serialized script and returns a function representing the script.
/// Provides the ability to lazy load the script source only if/when it is needed.
/// </summary>
/// <remarks>
/// <para>
/// Requires an active script context.
/// </para>
/// <para>
/// The runtime will hold on to the buffer until all instances of any functions created from
/// the buffer are garbage collected. It will then call scriptUnloadCallback to inform the
/// caller it is safe to release.
/// </para>
/// </remarks>
/// <param name="scriptLoadCallback">Callback called when the source code of the script needs to be loaded.</param>
/// <param name="scriptUnloadCallback">Callback called when the serialized script and source code are no longer needed.</param>
/// <param name="buffer">The serialized script.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// This context will passed into scriptLoadCallback and scriptUnloadCallback.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">A function representing the script code.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsParseSerializedScriptWithCallback(
_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback,
_In_ JsSerializedScriptUnloadCallback scriptUnloadCallback,
_In_ BYTE *buffer,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef * result);
/// <summary>
/// Runs a serialized script.
/// Provides the ability to lazy load the script source only if/when it is needed.
/// </summary>
/// <remarks>
/// <para>
/// Requires an active script context.
/// </para>
/// <para>
/// The runtime will hold on to the buffer until all instances of any functions created from
/// the buffer are garbage collected. It will then call scriptUnloadCallback to inform the
/// caller it is safe to release.
/// </para>
/// </remarks>
/// <param name="scriptLoadCallback">Callback called when the source code of the script needs to be loaded.</param>
/// <param name="scriptUnloadCallback">Callback called when the serialized script and source code are no longer needed.</param>
/// <param name="buffer">The serialized script.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// This context will passed into scriptLoadCallback and scriptUnloadCallback.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">
/// The result of running the script, if any. This parameter can be null.
/// </param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsRunSerializedScriptWithCallback(
_In_ JsSerializedScriptLoadSourceCallback scriptLoadCallback,
_In_ JsSerializedScriptUnloadCallback scriptUnloadCallback,
_In_ BYTE *buffer,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_opt_ JsValueRef * result);
/// <summary>
/// Parses a serialized script and returns a function representing the script.
/// </summary>
/// <remarks>
/// <para>
/// Requires an active script context.
/// </para>
/// <para>
/// The runtime will hold on to the buffer until all instances of any functions created from
/// the buffer are garbage collected.
/// </para>
/// </remarks>
/// <param name="script">The script to parse.</param>
/// <param name="buffer">The serialized script.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">A function representing the script code.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsParseSerializedScript(
_In_z_ const wchar_t *script,
_In_ BYTE *buffer,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef *result);
/// <summary>
/// Runs a serialized script.
/// </summary>
/// <remarks>
/// <para>
/// Requires an active script context.
/// </para>
/// <para>
/// The runtime will hold on to the buffer until all instances of any functions created from
/// the buffer are garbage collected.
/// </para>
/// </remarks>
/// <param name="script">The source code of the serialized script.</param>
/// <param name="buffer">The serialized script.</param>
/// <param name="sourceContext">
/// A cookie identifying the script that can be used by debuggable script contexts.
/// </param>
/// <param name="sourceUrl">The location the script came from.</param>
/// <param name="result">
/// The result of running the script, if any. This parameter can be null.
/// </param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsRunSerializedScript(
_In_z_ const wchar_t *script,
_In_ BYTE *buffer,
_In_ JsSourceContext sourceContext,
_In_z_ const wchar_t *sourceUrl,
_Out_ JsValueRef *result);
/// <summary>
/// Gets the property ID associated with the name.
/// </summary>
/// <remarks>
/// <para>
/// Property IDs are specific to a context and cannot be used across contexts.
/// </para>
/// <para>
/// Requires an active script context.
/// </para>
/// </remarks>
/// <param name="name">
/// The name of the property ID to get or create. The name may consist of only digits.
/// </param>
/// <param name="propertyId">The property ID in this runtime for the given name.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsGetPropertyIdFromName(
_In_z_ const wchar_t *name,
_Out_ JsPropertyIdRef *propertyId);
/// <summary>
/// Gets the name associated with the property ID.
/// </summary>
/// <remarks>
/// <para>
/// Requires an active script context.
/// </para>
/// <para>
/// The returned buffer is valid as long as the runtime is alive and cannot be used
/// once the runtime has been disposed.
/// </para>
/// </remarks>
/// <param name="propertyId">The property ID to get the name of.</param>
/// <param name="name">The name associated with the property ID.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsGetPropertyNameFromId(
_In_ JsPropertyIdRef propertyId,
_Outptr_result_z_ const wchar_t **name);
/// <summary>
/// Creates a string value from a string pointer.
/// </summary>
/// <remarks>
/// Requires an active script context.
/// </remarks>
/// <param name="stringValue">The string pointer to convert to a string value.</param>
/// <param name="stringLength">The length of the string to convert.</param>
/// <param name="value">The new string value.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsPointerToString(
_In_reads_(stringLength) const wchar_t *stringValue,
_In_ size_t stringLength,
_Out_ JsValueRef *value);
/// <summary>
/// Retrieves the string pointer of a string value.
/// </summary>
/// <remarks>
/// <para>
/// This function retrieves the string pointer of a string value. It will fail with
/// <c>JsErrorInvalidArgument</c> if the type of the value is not string. The lifetime
/// of the string returned will be the same as the lifetime of the value it came from, however
/// the string pointer is not considered a reference to the value (and so will not keep it
/// from being collected).
/// </para>
/// <para>
/// Requires an active script context.
/// </para>
/// </remarks>
/// <param name="value">The string value to convert to a string pointer.</param>
/// <param name="stringValue">The string pointer.</param>
/// <param name="stringLength">The length of the string.</param>
/// <returns>
/// The code <c>JsNoError</c> if the operation succeeded, a failure code otherwise.
/// </returns>
CHAKRA_API
JsStringToPointer(
_In_ JsValueRef value,
_Outptr_result_buffer_(*stringLength) const wchar_t **stringValue,
_Out_ size_t *stringLength);
#endif // _CHAKRACOMMONWINDOWS_H_