diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index c3b6f9b92d..619bab842a 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -565,7 +565,7 @@ signals: * restrictions on permissible scale values imposed by the domain. * @function MyAvatar.targetScaleChanged * @param {number} targetScale - The avatar's target scale. - * @returns Signal + * @returns {*} Signal */ void targetScaleChanged(float targetScale); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index fc28ad9e02..ef792dd328 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -2857,14 +2857,24 @@ glm::mat4 AvatarData::getControllerRightHandMatrix() const { * @property {boolean} intersects - <code>true</code> if an avatar is intersected, <code>false</code> if it isn't. * @property {string} avatarID - The ID of the avatar that is intersected. * @property {number} distance - The distance from the ray origin to the intersection. - * @property {string} face - The name of the box face that is intersected; <code>"UNKNOWN_FACE"</code> if mesh was picked - * against. + * @property {string} face - The name of the box face that is intersected; <code>"UNKNOWN_FACE"</code> if mesh was picked against. * @property {Vec3} intersection - The ray intersection point in world coordinates. * @property {Vec3} surfaceNormal - The surface normal at the intersection point. * @property {number} jointIndex - The index of the joint intersected. * @property {SubmeshIntersection} extraInfo - Extra information on the mesh intersected if mesh was picked against, * <code>{}</code> if it wasn't. */ + + /*@jsdoc + * Information about a parabola-to-avatar intersection. + * @typedef {Object} ParabolaToAvatarIntersectionParameters + * @property {PickParabola} pick - The pick used for the intersection calculation. + * @property {Uuid[]} avatarsToInclude - List of avatars to include in the intersection check. + * @property {Uuid[]} avatarsToDiscard - List of avatars to exclude from the intersection check. + * + * @typedef {RayToAvatarIntersectionResult} ParabolaToAvatarIntersectionResult + */ + ScriptValue RayToAvatarIntersectionResultToScriptValue(ScriptEngine* engine, const RayToAvatarIntersectionResult& value) { ScriptValue obj = engine->newObject(); obj.setProperty("intersects", value.intersects); diff --git a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h index 99004f9f41..567dbd0657 100644 --- a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h +++ b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h @@ -116,9 +116,9 @@ class UserInputMapper; * A filter in a {@link Controller.MappingJSONRoute}. * @typedef {object} Controller.MappingJSONFilter * @property {string} type - The name of the filter, being the name of the one of the {@link RouteObject}'s filter methods. - * @property {string} [?] - If the filter method has a first parameter, the property name is the name of that parameter and the + * @property {string} [_1] - If the filter method has a first parameter, the property name is the name of that parameter and the * property value is the value to use. - * @property {string} [?] - If the filter method has a second parameter, the property name is the name of that parameter and + * @property {string} [_2] - If the filter method has a second parameter, the property name is the name of that parameter and * the property value is the value to use. * @example <caption>A hysteresis filter.</caption> * { diff --git a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h index da3e3ec26b..8879d3611b 100644 --- a/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h +++ b/libraries/controllers/src/controllers/impl/RouteBuilderProxy.h @@ -71,7 +71,7 @@ class RouteBuilderProxy : public QObject { * routes using the same input are processed. * <p>This is a QML-specific version of {@link MappingObject#when|when}: use this version in QML files.</p> * @function RouteObject#whenQml - * @param {condition|condition[]} expression - <p>A <code>condition</code> may be a:</p> + * @param { boolean | boolean[] | number | number[] } expression - <p>A <code>condition</code> may be a:</p> * <ul> * <li>A boolean or numeric {@link Controller.Hardware} property, which is evaluated as a boolean.</li> * <li><code>!</code> followed by a {@link Controller.Hardware} property, indicating the logical NOT should be @@ -165,7 +165,7 @@ class RouteBuilderProxy : public QObject { * the input is read only if the condition is <code>true</code>. Thus, if the condition is not met then subsequent * routes using the same input are processed. * @function RouteObject#when - * @param {condition|condition[]} expression - <p>A <code>condition</code> may be a:</p> + * @param { boolean | boolean[] | number | number[] } expression - <p>A <code>condition</code> may be a:</p> * <ul> * <li>A numeric {@link Controller.Hardware} property, which is evaluated as a boolean.</li> * <li><code>!</code> followed by a {@link Controller.Hardware} property to use the logical NOT of the property diff --git a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h index 2412a17d1a..0b615e2647 100644 --- a/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h +++ b/libraries/graphics-scripting/src/graphics-scripting/GraphicsScriptingInterface.h @@ -48,7 +48,7 @@ public slots: * Gets a handle to the model data used for displaying an avatar, 3D entity, or 3D overlay. * <p>Note: The model data may be used for more than one instance of the item displayed in the scene.</p> * @function Graphics.getModel - * @param {UUID} id - The ID of the avatar, 3D entity, or 3D overlay. + * @param {Uuid} id - The ID of the avatar, 3D entity, or 3D overlay. * @returns {GraphicsModel} The model data for the avatar, entity, or overlay, as displayed. This includes the results of * applying any {@link Entities.EntityProperties-Material|Material} entities to the item. * @example <caption>Report some details of your avatar's model.</caption> diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp index 0387b66da4..5c4fae7944 100644 --- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp +++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp @@ -261,7 +261,7 @@ bool scriptable::ScriptableMesh::setVertexProperty(glm::uint32 vertexIndex, cons /*@jsdoc * Called for each vertex when {@link GraphicsMesh.updateVertexAttributes} is called. - * @callback GraphicsMesh~forEachVertextCallback + * @callback GraphicsMesh~forEachVertexCallback * @param {Object<Graphics.BufferTypeName, Graphics.BufferType>} attributes - The attributes of the vertex. * @param {number} index - The vertex index. * @param {object} properties - The properties of the mesh, per {@link GraphicsMesh}. diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h index cb06b39710..de5ba3ac13 100644 --- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h +++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h @@ -116,7 +116,7 @@ namespace scriptable { /*@jsdoc * Gets the value of an attribute for all vertices in the <em>whole</em> mesh (i.e., parent and mesh parts). - * @function GraphicsMeshPArt.queryVertexAttributes + * @function GraphicsMeshPart.queryVertexAttributes * @param {Graphics.BufferTypeName} name - The name of the attribute to get the vertex values of. * @throws Throws an error if the <code>name</code> is invalid or isn't used in the mesh. * @returns {Graphics.BufferType[]} The attribute values for all vertices. @@ -230,7 +230,7 @@ namespace scriptable { /*@jsdoc * Removes an attribute from all vertices in the <em>whole</em> mesh (i.e., parent and mesh parts). * <p>Note: The <code>"position"</code> attribute cannot be removed.</p> - * @function GraphicsMeshPArt.removeAttribute + * @function GraphicsMeshPart.removeAttribute * @param {Graphics.BufferTypeName} name - The name of the attribute to remove. * @returns {boolean} <code>true</code> if the attribute existed and was removed, <code>false</code> otherwise. */ @@ -255,7 +255,7 @@ namespace scriptable { /*@jsdoc * Replaces a mesh part with a copy of another mesh part. * @function GraphicsMeshPart.replaceMeshPartData - * @param {GrphicsMeshPart} source - The mesh part to copy. + * @param {GraphicsMeshPart} source - The mesh part to copy. * @param {Graphics.BufferTypeName[]} [attributes] - The attributes to copy. If not specified, all attributes are * copied from the source. * @throws Throws an error if the mesh part of source mesh part aren't valid. @@ -291,7 +291,7 @@ namespace scriptable { /*@jsdoc * Calls a function for each vertex in the <em>whole</em> mesh (i.e., parent and mesh parts). - * @function GraphicsMeshPArt.forEachVertex + * @function GraphicsMeshPart.forEachVertex * @param {GraphicsMesh~forEachVertexCallback} callback - The function to call for each vertex. * @returns {number} The number of vertices the callback was called for. */ diff --git a/libraries/midi/src/Midi.h b/libraries/midi/src/Midi.h index ee1ba6e8b3..1ebe653734 100644 --- a/libraries/midi/src/Midi.h +++ b/libraries/midi/src/Midi.h @@ -143,8 +143,8 @@ public slots: /*@jsdoc * Unblocks a MIDI device's input or output. * @function Midi.unblockMidiDevice - * @param {string} name- The name of the MIDI device to unblock. - * @param {boolean} output - <code>true</code> to unblock the device's output, <code>false</code> to unblock its input. + * @param {string} name - The name of the MIDI device to unblock. + * @param {boolean} output - <code>true</code> to unblock the device's output, <code>false</code> to unblock its input. */ Q_INVOKABLE void unblockMidiDevice(QString name, bool output); diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 5f87c31b86..44f701b693 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -132,7 +132,8 @@ MiniPromise::Promise AssetClient::cacheInfoRequestAsync(MiniPromise::Promise def * @property {object} [rawHeaders] - The raw headers that are set in the meta data. <em>Not used.</em> * @property {boolean} [saveToDisk] - <code>true</code> if the cache item is allowed to be store on disk, * <code>false</code> if it isn't. - * @property {string} [url|metaDataURL] - The ATP URL of the cached item. + * @property {string} [url] - The ATP URL of the cached item. + * @property {string} [metaDataURL] - The ATP URL of the cached item. */ MiniPromise::Promise AssetClient::queryCacheMetaAsync(const QUrl& url, MiniPromise::Promise deferred) { if (QThread::currentThread() != thread()) { @@ -235,7 +236,7 @@ namespace { * @typedef {object} Assets.SaveToCacheHeaders * @property {string} [expires] - The date and time the cache value expires, in the format: * <code>"ddd, dd MMM yyyy HH:mm:ss"</code>. The default value is an invalid date, representing "never expires". - * @property {string} [last-modified] - The date and time the cache value was last modified, in the format: + * @property {string} ["last-modified"] - The date and time the cache value was last modified, in the format: * <code>"ddd, dd MMM yyyy HH:mm:ss"</code>. The default value is the current date and time. */ /*@jsdoc diff --git a/libraries/physics/src/ObjectDynamic.cpp b/libraries/physics/src/ObjectDynamic.cpp index 4c20bc1e21..cb70059f24 100644 --- a/libraries/physics/src/ObjectDynamic.cpp +++ b/libraries/physics/src/ObjectDynamic.cpp @@ -106,14 +106,14 @@ bool ObjectDynamic::updateArguments(QVariantMap arguments) { * <code>0</code> means that the action should not be deleted. * @property {boolean} isMine=true - <code>true</code> if the action was created during the current client session, * <code>false</code> if it wasn't. <em>Read-only.</em> - * @property {boolean} ::no-motion-state - Is present with a value of <code>true</code> when the entity hasn't been registered + * @property {boolean} 'no-motion-state' - Is present with a value of <code>true</code> when the entity hasn't been registered * with the physics engine yet (e.g., if the action hasn't been properly configured), otherwise the property is * <code>undefined</code>. <em>Read-only.</em> - * @property {boolean} ::active - <code>true</code> when the action is modifying the entity's motion, <code>false</code> + * @property {boolean} 'active' - <code>true</code> when the action is modifying the entity's motion, <code>false</code> * otherwise. Is present once the entity has been registered with the physics engine, otherwise the property is * <code>undefined</code>. * <em>Read-only.</em> - * @property {Entities.PhysicsMotionType} ::motion-type - How the entity moves with the action. Is present once the entity has + * @property {Entities.PhysicsMotionType} 'motion-type' - How the entity moves with the action. Is present once the entity has * been registered with the physics engine, otherwise the property is <code>undefined</code>. <em>Read-only.</em> * * @comment The different action types have additional arguments as follows: diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 0265b5e35b..a419bd73f2 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -45,6 +45,19 @@ typedef QPair<Vec3Pair, Vec4Pair> Vec3PairVec4Pair; typedef QPair<Vec4Pair, glm::vec4> Vec4PairVec4; typedef QPair<Vec4Pair, Vec4Pair> Vec4PairVec4Pair; +/*@jsdoc + * **Note:** This is just scaffolding and has not been properly implemented. + * @typedef {Object} Vec3Pair + * @property {Vec3} first - The first 3D vector. + * @property {Vec3} second - The second 3D vector. + * + * @example <caption>Creating a pair of vec3 objects to represent two 3D vectors.</caption> + * const myVec3Pair = { + * first: new vec3(1.0, 0.0, 0.0), // First vector pointing along the X-axis + * second: new vec3(0.0, 1.0, 0.0) // Second vector pointing along the Y-axis + * }; + */ + inline uint qHash(const Vec2FloatPairPair& v, uint seed) { // multiply by prime numbers greater than the possible size return qHash(v.first.first.x + 5009 * v.first.first.y + 5011 * v.first.second + diff --git a/libraries/script-engine/src/AssetScriptingInterface.cpp b/libraries/script-engine/src/AssetScriptingInterface.cpp index fe11582abf..a37fee33b3 100644 --- a/libraries/script-engine/src/AssetScriptingInterface.cpp +++ b/libraries/script-engine/src/AssetScriptingInterface.cpp @@ -455,6 +455,33 @@ void AssetScriptingInterface::compressData(const ScriptValue& options, const Scr * @property {string} [url] - The <code>atp:</code> URL of the content: using the path if specified, otherwise the hash. * @property {string} [path] - The uploaded content's mapped path, if specified. */ + /*@jsdoc + * Content and delete options for {@link Assets.deleteAsset}. + * + * **Note:** This is just scaffolding and has not been properly implemented yet. + * + * @typedef {Object} Assets.DeleteOptions + * @property {string | ArrayBuffer} data - The content to upload. + * @property {string} [path] - A user-friendly path for the file in the asset server. May have a leading `"atp:"`. + * + * If not specified, no path-to-hash mapping is set. + * + * **Warning:** The asset server destroys any unmapped SHA256-named file at server restart. Either set the mapping path + * with this property or use {@link Assets.setMapping} to set a path-to-hash mapping for the uploaded file. + */ + +/*@jsdoc + * Result value returned by {@link Assets.putAsset}. + * + * **Note:** This is just scaffolding and has not been properly implemented yet. + * + * @typedef {Object} Assets.DeleteResult + * @property {number} [byteLength] - The number of bytes in the hash file stored on the asset server. + * @property {string} [contentType] - `"application/gzip"` if the content stored is gzip compressed. + * @property {string} [url] - The `atp:` URL of the content: using the path if specified, otherwise the hash. + * @property {string} [path] - The uploaded content's mapped path, if specified. + */ + void AssetScriptingInterface::putAsset(const ScriptValue& options, const ScriptValue& scope, const ScriptValue& callback) { auto compress = options.property("compress").toBool() || options.property("compressed").toBool(); auto data = options.isObject() ? options.property("data") : options; diff --git a/libraries/script-engine/src/ConsoleScriptingInterface.h b/libraries/script-engine/src/ConsoleScriptingInterface.h index bfa6d42ecb..c8f4c46f89 100644 --- a/libraries/script-engine/src/ConsoleScriptingInterface.h +++ b/libraries/script-engine/src/ConsoleScriptingInterface.h @@ -56,7 +56,7 @@ public: * Logs an "INFO" message to the program log and triggers {@link Script.infoMessage}. * The message logged is "INFO -" followed by the message values separated by spaces. * @function console.info - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. */ static ScriptValue info(ScriptContext* context, ScriptEngine* engine); @@ -65,7 +65,7 @@ public: * The message logged is the message values separated by spaces. * <p>If a {@link console.group} is in effect, the message is indented by an amount proportional to the group level.</p> * @function console.log - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. * @example <caption>Log some values.</caption> * Script.printedMessage.connect(function (message, scriptName) { * console.info("Console.log message:", "\"" + message + "\"", "in", "[" + scriptName + "]"); @@ -82,7 +82,7 @@ public: * Logs a message to the program log and triggers {@link Script.printedMessage}. * The message logged is the message values separated by spaces. * @function console.debug - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. */ static ScriptValue debug(ScriptContext* context, ScriptEngine* engine); @@ -90,7 +90,7 @@ public: * Logs a "WARNING" message to the program log and triggers {@link Script.warningMessage}. * The message logged is "WARNING - " followed by the message values separated by spaces. * @function console.warn - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. */ static ScriptValue warn(ScriptContext* context, ScriptEngine* engine); @@ -98,7 +98,7 @@ public: * Logs an "ERROR" message to the program log and triggers {@link Script.errorMessage}. * The message logged is "ERROR - " followed by the message values separated by spaces. * @function console.error - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. */ static ScriptValue error(ScriptContext* context, ScriptEngine* engine); @@ -107,7 +107,7 @@ public: * Logs an "ERROR" message to the program log and triggers {@link Script.errorMessage}. * The message logged is "ERROR - " followed by the message values separated by spaces. * @function console.exception - * @param {...*} [message] - The message values to log. + * @param {*} [message] - The message values to log. */ static ScriptValue exception(ScriptContext* context, ScriptEngine* engine); @@ -117,7 +117,7 @@ public: * <p>Note: Script execution continues whether or not the test condition fails.</p> * @function console.assert * @param {boolean} assertion - The test condition value. - * @param {...*} [message] - The message values to log if the assertion evaluates to <code>false</code>. + * @param {*} [message] - The message values to log if the assertion evaluates to <code>false</code>. * @example <caption>Demonstrate assertion behavior.</caption> * Script.errorMessage.connect(function (message, scriptName) { * console.info("Error message logged:", "\"" + message + "\"", "in", "[" + scriptName + "]"); diff --git a/libraries/script-engine/src/ScriptManager.cpp b/libraries/script-engine/src/ScriptManager.cpp index 58fee1f06d..07527cd68b 100644 --- a/libraries/script-engine/src/ScriptManager.cpp +++ b/libraries/script-engine/src/ScriptManager.cpp @@ -782,7 +782,7 @@ void ScriptManager::init() { * The message logged is the message values separated by spaces. * <p>Alternatively, you can use {@link Script.print} or one of the {@link console} API methods.</p> * @function print - * @param {...*} [message] - The message values to print. + * @param {*} [message] - The message values to print. */ scriptEngine->globalObject().setProperty("print", scriptEngine->newFunction(debugPrint)); diff --git a/libraries/script-engine/src/ScriptManager.h b/libraries/script-engine/src/ScriptManager.h index 7185d3e615..e07e91efae 100644 --- a/libraries/script-engine/src/ScriptManager.h +++ b/libraries/script-engine/src/ScriptManager.h @@ -580,7 +580,7 @@ public: * @brief Registers a global object by name. * * @param valueName - * @param value + * @param string */ Q_INVOKABLE void registerValue(const QString& valueName, ScriptValue value); diff --git a/libraries/script-engine/src/ScriptManagerScriptingInterface.h b/libraries/script-engine/src/ScriptManagerScriptingInterface.h index 0a2ccb66e3..7bdb61feff 100644 --- a/libraries/script-engine/src/ScriptManagerScriptingInterface.h +++ b/libraries/script-engine/src/ScriptManagerScriptingInterface.h @@ -162,7 +162,7 @@ public: * registers a global object by name. * @function Script.registerValue * @param {string} valueName - * @param {value} value + * @param {*} value */ /// registers a global object by name Q_INVOKABLE void registerValue(const QString& valueName, ScriptValue value) { _manager->registerValue(valueName, value); } @@ -547,8 +547,8 @@ public: /*@jsdoc * Create test object for garbage collector debugging. - * @function Script.createGarbageCollectorDebuggingObject() - * @Returns Test object. + * @function Script.createGarbageCollectorDebuggingObject + * @Returns {*} Test object. */ Q_INVOKABLE ScriptValue createGarbageCollectorDebuggingObject(); @@ -800,7 +800,7 @@ protected: /*@jsdoc * @function Script.executeOnScriptThread * @param {function} function - Function. - * @param {ConnectionType} [type=2] - Connection type. + * @param {*} [type=2] - Connection type. * @deprecated This function is deprecated and will be removed. */ // V8TODO: Nothing seems to be using this, and it generates: diff --git a/libraries/shared/src/DebugDraw.h b/libraries/shared/src/DebugDraw.h index c5ba290514..ce63f436f2 100644 --- a/libraries/shared/src/DebugDraw.h +++ b/libraries/shared/src/DebugDraw.h @@ -95,7 +95,7 @@ public: * @param {Quat} rotation - The orientation of the marker in world coordinates. * @param {Vec3} position - The position of the market in world coordinates. * @param {Vec4} color - The color of the marker. - * @param {float} size - A float between 0.0 and 1.0 (10 cm) to control the size of the marker. + * @param {number} size - A float between 0.0 and 1.0 (10 cm) to control the size of the marker. * @example <caption>Briefly draw a debug marker in front of your avatar, in world coordinates.</caption> * var MARKER_NAME = "my marker"; * DebugDraw.addMarker( @@ -128,7 +128,7 @@ public: * @param {Quat} rotation - The orientation of the marker in avatar coordinates. * @param {Vec3} position - The position of the market in avatar coordinates. * @param {Vec4} color - color of the marker. - * @param {float} size - A float between 0.0 and 1.0 (10 cm) to control the size of the marker. + * @param {number} size - A float between 0.0 and 1.0 (10 cm) to control the size of the marker. * @example <caption>Briefly draw a debug marker in front of your avatar, in avatar coordinates.</caption> * var MARKER_NAME = "My avatar marker"; * DebugDraw.addMyAvatarMarker( diff --git a/libraries/ui/src/QmlFragmentClass.h b/libraries/ui/src/QmlFragmentClass.h index ea42125a9a..b432c379a7 100644 --- a/libraries/ui/src/QmlFragmentClass.h +++ b/libraries/ui/src/QmlFragmentClass.h @@ -36,7 +36,7 @@ public: /*@jsdoc * Creates a new button, adds it to this and returns it. * @function QmlFragmentClass#addButton - * @param properties {object} button properties + * @param {object} properties - button properties * @returns {TabletButtonProxy} */ Q_INVOKABLE QObject* addButton(const QVariant& properties); diff --git a/tools/jsdoc/CMakeLists.txt b/tools/jsdoc/CMakeLists.txt index 5a062b7ee9..382147cc7d 100644 --- a/tools/jsdoc/CMakeLists.txt +++ b/tools/jsdoc/CMakeLists.txt @@ -10,12 +10,14 @@ set(JSDOC_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/node_modules/.bin/jsdoc JSDOC_PATH) file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/config.json JSDOC_CONFIG_PATH) file(TO_NATIVE_PATH ${JSDOC_OUTPUT_DIR}/out OUTPUT_DIR) +file(TO_NATIVE_PATH ${OVERTE_TSD_JSDOC_DIR}/overte-tsd-jsdoc) file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/root.js NATIVE_JSDOC_WORKING_DIR) set(JSDOC_OUTPUT_PATH ${OUTPUT_DIR} CACHE INTERNAL "${PROJECT_NAME}: JSDoc output directory") add_custom_command(TARGET ${TARGET_NAME} COMMAND ${NPM_EXECUTABLE} --no-progress install && ${JSDOC_PATH} ${NATIVE_JSDOC_WORKING_DIR} -c ${JSDOC_CONFIG_PATH} -d ${OUTPUT_DIR} + COMMAND ${NPM_EXECUTABLE} --no-progress install && ${JSDOC_PATH} ${NATIVE_JSDOC_WORKING_DIR} -t ${OVERTE_TSD_JSDOC_DIR} -c ${JSDOC_CONFIG_PATH} -d ${OUTPUT_DIR} WORKING_DIRECTORY ${JSDOC_WORKING_DIR} COMMENT "generate the JSDoc JSON" ) diff --git a/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js b/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js new file mode 100644 index 0000000000..8b2ca2f629 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=Dictionary.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js.map b/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js.map new file mode 100644 index 0000000000..3299351f24 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/Dictionary.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Dictionary.js","sourceRoot":"","sources":["../src/Dictionary.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/Emitter.js b/tools/jsdoc/overte-tsd-jsdoc/Emitter.js new file mode 100644 index 0000000000..933ac09ddb --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/Emitter.js @@ -0,0 +1,681 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = __importStar(require("typescript")); +const logger_1 = require("./logger"); +const assert_never_1 = require("./assert_never"); +const doclet_utils_1 = require("./doclet_utils"); +const create_helpers_1 = require("./create_helpers"); +const type_resolve_helpers_1 = require("./type_resolve_helpers"); +function shouldMoveOutOfClass(doclet) { + return doclet_utils_1.isClassDoclet(doclet) + || doclet_utils_1.isNamespaceDoclet(doclet) + || doclet_utils_1.isEnumDoclet(doclet) + || doclet.kind === 'typedef'; +} +class Emitter { + constructor(options) { + this.options = options; + this.results = []; + this._treeRoots = []; + this._treeNodes = {}; + } + parse(docs) { + logger_1.debug(`Emitter.parse()`); + this.results = []; + this._treeRoots = []; + this._treeNodes = {}; + if (!docs) + return; + this._createTreeNodes(docs); + this._buildTree(docs); + if (this.options.generationStrategy === 'exported') + this._markExported(); + this._parseTree(); + } + emit() { + console.log(`----------------------------------------------------------------`); + console.log(`Emitter.emit()`); + const resultFile = ts.createSourceFile('types.d.ts', '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS); + const printer = ts.createPrinter({ + removeComments: false, + newLine: ts.NewLineKind.LineFeed, + }); + let out2 = ''; + for (let i = 0; i < this.results.length; ++i) { + out2 += printer.printNode(ts.EmitHint.Unspecified, this.results[i], resultFile); + out2 += '\n\n'; + } + return out2; + } + _createTreeNodes(docs) { + logger_1.debug(`----------------------------------------------------------------`); + logger_1.debug(`Emitter._createTreeNodes()`); + for (let i = 0; i < docs.length; ++i) { + const doclet = docs[i]; + if (doclet.kind === 'package') { + logger_1.debug(`Emitter._createTreeNodes(): skipping ${logger_1.docletDebugInfo(doclet)} (package)`); + continue; + } + const node = this._treeNodes[doclet.longname]; + if (!node) { + logger_1.debug(`Emitter._createTreeNodes(): adding ${logger_1.docletDebugInfo(doclet)} to this._treeNodes`); + this._treeNodes[doclet.longname] = { doclet, children: [] }; + } + else { + logger_1.debug(`Emitter._createTreeNodes(): skipping ${logger_1.docletDebugInfo(doclet)} (doclet name already known)`); + } + } + } + _buildTree(docs) { + logger_1.debug(`----------------------------------------------------------------`); + logger_1.debug(`Emitter._buildTree()`); + for (let i = 0; i < docs.length; ++i) { + const doclet = docs[i]; + this._buildTreeNode(docs, doclet); + } + } + _buildTreeNode(docs, doclet) { + if (doclet.kind === 'package') { + logger_1.debug(`Emitter._buildTreeNode(): skipping ${logger_1.docletDebugInfo(doclet)} (package)`); + return; + } + if (doclet_utils_1.isClassDoclet(doclet) && doclet_utils_1.isConstructorDoclet(doclet)) { + const ownerClass = this._getNodeFromLongname(doclet.longname, (node) => doclet_utils_1.isClassDeclarationDoclet(node.doclet)); + if (!ownerClass) { + logger_1.warn(`Failed to find owner class of constructor '${doclet.longname}'.`, doclet); + return; + } + if (this._checkDuplicateChild(doclet, ownerClass, (child) => doclet_utils_1.isConstructorDoclet(child.doclet))) + return; + logger_1.debug(`Emitter._buildTreeNode(): adding constructor ${logger_1.docletDebugInfo(doclet)} to class declaration ${logger_1.docletDebugInfo(ownerClass.doclet)}`); + ownerClass.children.push({ doclet: doclet, children: [] }); + if (!doclet_utils_1.hasParamsDoclet(doclet) && doclet_utils_1.isClassDoclet(ownerClass.doclet) && doclet_utils_1.hasParamsDoclet(ownerClass.doclet)) { + logger_1.debug(`Emitter._buildTreeNode(): inheriting 'params' from owner class ${logger_1.docletDebugInfo(ownerClass.doclet)} for undocumented constructor ${logger_1.docletDebugInfo(doclet)}`); + doclet.params = ownerClass.doclet.params; + } + return; + } + let interfaceMerge = null; + if (doclet.kind === 'class') { + const impls = doclet.implements || []; + const mixes = doclet.mixes || []; + const extras = impls.concat(mixes); + if (extras.length) { + const longname = this._getInterfaceKey(doclet.longname); + interfaceMerge = this._treeNodes[longname] = { + doclet: { + kind: 'interface', + name: doclet.name, + scope: doclet.scope, + longname: longname, + augments: extras, + memberof: doclet.memberof, + }, + children: [], + }; + logger_1.debug(`Emitter._buildTreeNode(): merge interface ${logger_1.docletDebugInfo(interfaceMerge.doclet)} created for ${logger_1.docletDebugInfo(doclet)}`); + } + } + let namespaceMerge = null; + if (doclet.kind === 'interface' || doclet.kind === 'mixin') { + const staticChildren = docs.filter(d => d.memberof === doclet.longname && d.scope === 'static'); + if (staticChildren.length) { + const longname = this._getNamespaceKey(doclet.longname); + namespaceMerge = this._treeNodes[longname] = { + doclet: { + kind: 'namespace', + name: doclet.name, + scope: doclet.scope, + longname: longname, + memberof: doclet.memberof, + }, + children: [], + }; + logger_1.debug(`Emitter._buildTreeNode(): merge namespace ${logger_1.docletDebugInfo(namespaceMerge.doclet)} created for ${logger_1.docletDebugInfo(doclet)}`); + staticChildren.forEach(c => c.memberof = longname); + } + } + doclet_utils_1.isDefaultExportDoclet(doclet, this._treeNodes); + if (doclet.memberof) { + const parent = this._getNodeFromLongname(doclet.memberof, function (node) { + if (doclet.scope === 'instance') + return doclet_utils_1.isClassDoclet(node.doclet); + return true; + }); + if (!parent) { + logger_1.warn(`Failed to find parent of doclet '${doclet.longname}' using memberof '${doclet.memberof}', this is likely due to invalid JSDoc.`, doclet); + return; + } + if (doclet_utils_1.isDefaultExportDoclet(doclet, this._treeNodes)) { + if (doclet.meta && doclet.meta.code.value && doclet.meta.code.value.startsWith('{')) { + logger_1.debug(`Emitter._buildTreeNode(): 'module.exports = {name: ... }' named export pattern doclet ${logger_1.docletDebugInfo(doclet)}: skipping doclet but scan the object members`); + const value = JSON.parse(doclet.meta.code.value); + for (const name in value) { + this._resolveDocletType(name, parent, function (namedExportNode) { + logger_1.debug(`Emitter._buildTreeNode(): tagging ${logger_1.docletDebugInfo(namedExportNode.doclet)} as a named export`); + namedExportNode.isNamedExport = true; + }); + } + return; + } + else { + const thisEmitter = this; + if (this._checkDuplicateChild(doclet, parent, (child) => doclet_utils_1.isDefaultExportDoclet(child.doclet, thisEmitter._treeNodes))) + return; + logger_1.debug(`Emitter._buildTreeNode(): adding default export ${logger_1.docletDebugInfo(doclet)} to module ${logger_1.docletDebugInfo(parent.doclet)}`); + parent.children.push({ doclet: doclet, children: [] }); + return; + } + } + if (doclet_utils_1.isExportsAssignmentDoclet(doclet, this._treeNodes)) { + logger_1.debug(`Emitter._buildTreeNode(): adding 'exports =' assignment ${logger_1.docletDebugInfo(doclet)} to module ${logger_1.docletDebugInfo(parent.doclet)}`); + parent.children.push({ doclet: doclet, children: [] }); + return; + } + const obj = this._treeNodes[doclet.longname]; + if (!obj) { + logger_1.warn('Failed to find doclet node when building tree, this is likely a bug.', doclet); + return; + } + const isParentClassLike = doclet_utils_1.isClassDoclet(parent.doclet); + if (isParentClassLike && shouldMoveOutOfClass(doclet)) { + logger_1.debug(`Emitter._buildTreeNode(): move out of class!`); + const mod = this._getOrCreateClassNamespace(parent); + if (interfaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(interfaceMerge.doclet)} to ${logger_1.docletDebugInfo(mod.doclet)}`); + mod.children.push(interfaceMerge); + } + if (namespaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(namespaceMerge.doclet)} to ${logger_1.docletDebugInfo(mod.doclet)}`); + mod.children.push(namespaceMerge); + } + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(obj.doclet)} to ${logger_1.docletDebugInfo(mod.doclet)}`); + mod.children.push(obj); + } + else { + if (this._checkDuplicateChild(doclet, parent, function (child) { + if (child.doclet.kind !== doclet.kind) + return false; + if (child.doclet.longname === doclet.longname) + return true; + const shortname = doclet.name || ''; + const optionalLongname = doclet.longname.slice(0, doclet.longname.length - shortname.length) + `[${shortname}]`; + if (child.doclet.longname === optionalLongname) + return true; + return false; + })) + return; + const isObjModuleLike = doclet_utils_1.isNamespaceDoclet(doclet); + const isParentModuleLike = doclet_utils_1.isNamespaceDoclet(parent.doclet); + if (isObjModuleLike && isParentModuleLike) { + logger_1.debug(`Emitter._buildTreeNode(): nested modules / namespaces!`); + obj.isNested = true; + } + const isParentEnum = doclet_utils_1.isEnumDoclet(parent.doclet); + if (!isParentEnum) { + if (interfaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(interfaceMerge.doclet)} to ${logger_1.docletDebugInfo(parent.doclet)}`); + parent.children.push(interfaceMerge); + } + if (namespaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(namespaceMerge.doclet)} to ${logger_1.docletDebugInfo(parent.doclet)}`); + parent.children.push(namespaceMerge); + } + logger_1.debug(`Emitter._buildTreeNode(): adding ${logger_1.docletDebugInfo(obj.doclet)} to ${logger_1.docletDebugInfo(parent.doclet)}`); + parent.children.push(obj); + } + } + } + else { + const obj = this._treeNodes[doclet.longname]; + if (!obj) { + logger_1.warn('Failed to find doclet node when building tree, this is likely a bug.', doclet); + return; + } + if (interfaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): ${logger_1.docletDebugInfo(interfaceMerge.doclet)} detected as a root`); + this._treeRoots.push(interfaceMerge); + } + if (namespaceMerge) { + logger_1.debug(`Emitter._buildTreeNode(): ${logger_1.docletDebugInfo(namespaceMerge.doclet)} detected as a root`); + this._treeRoots.push(namespaceMerge); + } + logger_1.debug(`Emitter._buildTreeNode(): ${logger_1.docletDebugInfo(obj.doclet)} detected as a root`); + this._treeRoots.push(obj); + } + } + _checkDuplicateChild(doclet, parent, match) { + for (const child of parent.children) { + if (match(child)) { + if (!doclet_utils_1.isDocumentedDoclet(doclet)) { + logger_1.debug(`Emitter._checkConcurrentChild(): skipping undocumented ${logger_1.docletDebugInfo(doclet)} because ${logger_1.docletDebugInfo(child.doclet)} is already known in parent ${logger_1.docletDebugInfo(parent.doclet)}`); + } + else { + logger_1.debug(`Emitter._buildTreeNode(): replacing ${logger_1.docletDebugInfo(child.doclet)} with ${logger_1.docletDebugInfo(doclet)} in ${logger_1.docletDebugInfo(parent.doclet)}`); + child.doclet = doclet; + } + return true; + } + } + return false; + } + _markExported() { + logger_1.debug(`----------------------------------------------------------------`); + logger_1.debug(`Emitter._markExported()`); + this._markExportedNode = this._markExportedNode.bind(this); + for (let i = 0; i < this._treeRoots.length; i++) { + const node = this._treeRoots[i]; + if (node.doclet.kind === 'module') + this._markExportedNode(node); + } + } + _markExportedNode(node, markThisNode = true) { + logger_1.debug(`Emitter._markExportedNode(${logger_1.docletDebugInfo(node.doclet)}, markThisNode=${markThisNode})`); + const doProcessNode = (node.isExported === undefined); + if (markThisNode) + node.isExported = true; + else if (!node.isExported) + node.isExported = false; + if (!doProcessNode) + return; + switch (node.doclet.kind) { + case 'class': + case 'interface': + case 'mixin': + this._markExportedParams(node, node.doclet.params); + if (node.doclet.augments) + for (const augment of node.doclet.augments) + this._resolveDocletType(augment, node, this._markExportedNode); + if (node.doclet.implements) + for (const implement of node.doclet.implements) + this._resolveDocletType(implement, node, this._markExportedNode); + if (node.doclet.mixes) + for (const mix of node.doclet.mixes) + this._resolveDocletType(mix, node, this._markExportedNode); + this._markExportedChildren(node); + break; + case 'file': + this._markExportedParams(node, node.doclet.params); + break; + case 'event': + this._markExportedParams(node, node.doclet.params); + break; + case 'callback': + case 'function': + if (node.doclet.this) + this._resolveDocletType(node.doclet.this, node, this._markExportedNode); + this._markExportedParams(node, node.doclet.params); + this._markExportedReturns(node, node.doclet.returns); + break; + case 'member': + case 'constant': + if (doclet_utils_1.isDefaultExportDoclet(node.doclet, this._treeNodes)) { + if (node.doclet.meta && node.doclet.meta.code.value) { + this._resolveDocletType(node.doclet.meta.code.value, node, this._markExportedNode); + } + } + else if (doclet_utils_1.isNamedExportDoclet(node.doclet, this._treeNodes) + && node.doclet.meta && node.doclet.meta.code.value + && (!doclet_utils_1.isEnumDoclet(node.doclet))) { + const thisEmitter = this; + this._resolveDocletType(node.doclet.meta.code.value, node, function (refNode) { + const markThisNode = node.doclet.meta && (node.doclet.meta.code.value === node.doclet.name); + thisEmitter._markExportedNode(refNode, markThisNode); + }, function (target) { + return (target !== node); + }); + } + else { + this._markExportedTypes(node, node.doclet.type); + } + break; + case 'module': + for (const child of node.children) { + if (doclet_utils_1.isDefaultExportDoclet(child.doclet, this._treeNodes) + || doclet_utils_1.isNamedExportDoclet(child.doclet, this._treeNodes)) { + this._markExportedNode(child); + } + } + break; + case 'namespace': + this._markExportedChildren(node); + break; + case 'typedef': + this._markExportedTypes(node, node.doclet.type); + this._markExportedParams(node, node.doclet.params); + this._markExportedReturns(node, node.doclet.returns); + break; + case 'signal': + break; + default: + return assert_never_1.assertNever(node.doclet); + } + } + _markExportedTypes(node, types) { + if (types) { + for (const typeName of types.names) { + this._resolveDocletType(typeName, node, this._markExportedNode); + } + } + } + _markExportedParams(node, params) { + if (params) { + for (const param of params) { + if (param.type) { + for (const paramType of param.type.names) { + this._resolveDocletType(paramType, node, this._markExportedNode); + } + } + } + } + } + _markExportedReturns(node, returns) { + if (returns) { + for (const ret of returns) { + for (const retType of ret.type.names) { + this._resolveDocletType(retType, node, this._markExportedNode); + } + } + } + } + _markExportedChildren(node) { + for (const child of node.children) { + this._markExportedNode(child); + } + } + _parseTree() { + logger_1.debug(`----------------------------------------------------------------`); + logger_1.debug(`Emitter._parseTree()`); + for (let i = 0; i < this._treeRoots.length; ++i) { + const node = this._parseTreeNode(this._treeRoots[i]); + if (node) + this.results.push(node); + } + } + _parseTreeNode(node, parent) { + if (this.options.generationStrategy === 'exported' && !node.isExported) { + logger_1.debug(`Emitter._parseTreeNode(${logger_1.docletDebugInfo(node.doclet)}): skipping doclet, not exported`); + return null; + } + if (!node.exportName + && this._ignoreDoclet(node.doclet)) { + logger_1.debug(`Emitter._parseTreeNode(${logger_1.docletDebugInfo(node.doclet)}): skipping ignored doclet`); + return null; + } + logger_1.debug(`Emitter._parseTreeNode(${logger_1.docletDebugInfo(node.doclet)}, parent=${parent ? logger_1.docletDebugInfo(parent.doclet) : parent})`); + const children = []; + if (children) { + for (let i = 0; i < node.children.length; ++i) { + const childNode = this._parseTreeNode(node.children[i], node); + if (childNode) + children.push(childNode); + } + } + switch (node.doclet.kind) { + case 'class': + if (doclet_utils_1.isConstructorDoclet(node.doclet)) { + return create_helpers_1.createConstructor(node.doclet); + } + else { + return create_helpers_1.createClass(node.doclet, children, node.exportName); + } + case 'constant': + case 'member': + if (doclet_utils_1.isDefaultExportDoclet(node.doclet, this._treeNodes) + && node.doclet.meta + && node.doclet.meta.code.value) { + return create_helpers_1.createExportDefault(node.doclet, node.doclet.meta.code.value); + } + if (doclet_utils_1.isNamedExportDoclet(node.doclet, this._treeNodes) + && node.doclet.meta + && node.doclet.meta.code.value + && !doclet_utils_1.isEnumDoclet(node.doclet)) { + if (node.doclet.meta.code.value !== node.doclet.name) { + const thisEmitter = this; + let tsRes = null; + this._resolveDocletType(node.doclet.meta.code.value, node, function (refNode) { + const namedRefNode = { + doclet: refNode.doclet, + children: refNode.children, + isNested: refNode.isNested, + isExported: true, + exportName: node.doclet.name + }; + tsRes = thisEmitter._parseTreeNode(namedRefNode, parent); + }); + return tsRes; + } + else { + logger_1.debug(`Emitter._parseTreeNode(): skipping named export with reference of the same name`); + return null; + } + } + if (doclet_utils_1.isExportsAssignmentDoclet(node.doclet, this._treeNodes)) { + logger_1.debug(`Emitter._parseTreeNode(): skipping 'exports =' assignment`); + return null; + } + if (node.doclet.isEnum) + return create_helpers_1.createEnum(node.doclet, node.exportName); + else if (parent && parent.doclet.kind === 'class') + return create_helpers_1.createClassMember(node.doclet); + else if (parent && parent.doclet.kind === 'interface') + return create_helpers_1.createInterfaceMember(node.doclet); + else + return create_helpers_1.createNamespaceMember(node.doclet, node.exportName); + case 'callback': + case 'function': + if (node.doclet.memberof) { + const parent = this._treeNodes[node.doclet.memberof]; + if (parent && parent.doclet.kind === 'class') + return create_helpers_1.createClassMethod(node.doclet); + else if (parent && parent.doclet.kind === 'interface') + return create_helpers_1.createInterfaceMethod(node.doclet); + } + return create_helpers_1.createFunction(node.doclet, node.exportName); + case 'interface': + return create_helpers_1.createInterface(node.doclet, children, node.exportName); + case 'mixin': + return create_helpers_1.createInterface(node.doclet, children, node.exportName); + case 'module': + return create_helpers_1.createModule(node.doclet, !!node.isNested, children); + case 'namespace': + return create_helpers_1.createNamespace(node.doclet, !!node.isNested, children, node.exportName); + case 'typedef': + return create_helpers_1.createTypedef(node.doclet, children, node.exportName); + case 'file': + return null; + case 'event': + return null; + case 'signal': + return null; + default: + return assert_never_1.assertNever(node.doclet); + } + } + _ignoreDoclet(doclet) { + if (doclet.kind !== 'package' && doclet_utils_1.isConstructorDoclet(doclet)) { + return false; + } + let reason = undefined; + if (doclet.kind === 'package') + reason = 'package doclet'; + else if (!!doclet.ignore) + reason = 'doclet with an ignore flag'; + else if (!this.options.private && doclet.access === 'private') + reason = 'private access disabled'; + else if (doclet.kind === 'function' && (doclet.override || doclet.overrides)) + reason = 'overriding doclet'; + if (reason + || doclet.kind === 'package') { + logger_1.debug(`Emitter._ignoreDoclet(doclet=${logger_1.docletDebugInfo(doclet)}) => true (${reason})`); + return true; + } + if (doclet.access === undefined) { + return false; + } + const accessLevels = ["private", "package", "protected", "public"]; + const ignored = accessLevels.indexOf(doclet.access.toString()) < accessLevels.indexOf(this.options.access || "package"); + if (ignored) { + logger_1.debug(`Emitter._ignoreDoclet(doclet=${logger_1.docletDebugInfo(doclet)}) => true (low access level)`); + } + return ignored; + } + _getInterfaceKey(longname) { + return longname ? longname + '$$interface$helper' : ''; + } + _getNamespaceKey(longname) { + return longname ? longname + '$$namespace$helper' : ''; + } + _getOrCreateClassNamespace(obj) { + if (obj.doclet.kind === 'module' || obj.doclet.kind === 'namespace') { + return obj; + } + const namespaceKey = this._getNamespaceKey(obj.doclet.longname); + let mod = this._treeNodes[namespaceKey]; + if (mod) { + return mod; + } + mod = this._treeNodes[namespaceKey] = { + doclet: { + kind: 'namespace', + name: obj.doclet.name, + scope: 'static', + longname: namespaceKey, + }, + children: [], + }; + if (obj.doclet.memberof) { + const parent = this._treeNodes[obj.doclet.memberof]; + if (!parent) { + logger_1.warn(`Failed to find parent of doclet '${obj.doclet.longname}' using memberof '${obj.doclet.memberof}', this is likely due to invalid JSDoc.`, obj.doclet); + return mod; + } + let parentMod = this._getOrCreateClassNamespace(parent); + logger_1.debug(`Emitter._getOrCreateClassNamespace(): pushing ${logger_1.docletDebugInfo(mod.doclet)} as a child of ${logger_1.docletDebugInfo(parentMod.doclet)}`); + mod.doclet.memberof = parentMod.doclet.longname; + parentMod.children.push(mod); + } + else { + logger_1.debug(`Emitter._getOrCreateClassNamespace(): no memberof, pushing ${logger_1.docletDebugInfo(mod.doclet)} as a root`); + this._treeRoots.push(mod); + } + return mod; + } + _getNodeFromLongname(longname, filter) { + function _debug(msg) { } + const node = this._treeNodes[longname]; + if (!node) { + _debug(`Emitter._getNodeFromLongname('${longname}') => null`); + logger_1.warn(`No such doclet '${longname}'`); + return null; + } + if (!filter || filter(node)) { + _debug(`Emitter._getNodeFromLongname('${longname}') => ${logger_1.docletDebugInfo(node.doclet)}`); + return node; + } + if (node.doclet.kind === 'module') { + for (const child of node.children) { + if (child.doclet.longname === longname && filter(child)) { + _debug(`Emitter._getNodeFromLongname('${longname}') => ${logger_1.docletDebugInfo(child.doclet)}`); + return child; + } + } + _debug(`Emitter._getNodeFromLongname('${longname}') => null`); + logger_1.warn(`No such doclet '${longname}' in module`); + return null; + } + else { + _debug(`Emitter._getNodeFromLongname('${longname}') => null`); + logger_1.warn(`Unexpected doclet for longname '${longname}`, node.doclet); + return null; + } + } + _resolveDocletType(typeName, currentNode, callback, filter) { + function _debug(msg) { } + _debug(`Emitter._resolveDocletType(typeName='${typeName}', currentNode=${logger_1.docletDebugInfo(currentNode.doclet)})`); + const tokens = type_resolve_helpers_1.generateTree(typeName); + if (!tokens) { + logger_1.warn(`Could not resolve type '${typeName}' in current node:`, currentNode.doclet); + return; + } + tokens.dump((msg) => _debug(`Emitter._resolveDocletType(): tokens = ${msg}`)); + const thisEmitter = this; + tokens.walkTypes(function (token) { + _debug(`Emitter._resolveDocletType(): token = {name:${token.name}, type:${token.typeToString()}}`); + typeName = token.name; + if (typeName.match(/.*\[ *\].*/)) + typeName = typeName.slice(0, typeName.indexOf('[')); + _debug(`Emitter._resolveDocletType(): typeName = ${typeName}`); + switch (typeName) { + case 'void': + case 'null': + case 'string': + case 'String': + case 'boolean': + case 'Boolean': + case 'number': + case 'Number': + case 'function': + case 'Function': + case 'any': + case 'object': + case 'Object': + case '*': + case 'Array': + case 'Union': + case 'Promise': + case 'HTMLElement': + return; + } + let scope = currentNode.doclet.longname; + while (scope) { + _debug(`Emitter._resolveDocletType(): scope='${scope}'`); + const longnames = [ + `${scope}.${typeName}`, + `${scope}~${typeName}`, + `${scope}~${typeName}$$interface$helper`, + `${scope}~${typeName}$$namespace$helper`, + ]; + let targetFound = false; + for (const longname of longnames) { + _debug(`Emitter._resolveDocletType(): trying longname '${longname}'...`); + const target = thisEmitter._treeNodes[longname]; + if (target) { + if (filter && (!filter(target))) { + _debug(`Emitter._resolveDocletType(): filtered out ${logger_1.docletDebugInfo(target.doclet)}`); + } + else { + _debug(`Emitter._resolveDocletType(): found! ${logger_1.docletDebugInfo(target.doclet)}`); + callback(target); + targetFound = true; + } + } + } + if (targetFound) { + _debug(`Emitter._resolveDocletType(): done`); + return; + } + const scopeNode = thisEmitter._treeNodes[scope]; + if (!scopeNode) + break; + for (const tsTypeParameterDeclaration of type_resolve_helpers_1.resolveTypeParameters(scopeNode.doclet)) { + if (tsTypeParameterDeclaration.name.text === typeName) { + _debug(`Emitter._resolveDocletType(): template found! in ${logger_1.docletDebugInfo(scopeNode.doclet)}`); + return; + } + } + scope = scopeNode.doclet.memberof; + } + logger_1.warn(`Could not resolve type '${typeName}' in current node:`, currentNode.doclet); + }); + } +} +exports.Emitter = Emitter; +//# sourceMappingURL=Emitter.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/Emitter.js.map b/tools/jsdoc/overte-tsd-jsdoc/Emitter.js.map new file mode 100644 index 0000000000..f72f2bfcb8 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/Emitter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Emitter.js","sourceRoot":"","sources":["../src/Emitter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAiC;AAEjC,qCAAwD;AACxD,iDAA6C;AAC7C,iDAWwB;AACxB,qDAe0B;AAC1B,iEAA6F;AAsB7F,SAAS,oBAAoB,CAAC,MAAe;IAEzC,OAAO,4BAAa,CAAC,MAAM,CAAC;WACrB,gCAAiB,CAAC,MAAM,CAAC;WACzB,2BAAY,CAAC,MAAM,CAAC;WACpB,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;AACrC,CAAC;AAED,MAAa,OAAO;IAUhB,YAA4B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;QARpD,YAAO,GAAc,EAAE,CAAC;QAGxB,eAAU,GAAsB,EAAE,CAAC;QACnC,eAAU,GAAgC,EAAE,CAAC;IAK3C,CAAC;IAEH,KAAK,CAAC,IAAmB;QAErB,cAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,IAAI,CAAC,IAAI;YACL,OAAO;QAEX,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,UAAU;YAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,IAAI;QAEA,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE9B,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAClC,YAAY,EACZ,EAAE,EACF,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,KAAK,EACL,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEtB,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;YAC7B,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ;SACnC,CAAC,CAAC;QAEH,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAC5C;YACI,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAEhF,IAAI,IAAI,MAAM,CAAC;SAClB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAC,IAAkB;QAEvC,cAAK,CAAC,kEAAkE,CAAC,CAAC;QAC1E,cAAK,CAAC,4BAA4B,CAAC,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EACpC;YACI,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAC7B;gBACI,cAAK,CAAC,wCAAwC,wBAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACnF,SAAS;aACZ;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,EACT;gBACI,cAAK,CAAC,sCAAsC,wBAAe,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC1F,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;aAC/D;iBAED;gBACI,cAAK,CAAC,wCAAwC,wBAAe,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;aACxG;SACJ;IACL,CAAC;IAEO,UAAU,CAAC,IAAkB;QAEjC,cAAK,CAAC,kEAAkE,CAAC,CAAC;QAC1E,cAAK,CAAC,sBAAsB,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EACpC;YACI,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACrC;IACL,CAAC;IAEO,cAAc,CAAC,IAAkB,EAAE,MAAkB;QAEzD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAC7B;YACI,cAAK,CAAC,sCAAsC,wBAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjF,OAAO;SACV;QAED,IAAI,4BAAa,CAAC,MAAM,CAAC,IAAI,kCAAmB,CAAC,MAAM,CAAC,EACxD;YAKI,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uCAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChI,IAAI,CAAC,UAAU,EACf;gBACI,aAAI,CAAC,8CAA8C,MAAM,CAAC,QAAQ,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChF,OAAO;aACV;YAGD,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,KAAsB,EAAE,EAAE,CAAC,kCAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5G,OAAO;YAEX,cAAK,CAAC,gDAAgD,wBAAe,CAAC,MAAM,CAAC,yBAAyB,wBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5I,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAI3D,IAAI,CAAC,8BAAe,CAAC,MAAM,CAAC,IAAI,4BAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,8BAAe,CAAC,UAAU,CAAC,MAAM,CAAC,EACtG;gBACI,cAAK,CAAC,kEAAkE,wBAAe,CAAC,UAAU,CAAC,MAAM,CAAC,iCAAiC,wBAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtK,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5C;YAGD,OAAO;SACV;QAED,IAAI,cAAc,GAA2B,IAAI,CAAC;QAIlD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAC3B;YACI,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,MAAM,CAAC,MAAM,EACjB;gBACI,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxD,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;oBACzC,MAAM,EAAE;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,QAAQ,EAAE,QAAQ;wBAClB,QAAQ,EAAE,MAAM;wBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC5B;oBACD,QAAQ,EAAE,EAAE;iBACf,CAAC;gBACF,cAAK,CAAC,6CAA6C,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,wBAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACvI;SACJ;QAED,IAAI,cAAc,GAA2B,IAAI,CAAC;QAIlD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAC1D;YACI,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,CAAiB,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAK,CAAiB,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;YAClI,IAAI,cAAc,CAAC,MAAM,EACzB;gBACI,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxD,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;oBACzC,MAAM,EAAE;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,QAAQ,EAAE,QAAQ;wBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC5B;oBACD,QAAQ,EAAE,EAAE;iBACf,CAAC;gBACF,cAAK,CAAC,6CAA6C,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,wBAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEpI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAE,CAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;aACvE;SACJ;QAGD,oCAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,MAAM,CAAC,QAAQ,EACnB;YACI,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAS,IAAqB;gBAEpF,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;oBAC3B,OAAO,4BAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EACX;gBACI,aAAI,CAAC,oCAAoC,MAAM,CAAC,QAAQ,qBAAqB,MAAM,CAAC,QAAQ,yCAAyC,EAAE,MAAM,CAAC,CAAC;gBAC/I,OAAO;aACV;YAED,IAAI,oCAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAClD;gBACI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EACnF;oBAEI,cAAK,CAAC,yFAAyF,wBAAe,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;oBAGvK,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EACxB;wBACI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAChC,UAAS,eAAgC;4BACrC,cAAK,CAAC,qCAAqC,wBAAe,CAAC,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;4BACxG,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC;wBACzC,CAAC,CACJ,CAAC;qBACL;oBACD,OAAO;iBACV;qBAED;oBAGI,MAAM,WAAW,GAAG,IAAI,CAAC;oBACzB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE,CAAC,oCAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;wBAClI,OAAO;oBAEX,cAAK,CAAC,mDAAmD,wBAAe,CAAC,MAAM,CAAC,cAAc,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAGhI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBACvD,OAAO;iBACV;aACJ;YACD,IAAI,wCAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EACtD;gBACI,cAAK,CAAC,2DAA2D,wBAAe,CAAC,MAAM,CAAC,cAAc,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAGxI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,OAAO;aACV;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,EACR;gBACI,aAAI,CAAC,sEAAsE,EAAE,MAAM,CAAC,CAAC;gBACrF,OAAO;aACV;YAED,MAAM,iBAAiB,GAAG,4BAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAGvD,IAAI,iBAAiB,IAAI,oBAAoB,CAAC,MAAM,CAAC,EACrD;gBACI,cAAK,CAAC,8CAA8C,CAAC,CAAC;gBAEtD,MAAM,GAAG,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;gBAEpD,IAAI,cAAc,EAClB;oBACI,cAAK,CAAC,oCAAoC,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACrC;gBACD,IAAI,cAAc,EAClB;oBACI,cAAK,CAAC,oCAAoC,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACrC;gBAED,cAAK,CAAC,oCAAoC,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3G,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1B;iBAED;gBACI,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EACxC,UAAS,KAAsB;oBAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;wBACjC,OAAO,KAAK,CAAC;oBACjB,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;wBACzC,OAAO,IAAI,CAAC;oBAEhB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACpC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,GAAG,CAAC;oBAChH,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,gBAAgB;wBAC1C,OAAO,IAAI,CAAC;oBAChB,OAAO,KAAK,CAAC;gBACjB,CAAC,CACJ;oBACG,OAAO;gBAEX,MAAM,eAAe,GAAG,gCAAiB,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,kBAAkB,GAAG,gCAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE5D,IAAI,eAAe,IAAI,kBAAkB,EACzC;oBACI,cAAK,CAAC,wDAAwD,CAAC,CAAC;oBAChE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACvB;gBAED,MAAM,YAAY,GAAG,2BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAEjD,IAAI,CAAC,YAAY,EACjB;oBACI,IAAI,cAAc,EAClB;wBACI,cAAK,CAAC,oCAAoC,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACzH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBACxC;oBAED,IAAI,cAAc,EAClB;wBACI,cAAK,CAAC,oCAAoC,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACzH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBACxC;oBAED,cAAK,CAAC,oCAAoC,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC9G,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC7B;aACJ;SACJ;aAED;YACI,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,EACR;gBACI,aAAI,CAAC,sEAAsE,EAAE,MAAM,CAAC,CAAC;gBACrF,OAAO;aACV;YAED,IAAI,cAAc,EAClB;gBACI,cAAK,CAAC,6BAA6B,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAChG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACxC;YAED,IAAI,cAAc,EAClB;gBACI,cAAK,CAAC,6BAA6B,wBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAChG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACxC;YAED,cAAK,CAAC,6BAA6B,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACrF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;IACL,CAAC;IAUO,oBAAoB,CAAC,MAAe,EAAE,MAAuB,EAAE,KAA0C;QAG7G,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EACnC;YACI,IAAI,KAAK,CAAC,KAAK,CAAC,EAChB;gBACI,IAAI,CAAC,iCAAkB,CAAC,MAAM,CAAC,EAC/B;oBAEI,cAAK,CAAC,0DAA0D,wBAAe,CAAC,MAAM,CAAC,YAAY,wBAAe,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBAapM;qBAED;oBAEI,cAAK,CAAC,uCAAuC,wBAAe,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,wBAAe,CAAC,MAAM,CAAC,OAAO,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACnJ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;iBACzB;gBAED,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,aAAa;QAEjB,cAAK,CAAC,kEAAkE,CAAC,CAAC;QAC1E,cAAK,CAAC,yBAAyB,CAAC,CAAC;QAGjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAI3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;YACI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACpC;IACL,CAAC;IAEO,iBAAiB,CAAC,IAAqB,EAAE,eAAwB,IAAI;QAEzE,cAAK,CAAC,6BAA6B,wBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,YAAY,GAAG,CAAC,CAAC;QAGlG,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QACtD,IAAI,YAAY;YACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACtB,IAAI,CAAE,IAAI,CAAC,UAAU;YACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAG5B,IAAI,CAAE,aAAa;YACf,OAAO;QAGX,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EACxB;YAEI,KAAK,OAAO,CAAC;YACb,KAAK,WAAW,CAAC;YACjB,KAAK,OAAO;gBACR,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;oBACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;wBACtC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACvE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;oBACtB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;wBAC1C,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACzE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK;oBACjB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK;wBAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACnE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;YAGV,KAAK,MAAM;gBACP,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM;YAGV,KAAK,OAAO;gBACR,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM;YAGV,KAAK,UAAU,CAAC;YAChB,KAAK,UAAU;gBACX,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;oBAChB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC5E,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrD,MAAM;YAGV,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU;gBACX,IAAI,oCAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EACvD;oBACI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EACnD;wBACI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;qBACtF;iBACJ;qBACI,IAAI,kCAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;uBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;uBAC/C,CAAC,CAAE,2BAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EACzC;oBACI,MAAM,WAAW,GAAG,IAAI,CAAC;oBACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,OAAwB;wBAErF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC5F,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBACzD,CAAC,EAED,UAAS,MAAuB;wBAC5B,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;oBAC7B,CAAC,CACJ,CAAC;iBACL;qBAED;oBACI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACnD;gBACD,MAAM;YAGV,KAAK,QAAQ;gBAET,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EACjC;oBACI,IAAI,oCAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;2BACjD,kCAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EACzD;wBACI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;qBACjC;iBACJ;gBACD,MAAM;YACV,KAAK,WAAW;gBACZ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM;YAGV,KAAK,SAAS;gBACV,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEhD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrD,MAAM;YACV,KAAK,QAAQ;gBACT,MAAM;YACV;gBACI,OAAO,0BAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvC;IACL,CAAC;IAEO,kBAAkB,CAAC,IAAqB,EAAE,KAAmB;QAEjE,IAAI,KAAK,EACT;YACI,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAClC;gBACI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACnE;SACJ;IACL,CAAC;IAEO,mBAAmB,CAAC,IAAqB,EAAE,MAAsB;QAErE,IAAI,MAAM,EACV;YACI,KAAK,MAAM,KAAK,IAAI,MAAM,EAC1B;gBACI,IAAI,KAAK,CAAC,IAAI,EACd;oBACI,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EACxC;wBACI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;qBACpE;iBACJ;aACJ;SACJ;IACL,CAAC;IAEO,oBAAoB,CAAC,IAAqB,EAAE,OAAyB;QAEzE,IAAI,OAAO,EACX;YACI,KAAK,MAAM,GAAG,IAAI,OAAO,EACzB;gBACI,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EACpC;oBACI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBAClE;aACJ;SACJ;IACL,CAAC;IAEO,qBAAqB,CAAC,IAAqB;QAE/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EACjC;YACI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACjC;IACL,CAAC;IAEO,UAAU;QAEd,cAAK,CAAC,kEAAkE,CAAC,CAAC;QAC1E,cAAK,CAAC,sBAAsB,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAC/C;YACI,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAErD,IAAI,IAAI;gBACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;IACL,CAAC;IAEO,cAAc,CAAC,IAAqB,EAAE,MAAwB;QAElE,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EACtE;YACI,cAAK,CAAC,0BAA0B,wBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAChG,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,IAAI,CAAC,UAAU;eACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC;YACI,cAAK,CAAC,0BAA0B,wBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC;SACf;QAED,cAAK,CAAC,0BAA0B,wBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7H,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,QAAQ,EACZ;YACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAC7C;gBACI,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAE9D,IAAI,SAAS;oBACT,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAChC;SACJ;QAED,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EACxB;YACI,KAAK,OAAO;gBACR,IAAI,kCAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EACpC;oBAEI,OAAO,kCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACzC;qBAED;oBACI,OAAO,4BAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC9D;YAEL,KAAK,UAAU,CAAC;YAChB,KAAK,QAAQ;gBACT,IAAI,oCAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;uBAChD,IAAI,CAAC,MAAM,CAAC,IAAI;uBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAClC;oBACI,OAAO,oCAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxE;gBACD,IAAI,kCAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;uBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI;uBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;uBAC3B,CAAC,2BAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EACjC;oBACI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EACpD;wBACI,MAAM,WAAW,GAAG,IAAI,CAAC;wBACzB,IAAI,KAAK,GAAmB,IAAI,CAAC;wBACjC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,UAAS,OAAwB;4BAGxF,MAAM,YAAY,GAAoB;gCAClC,MAAM,EAAE,OAAO,CAAC,MAAM;gCACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,UAAU,EAAE,IAAI;gCAChB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;6BAC/B,CAAA;4BACD,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;wBAC7D,CAAC,CAAC,CAAC;wBACH,OAAO,KAAK,CAAC;qBAChB;yBAED;wBAEI,cAAK,CAAC,iFAAiF,CAAC,CAAC;wBACzF,OAAO,IAAI,CAAC;qBACf;iBACJ;gBACD,IAAI,wCAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAC3D;oBAEI,cAAK,CAAC,2DAA2D,CAAC,CAAC;oBACnE,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;oBAClB,OAAO,2BAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;oBAC7C,OAAO,kCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACrC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;oBACjD,OAAO,sCAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;oBAG1C,OAAO,sCAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnE,KAAK,UAAU,CAAC;YAChB,KAAK,UAAU;gBACX,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EACxB;oBACI,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAErD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;wBACxC,OAAO,kCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBACrC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;wBACjD,OAAO,sCAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACjD;gBACD,OAAO,+BAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAExD,KAAK,WAAW;gBACZ,OAAO,gCAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnE,KAAK,OAAO;gBACR,OAAO,gCAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnE,KAAK,QAAQ;gBACT,OAAO,6BAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEhE,KAAK,WAAW;gBACZ,OAAO,gCAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEpF,KAAK,SAAS;gBACV,OAAO,8BAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEjE,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC;YAEhB,KAAK,OAAO;gBAER,OAAO,IAAI,CAAC;YAChB,KAAK,QAAQ;gBACT,OAAO,IAAI,CAAC;YAChB;gBACI,OAAO,0BAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvC;IACL,CAAC;IAEO,aAAa,CAAC,MAAkB;QAGpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,kCAAmB,CAAC,MAAM,CAAC,EAC5D;YACI,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,MAAM,GAAqB,SAAS,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YACzB,MAAM,GAAG,gBAAgB,CAAC;aACzB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;YACpB,MAAM,GAAG,4BAA4B,CAAC;aACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YACzD,MAAM,GAAG,yBAAyB,CAAC;aAElC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;YACxE,MAAM,GAAG,mBAAmB,CAAC;QACjC,IAAI,MAAM;eACH,MAAM,CAAC,IAAI,KAAK,SAAS,EAChC;YACI,cAAK,CAAC,gCAAgC,wBAAe,CAAC,MAAM,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC;YACtF,OAAO,IAAI,CAAA;SACd;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAC/B;YACI,OAAO,KAAK,CAAA;SACf;QAED,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QACxH,IAAI,OAAO,EACX;YACI,cAAK,CAAC,gCAAgC,wBAAe,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;SAChG;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,QAAiB;QAEtC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,CAAC;IAEO,gBAAgB,CAAC,QAAiB;QAEtC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,CAAC;IAEO,0BAA0B,CAAC,GAAoB;QAEnD,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,EACnE;YACI,OAAO,GAAG,CAAC;SACd;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,GAAG,EACP;YACI,OAAO,GAAG,CAAC;SACd;QAED,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG;YAClC,MAAM,EAAE;gBACJ,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;gBACrB,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,YAAY;aACzB;YACD,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EACvB;YACI,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEpD,IAAI,CAAC,MAAM,EACX;gBACI,aAAI,CAAC,oCAAoC,GAAG,CAAC,MAAM,CAAC,QAAQ,qBAAqB,GAAG,CAAC,MAAM,CAAC,QAAQ,yCAAyC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3J,OAAO,GAAG,CAAC;aACd;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAExD,cAAK,CAAC,iDAAiD,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,wBAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzI,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChC;aAED;YACI,cAAK,CAAC,8DAA8D,wBAAe,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAQO,oBAAoB,CAAC,QAAgB,EAAE,MAA2C;QAEtF,SAAS,MAAM,CAAC,GAAW,IAAoB,CAAC;QAEhD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EACT;YACI,MAAM,CAAC,iCAAiC,QAAQ,YAAY,CAAC,CAAC;YAC9D,aAAI,CAAC,mBAAmB,QAAQ,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,EAC3B;YACI,MAAM,CAAC,iCAAiC,QAAQ,SAAS,wBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EACjC;YAII,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EACjC;gBACI,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,EACvD;oBACI,MAAM,CAAC,iCAAiC,QAAQ,SAAS,wBAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC1F,OAAO,KAAK,CAAC;iBAChB;aACJ;YACD,MAAM,CAAC,iCAAiC,QAAQ,YAAY,CAAC,CAAC;YAC9D,aAAI,CAAC,mBAAmB,QAAQ,aAAa,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;SACf;aAED;YACI,MAAM,CAAC,iCAAiC,QAAQ,YAAY,CAAC,CAAC;YAC9D,aAAI,CAAC,mCAAmC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IASO,kBAAkB,CACtB,QAAgB,EAAE,WAA4B,EAC9C,QAAyC,EACzC,MAA2C;QAE3C,SAAS,MAAM,CAAC,GAAW,IAAoB,CAAC;QAChD,MAAM,CAAC,wCAAwC,QAAQ,kBAAkB,wBAAe,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjH,MAAM,MAAM,GAAG,mCAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EACX;YACI,aAAI,CAAC,2BAA2B,QAAQ,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAClF,OAAO;SACV;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,WAAW,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,SAAS,CAAC,UAAS,KAAqB;YAC3C,MAAM,CAAC,+CAA+C,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACnG,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC5B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;YAG/D,QAAQ,QAAQ,EAChB;gBACI,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM,CAAC;gBACZ,KAAK,QAAQ,CAAC;gBAAC,KAAK,QAAQ,CAAC;gBAC7B,KAAK,SAAS,CAAC;gBAAC,KAAK,SAAS,CAAC;gBAC/B,KAAK,QAAQ,CAAC;gBAAC,KAAK,QAAQ,CAAC;gBAC7B,KAAK,UAAU,CAAC;gBAAC,KAAK,UAAU,CAAC;gBACjC,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ,CAAC;gBAAC,KAAK,QAAQ,CAAC;gBAC7B,KAAK,GAAG,CAAC;gBACT,KAAK,OAAO,CAAC;gBACb,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS,CAAC;gBACf,KAAK,aAAa;oBACd,OAAO;aACd;YAGD,IAAI,KAAK,GAAuB,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC5D,OAAO,KAAK,EACZ;gBACI,MAAM,CAAC,wCAAwC,KAAK,GAAG,CAAC,CAAC;gBACzD,MAAM,SAAS,GAAG;oBACd,GAAG,KAAK,IAAI,QAAQ,EAAE;oBACtB,GAAG,KAAK,IAAI,QAAQ,EAAE;oBACtB,GAAG,KAAK,IAAI,QAAQ,oBAAoB;oBACxC,GAAG,KAAK,IAAI,QAAQ,oBAAoB;iBAC3C,CAAC;gBACF,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAChC;oBACI,MAAM,CAAC,kDAAkD,QAAQ,MAAM,CAAC,CAAC;oBACzE,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAChD,IAAI,MAAM,EACV;wBACI,IAAI,MAAM,IAAI,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAChC;4BACI,MAAM,CAAC,8CAA8C,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;yBAC1F;6BAED;4BACI,MAAM,CAAC,wCAAwC,wBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACjF,QAAQ,CAAC,MAAM,CAAC,CAAC;4BACjB,WAAW,GAAG,IAAI,CAAC;yBACtB;qBACJ;iBACJ;gBAED,IAAI,WAAW,EACf;oBACI,MAAM,CAAC,oCAAoC,CAAC,CAAC;oBAC7C,OAAO;iBACV;gBAID,MAAM,SAAS,GAAgC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7E,IAAI,CAAE,SAAS;oBAAE,MAAM;gBACvB,KAAK,MAAM,0BAA0B,IAAI,4CAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,EAChF;oBACI,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EACrD;wBACI,MAAM,CAAC,oDAAoD,wBAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAEhG,OAAO;qBACV;iBACJ;gBAED,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;aACrC;YAED,aAAI,CAAC,2BAA2B,QAAQ,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAp+BD,0BAo+BC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/LICENSE b/tools/jsdoc/overte-tsd-jsdoc/LICENSE new file mode 100644 index 0000000000..ee604dfb68 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2016 Chad Engler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/jsdoc/overte-tsd-jsdoc/PropTree.js b/tools/jsdoc/overte-tsd-jsdoc/PropTree.js new file mode 100644 index 0000000000..7100b2dd97 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/PropTree.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const logger_1 = require("./logger"); +class PropTree { + constructor(props) { + this.roots = []; + this.nodes = {}; + for (let i = 0; i < props.length; ++i) { + const prop = props[i]; + if (!prop || !prop.name) { + logger_1.warn('Encountered a property with no name, this is likely due to invalid JSDoc. Skipping.'); + continue; + } + const parts = prop.name.split('.'); + this.nodes[prop.name] = { + prop, + name: parts[parts.length - 1], + children: [], + }; + } + for (let i = 0; i < props.length; ++i) { + const prop = props[i]; + if (!prop || !prop.name) + continue; + const parts = prop.name.split('.'); + const obj = this.nodes[prop.name]; + if (!obj) { + logger_1.warn('Failed to find dot-notation property in map. This is likely a bug.'); + continue; + } + if (parts.length > 1) { + parts.pop(); + let parentName = parts.join('.'); + if (parentName.endsWith('[]')) { + parentName = parentName.substring(0, parentName.length - '[]'.length); + } + const parent = this.nodes[parentName]; + if (!parent) { + continue; + } + parent.children.push(obj); + } + else { + this.roots.push(obj); + } + } + } +} +exports.PropTree = PropTree; +//# sourceMappingURL=PropTree.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/PropTree.js.map b/tools/jsdoc/overte-tsd-jsdoc/PropTree.js.map new file mode 100644 index 0000000000..99ea1f45ef --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/PropTree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PropTree.js","sourceRoot":"","sources":["../src/PropTree.ts"],"names":[],"mappings":";;AACA,qCAAgC;AAShC,MAAa,QAAQ;IAKjB,YAAY,KAAoB;QAHhC,UAAK,GAAgB,EAAE,CAAC;QACxB,UAAK,GAA0B,EAAE,CAAC;QAK9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EACrC;YACI,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EACvB;gBACI,aAAI,CAAC,qFAAqF,CAAC,CAAC;gBAC5F,SAAS;aACZ;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACpB,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7B,QAAQ,EAAE,EAAE;aACf,CAAC;SACL;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EACrC;YACI,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;gBACnB,SAAS;YAEb,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElC,IAAI,CAAC,GAAG,EACR;gBACI,aAAI,CAAC,oEAAoE,CAAC,CAAC;gBAC3E,SAAS;aACZ;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;gBACI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B;oBACI,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;iBACzE;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEtC,IAAI,CAAC,MAAM,EACX;oBAEI,SAAS;iBACZ;gBAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC7B;iBAED;gBACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aACvB;SACJ;IACL,CAAC;CACJ;AAtED,4BAsEC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/assert_never.js b/tools/jsdoc/overte-tsd-jsdoc/assert_never.js new file mode 100644 index 0000000000..42b2f38738 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/assert_never.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function assertNever(x) { + throw new Error("Unexpected object: " + JSON.stringify(x)); +} +exports.assertNever = assertNever; +//# sourceMappingURL=assert_never.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/assert_never.js.map b/tools/jsdoc/overte-tsd-jsdoc/assert_never.js.map new file mode 100644 index 0000000000..c7d223e828 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/assert_never.js.map @@ -0,0 +1 @@ +{"version":3,"file":"assert_never.js","sourceRoot":"","sources":["../src/assert_never.ts"],"names":[],"mappings":";;AAAA,SAAgB,WAAW,CAAC,CAAQ;IAEhC,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAHD,kCAGC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js b/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js new file mode 100644 index 0000000000..c6cfbc7026 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js @@ -0,0 +1,390 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = __importStar(require("typescript")); +const logger_1 = require("./logger"); +const doclet_utils_1 = require("./doclet_utils"); +const PropTree_1 = require("./PropTree"); +const type_resolve_helpers_1 = require("./type_resolve_helpers"); +const declareModifier = ts.createModifier(ts.SyntaxKind.DeclareKeyword); +const constModifier = ts.createModifier(ts.SyntaxKind.ConstKeyword); +const readonlyModifier = ts.createModifier(ts.SyntaxKind.ReadonlyKeyword); +const exportModifier = ts.createModifier(ts.SyntaxKind.ExportKeyword); +const defaultModifier = ts.createModifier(ts.SyntaxKind.DefaultKeyword); +function validateClassLikeChildren(children, validate, msg) { + if (children) { + for (let i = children.length - 1; i >= 0; --i) { + const child = children[i]; + if (!validate(child)) { + logger_1.warn(`Encountered child that is not a ${msg}, this is likely due to invalid JSDoc.`, child); + children.splice(i, 1); + } + } + } +} +function validateClassChildren(children) { + validateClassLikeChildren(children, ts.isClassElement, 'ClassElement'); +} +function validateInterfaceChildren(children) { + validateClassLikeChildren(children, ts.isTypeElement, 'TypeElement'); +} +function validateModuleChildren(children) { + if (children) { + for (let i = children.length - 1; i >= 0; --i) { + const child = children[i]; + if (!ts.isClassDeclaration(child) + && !ts.isInterfaceDeclaration(child) + && !ts.isFunctionDeclaration(child) + && !ts.isEnumDeclaration(child) + && !ts.isModuleDeclaration(child) + && !ts.isTypeAliasDeclaration(child) + && !ts.isVariableStatement(child) + && !ts.isExportAssignment(child)) { + logger_1.warn('Encountered child that is not a supported declaration, this is likely due to invalid JSDoc.', child); + children.splice(i, 1); + } + } + } +} +function buildName(doclet, altName) { + if (altName) + return ts.createIdentifier(altName); + if (doclet.name.startsWith('exports.')) + return ts.createIdentifier(doclet.name.replace('exports.', '')); + return ts.createIdentifier(doclet.name); +} +function buildOptionalName(doclet, altName) { + if (altName) + return ts.createIdentifier(altName); + if (doclet.meta && (doclet.meta.code.name === 'module.exports')) + return undefined; + if (doclet.name.startsWith('exports.')) + return ts.createIdentifier(doclet.name.replace('exports.', '')); + return ts.createIdentifier(doclet.name); +} +function formatMultilineComment(comment) { + return comment.split('\n').join('\n * '); +} +function handlePropsComment(props, jsdocTagName) { + return props.map((prop) => { + if (prop.description) { + let name; + if (prop.optional) { + if (prop.defaultvalue !== undefined) { + name = `[${prop.name} = ${prop.defaultvalue}]`; + } + else { + name = `[${prop.name}]`; + } + } + else { + name = prop.name; + } + const description = ` - ${formatMultilineComment(prop.description)}`; + return `\n * @${jsdocTagName} ${name}${description}`; + } + return ''; + }).filter((value) => value !== '').join(''); +} +function handleReturnsComment(doclet) { + if (doclet_utils_1.isFunctionDoclet(doclet) && doclet.returns) { + return doclet.returns.map((ret) => { + if (ret.description) + return `\n * @returns ${formatMultilineComment(ret.description)}`; + return ''; + }) + .filter((value) => value !== '').join(''); + } + return ''; +} +function handleExamplesComment(doclet) { + if (doclet.examples !== undefined) { + return doclet.examples.map((example) => { + return `\n * @example + * ${formatMultilineComment(example)}`; + }) + .join(''); + } + return ''; +} +function handleParamsComment(doclet) { + if ((doclet_utils_1.isClassDoclet(doclet) + || doclet_utils_1.isFileDoclet(doclet) + || doclet_utils_1.isEventDoclet(doclet) + || doclet_utils_1.isFunctionDoclet(doclet) + || doclet_utils_1.isTypedefDoclet(doclet)) + && doclet.params) { + return handlePropsComment(doclet.params, 'param'); + } + return ''; +} +function handlePropertiesComment(doclet) { + if (!doclet_utils_1.isEnumDoclet(doclet) && doclet.properties) { + return handlePropsComment(doclet.properties, 'property'); + } + return ''; +} +function handleComment(doclet, node) { + if (doclet.comment && doclet.comment.length > 4) { + let description = ''; + if (doclet.description) { + description = `\n * ${formatMultilineComment(doclet.description)}`; + } + else if (doclet_utils_1.isClassDoclet(doclet) && doclet.classdesc) { + if (!ts.isConstructorDeclaration(node)) { + description = `\n * ${formatMultilineComment(doclet.classdesc)}`; + } + } + const examples = handleExamplesComment(doclet); + const properties = handlePropertiesComment(doclet); + const params = handleParamsComment(doclet); + const returns = handleReturnsComment(doclet); + if (doclet_utils_1.isEnumDoclet(doclet)) { + if (!ts.isEnumDeclaration(node)) { + logger_1.warn(`Node is not an enum declaration, even though the doclet is. This is likely a tsd-jsdoc bug.`); + return node; + } + if (doclet.properties) { + const enumProperties = doclet.properties; + const enumMembers = node.members; + for (let index = 0; index < enumProperties.length; index++) { + const enumProperty = enumProperties[index]; + const enumMember = enumMembers[index]; + handleComment(enumProperty, enumMember); + } + } + } + if (description || examples || properties || params || returns) { + let comment = `*${description}${examples}${properties}${params}${returns} + `; + if (doclet.kind === 'typedef') { + comment = `*${description}${examples}${params}${returns} + `; + } + const kind = ts.SyntaxKind.MultiLineCommentTrivia; + ts.addSyntheticLeadingComment(node, kind, comment, true); + } + } + return node; +} +function createClass(doclet, children, altName) { + logger_1.debug(`createClass(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + validateClassChildren(children); + const mods = []; + if (!doclet.memberof) + mods.push(declareModifier); + if (doclet.meta && doclet.meta.code.name === 'module.exports') + mods.push(exportModifier, defaultModifier); + const members = children || []; + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + const heritageClauses = type_resolve_helpers_1.resolveHeritageClauses(doclet, false); + if (doclet.params) { + if (members.filter(member => ts.isConstructorDeclaration(member)).length === 0) { + logger_1.debug(`createClass(): no constructor set yet, adding one automatically`); + members.unshift(ts.createConstructor(undefined, undefined, type_resolve_helpers_1.createFunctionParams(doclet), undefined)); + } + } + if (doclet.properties) { + const tree = new PropTree_1.PropTree(doclet.properties); + nextProperty: for (let i = 0; i < tree.roots.length; ++i) { + const node = tree.roots[i]; + for (const tsProp of members.filter(member => ts.isPropertyDeclaration(member))) { + if (tsProp.name) { + const propName = tsProp.name.text; + if (propName === node.name) { + logger_1.debug(`createClass(): skipping property already declared '${node.name}'`); + continue nextProperty; + } + } + } + const opt = node.prop.optional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined; + const t = node.children.length ? type_resolve_helpers_1.createTypeLiteral(node.children, node) : type_resolve_helpers_1.resolveType(node.prop.type); + const property = ts.createProperty(undefined, undefined, node.name, opt, t, undefined); + if (node.prop.description) { + let comment = `*\n * ${node.prop.description.split(/\r\s*/).join("\n * ")}\n`; + ts.addSyntheticLeadingComment(property, ts.SyntaxKind.MultiLineCommentTrivia, comment, true); + } + members.push(property); + } + } + return handleComment(doclet, ts.createClassDeclaration(undefined, mods, buildOptionalName(doclet, altName), typeParams, heritageClauses, members)); +} +exports.createClass = createClass; +function createInterface(doclet, children, altName) { + logger_1.debug(`createInterface(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + validateInterfaceChildren(children); + const mods = doclet.memberof ? undefined : [declareModifier]; + const members = children; + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + const heritageClauses = type_resolve_helpers_1.resolveHeritageClauses(doclet, true); + return handleComment(doclet, ts.createInterfaceDeclaration(undefined, mods, buildName(doclet, altName), typeParams, heritageClauses, members)); +} +exports.createInterface = createInterface; +function createFunction(doclet, altName) { + logger_1.debug(`createFunction(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + const mods = []; + if (!doclet.memberof) + mods.push(declareModifier); + if (doclet.meta && (doclet.meta.code.name === 'module.exports')) + mods.push(exportModifier, defaultModifier); + const params = type_resolve_helpers_1.createFunctionParams(doclet); + const type = type_resolve_helpers_1.createFunctionReturnType(doclet); + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + return handleComment(doclet, ts.createFunctionDeclaration(undefined, mods, undefined, buildOptionalName(doclet, altName), typeParams, params, type, undefined)); +} +exports.createFunction = createFunction; +function createClassMethod(doclet) { + logger_1.debug(`createClassMethod(${logger_1.docletDebugInfo(doclet)})`); + const mods = []; + const params = type_resolve_helpers_1.createFunctionParams(doclet); + const type = type_resolve_helpers_1.createFunctionReturnType(doclet); + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + if (!doclet.memberof) + mods.push(declareModifier); + if (doclet.access === 'private') + mods.push(ts.createModifier(ts.SyntaxKind.PrivateKeyword)); + else if (doclet.access === 'protected') + mods.push(ts.createModifier(ts.SyntaxKind.ProtectedKeyword)); + else if (doclet.access === 'public') + mods.push(ts.createModifier(ts.SyntaxKind.PublicKeyword)); + if (doclet.scope === 'static') + mods.push(ts.createModifier(ts.SyntaxKind.StaticKeyword)); + const [name, questionToken] = type_resolve_helpers_1.resolveOptionalFromName(doclet); + return handleComment(doclet, ts.createMethod(undefined, mods, undefined, name, questionToken, typeParams, params, type, undefined)); +} +exports.createClassMethod = createClassMethod; +function createInterfaceMethod(doclet) { + logger_1.debug(`createInterfaceMethod(${logger_1.docletDebugInfo(doclet)})`); + const mods = []; + const params = type_resolve_helpers_1.createFunctionParams(doclet); + const type = type_resolve_helpers_1.createFunctionReturnType(doclet); + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + const [name, questionToken] = type_resolve_helpers_1.resolveOptionalFromName(doclet); + return handleComment(doclet, ts.createMethodSignature(typeParams, params, type, name, questionToken)); +} +exports.createInterfaceMethod = createInterfaceMethod; +function createEnum(doclet, altName) { + logger_1.debug(`createEnum(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + const mods = []; + const props = []; + if (!doclet.memberof) + mods.push(declareModifier); + if (doclet.kind === 'constant') + mods.push(constModifier); + if (doclet.properties && doclet.properties.length) { + for (let i = 0; i < doclet.properties.length; ++i) { + const p = doclet.properties[i]; + const l = p.defaultvalue !== undefined ? ts.createLiteral(p.defaultvalue) : undefined; + props.push(ts.createEnumMember(p.name, l)); + } + } + return handleComment(doclet, ts.createEnumDeclaration(undefined, mods, buildName(doclet, altName), props)); +} +exports.createEnum = createEnum; +function createClassMember(doclet) { + logger_1.debug(`createClassMember(${logger_1.docletDebugInfo(doclet)})`); + const type = type_resolve_helpers_1.resolveType(doclet.type, doclet); + const mods = getAccessModifiers(doclet); + if (doclet.scope === 'static') + mods.push(ts.createModifier(ts.SyntaxKind.StaticKeyword)); + if (doclet.kind === 'constant' || doclet.readonly) + mods.push(readonlyModifier); + const [name, questionToken] = type_resolve_helpers_1.resolveOptionalFromName(doclet); + return handleComment(doclet, ts.createProperty(undefined, mods, name, questionToken, type, undefined)); +} +exports.createClassMember = createClassMember; +function getAccessModifiers(doclet) { + const mods = []; + if (doclet.access === 'private' || doclet.access === 'package') + mods.push(ts.createModifier(ts.SyntaxKind.PrivateKeyword)); + else if (doclet.access === 'protected') + mods.push(ts.createModifier(ts.SyntaxKind.ProtectedKeyword)); + else if (doclet.access === 'public') + mods.push(ts.createModifier(ts.SyntaxKind.PublicKeyword)); + return mods; +} +function createConstructor(doclet) { + logger_1.debug(`createConstructor(${logger_1.docletDebugInfo(doclet)})`); + return handleComment(doclet, ts.createConstructor(undefined, getAccessModifiers(doclet), type_resolve_helpers_1.createFunctionParams(doclet), undefined)); +} +exports.createConstructor = createConstructor; +function createInterfaceMember(doclet) { + logger_1.debug(`createInterfaceMember(${logger_1.docletDebugInfo(doclet)})`); + const mods = []; + const type = type_resolve_helpers_1.resolveType(doclet.type, doclet); + if (doclet.kind === 'constant') + mods.push(readonlyModifier); + if (doclet.scope === 'static') + mods.push(ts.createModifier(ts.SyntaxKind.StaticKeyword)); + const [name, questionToken] = type_resolve_helpers_1.resolveOptionalFromName(doclet); + return handleComment(doclet, ts.createPropertySignature(mods, name, questionToken, type, undefined)); +} +exports.createInterfaceMember = createInterfaceMember; +function createNamespaceMember(doclet, altName) { + logger_1.debug(`createNamespaceMember(${logger_1.docletDebugInfo(doclet)})`); + const mods = doclet.memberof ? undefined : [declareModifier]; + const flags = (doclet.kind === 'constant' || doclet.readonly) ? ts.NodeFlags.Const : undefined; + const literalValue = doclet.defaultvalue !== undefined ? doclet.defaultvalue + : doclet.meta && doclet.meta.code.type === 'Literal' ? doclet.meta.code.value + : undefined; + const initializer = (flags === ts.NodeFlags.Const && literalValue !== undefined) ? ts.createLiteral(literalValue) : undefined; + const type = initializer ? undefined : type_resolve_helpers_1.resolveType(doclet.type, doclet); + return handleComment(doclet, ts.createVariableStatement(mods, ts.createVariableDeclarationList([ + ts.createVariableDeclaration(buildName(doclet, altName), type, initializer) + ], flags))); +} +exports.createNamespaceMember = createNamespaceMember; +function createExportDefault(doclet, value) { + logger_1.debug(`createExportDefault(${logger_1.docletDebugInfo(doclet)}, '${value}')`); + const expression = ts.createIdentifier(value); + return handleComment(doclet, ts.createExportDefault(expression)); +} +exports.createExportDefault = createExportDefault; +function createModule(doclet, nested, children) { + logger_1.debug(`createModule(${logger_1.docletDebugInfo(doclet)})`); + validateModuleChildren(children); + const mods = doclet.memberof ? undefined : [declareModifier]; + let body = undefined; + let flags = ts.NodeFlags.None; + if (nested) + flags |= ts.NodeFlags.NestedNamespace; + if (children) + body = ts.createModuleBlock(children); + let nameStr = doclet.name; + if ((nameStr[0] === '"' && nameStr[nameStr.length - 1] === '"') + || (nameStr[0] === '\'' && nameStr[nameStr.length - 1] === '\'')) { + nameStr = nameStr.substr(1, nameStr.length - 2); + } + const name = ts.createStringLiteral(nameStr); + return handleComment(doclet, ts.createModuleDeclaration(undefined, mods, name, body, flags)); +} +exports.createModule = createModule; +function createNamespace(doclet, nested, children, altName) { + logger_1.debug(`createNamespace(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + validateModuleChildren(children); + const mods = doclet.memberof ? undefined : [declareModifier]; + let body = undefined; + let flags = ts.NodeFlags.Namespace; + if (nested) + flags |= ts.NodeFlags.NestedNamespace; + if (children) { + body = ts.createModuleBlock(children); + } + return handleComment(doclet, ts.createModuleDeclaration(undefined, mods, buildName(doclet, altName), body, flags)); +} +exports.createNamespace = createNamespace; +function createTypedef(doclet, children, altName) { + logger_1.debug(`createTypedef(${logger_1.docletDebugInfo(doclet)}, altName=${altName})`); + const mods = doclet.memberof ? undefined : [declareModifier]; + const type = type_resolve_helpers_1.resolveType(doclet.type, doclet); + const typeParams = type_resolve_helpers_1.resolveTypeParameters(doclet); + return handleComment(doclet, ts.createTypeAliasDeclaration(undefined, mods, buildName(doclet, altName), typeParams, type)); +} +exports.createTypedef = createTypedef; +//# sourceMappingURL=create_helpers.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js.map b/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js.map new file mode 100644 index 0000000000..d5e0f9726d --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/create_helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create_helpers.js","sourceRoot":"","sources":["../src/create_helpers.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAiC;AACjC,qCAAwD;AACxD,iDAA6H;AAC7H,yCAAsC;AACtC,iEAQgC;AAEhC,MAAM,eAAe,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACxE,MAAM,aAAa,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACpE,MAAM,gBAAgB,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAC1E,MAAM,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACtE,MAAM,eAAe,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAExE,SAAS,yBAAyB,CAAC,QAA+B,EAAE,QAAiC,EAAE,GAAW;IAI9G,IAAI,QAAQ,EACZ;QACI,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAC7C;YACI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB;gBACI,aAAI,CAAC,mCAAmC,GAAG,wCAAwC,EAAE,KAAK,CAAC,CAAC;gBAC5F,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACzB;SACJ;KACJ;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA+B;IAE1D,yBAAyB,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,yBAAyB,CAAC,QAA+B;IAE9D,yBAAyB,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAoB;IAIhD,IAAI,QAAQ,EACZ;QACI,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAC7C;YACI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;mBAC1B,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;mBACjC,CAAC,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC;mBAChC,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;mBAC5B,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;mBAC9B,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;mBACjC,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;mBAC9B,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EACpC;gBACI,aAAI,CAAC,6FAA6F,EAAE,KAAK,CAAC,CAAC;gBAC3G,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACzB;SACJ;KACJ;AACL,CAAC;AAED,SAAS,SAAS,CAAC,MAAmB,EAAE,OAAgB;IAEpD,IAAI,OAAO;QACP,OAAO,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAClC,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmB,EAAE,OAAgB;IAE5D,IAAI,OAAO;QACP,OAAO,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAC3D,OAAO,SAAS,CAAC;IACrB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAClC,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAE3C,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB,EAAE,YAAoB;IAElE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAEtB,IAAI,IAAI,CAAC,WAAW,EACpB;YACI,IAAI,IAAI,CAAC;YACT,IAAI,IAAI,CAAC,QAAQ,EACjB;gBACI,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EACnC;oBACI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,YAAY,GAAG,CAAC;iBAClD;qBAED;oBACI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;iBAC3B;aACJ;iBAED;gBACI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aACpB;YACD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,YAAY,IAAI,IAAI,GAAG,WAAW,EAAE,CAAA;SACvD;QACD,OAAO,EAAE,CAAA;IACb,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAEzC,IAAI,+BAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAC9C;QACI,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAE9B,IAAI,GAAG,CAAC,WAAW;gBACf,OAAO,iBAAiB,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAEtE,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC7C;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAe;IAE1C,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EACjC;QACI,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAEnC,OAAO;KACd,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;KACb;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe;IAExC,IAAI,CAAC,4BAAa,CAAC,MAAM,CAAC;WACnB,2BAAY,CAAC,MAAM,CAAC;WACpB,4BAAa,CAAC,MAAM,CAAC;WACrB,+BAAgB,CAAC,MAAM,CAAC;WACxB,8BAAe,CAAC,MAAM,CAAC,CAAC;WACxB,MAAM,CAAC,MAAM,EACpB;QACI,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrD;IAED,OAAO,EAAE,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAe;IAE5C,IAAI,CAAC,2BAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAC9C;QACI,OAAO,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KAC5D;IAED,OAAO,EAAE,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CAAoB,MAAe,EAAE,IAAO;IAE9D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAC/C;QACI,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,WAAW,EACtB;YACI,WAAW,GAAG,QAAQ,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;SACtE;aACI,IAAI,4BAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAClD;YAGI,IAAI,CAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EACvC;gBACI,WAAW,GAAG,QAAQ,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;aACpE;SACJ;QAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,2BAAY,CAAC,MAAM,CAAC,EACxB;YACI,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAC/B;gBACI,aAAI,CAAC,6FAA6F,CAAC,CAAC;gBACpG,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,CAAC,UAAU,EACrB;gBACI,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;gBAEjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAC1D;oBACI,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;oBAGtC,aAAa,CAAC,YAA6B,EAAE,UAAU,CAAC,CAAC;iBAC5D;aACJ;SACJ;QAED,IAAI,WAAW,IAAI,QAAQ,IAAI,UAAU,IAAI,MAAM,IAAI,OAAO,EAC9D;YACI,IAAI,OAAO,GAAG,IAAI,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO;EAClF,CAAC;YACS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAC7B;gBAEI,OAAO,GAAG,IAAI,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO;EACrE,CAAC;aACU;YAED,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC;YAClD,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;SAC5D;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,WAAW,CAAC,MAAoB,EAAE,QAAoB,EAAE,OAAgB;IAEpF,cAAK,CAAC,eAAe,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAErE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,QAA6B,IAAI,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,6CAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,MAAM,EACjB;QAEI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAC9E;YACI,cAAK,CAAC,iEAAiE,CAAC,CAAC;YACzE,OAAO,CAAC,OAAO,CACX,EAAE,CAAC,iBAAiB,CAChB,SAAS,EACT,SAAS,EACT,2CAAoB,CAAC,MAAM,CAAC,EAC5B,SAAS,CACZ,CACJ,CAAC;SACL;KACJ;IAED,IAAI,MAAM,CAAC,UAAU,EACrB;QACI,MAAM,IAAI,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE7C,YAAY,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EACxD;YACI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAG3B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,EAC/E;gBACI,IAAI,MAAM,CAAC,IAAI,EACf;oBACI,MAAM,QAAQ,GAAiB,MAAM,CAAC,IAAK,CAAC,IAAI,CAAC;oBACjD,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAC1B;wBACI,cAAK,CAAC,sDAAsD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;wBAC1E,SAAS,YAAY,CAAC;qBACzB;iBACJ;aACJ;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,kCAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtG,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAC9B,SAAS,EACT,SAAS,EACT,IAAI,CAAC,IAAI,EACT,GAAG,EACH,CAAC,EACD,SAAS,CACZ,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EACzB;gBACI,IAAI,OAAO,GAAG,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9E,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;aAC/F;YAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1B;KACJ;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAClD,SAAS,EACT,IAAI,EACJ,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EACV,eAAe,EACf,OAAO,CACV,CAAC,CAAC;AACP,CAAC;AApFD,kCAoFC;AAED,SAAgB,eAAe,CAAC,MAAoB,EAAE,QAAoB,EAAE,OAAgB;IAExF,cAAK,CAAC,mBAAmB,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAEzE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,QAA4B,CAAC;IAC7C,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,6CAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7D,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,0BAA0B,CACtD,SAAS,EACT,IAAI,EACJ,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,UAAU,EACV,eAAe,EACf,OAAO,CACV,CAAC,CAAC;AACP,CAAC;AAnBD,0CAmBC;AAED,SAAgB,cAAc,CAAC,MAAuB,EAAE,OAAgB;IAEpE,cAAK,CAAC,kBAAkB,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAExE,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,MAAM,CAAC,QAAQ;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,2CAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,+CAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,yBAAyB,CACrD,SAAS,EACT,IAAI,EACJ,SAAS,EACT,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EACV,MAAM,EACN,IAAI,EACJ,SAAS,CACZ,CAAC,CAAC;AACP,CAAC;AAvBD,wCAuBC;AAED,SAAgB,iBAAiB,CAAC,MAAuB;IAErD,cAAK,CAAC,qBAAqB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,2CAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,+CAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,QAAQ;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;SAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAE,IAAI,EAAE,aAAa,CAAE,GAAG,8CAAuB,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CACxC,SAAS,EACT,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,aAAa,EACb,UAAU,EACV,MAAM,EACN,IAAI,EACJ,SAAS,CACZ,CAAC,CAAC;AACP,CAAC;AAlCD,8CAkCC;AAED,SAAgB,qBAAqB,CAAC,MAAuB;IAEzD,cAAK,CAAC,yBAAyB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,2CAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,+CAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IAEjD,MAAM,CAAE,IAAI,EAAE,aAAa,CAAE,GAAG,8CAAuB,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CACjD,UAAU,EACV,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,aAAa,CAChB,CAAC,CAAC;AACP,CAAC;AAjBD,sDAiBC;AAED,SAAgB,UAAU,CAAC,MAAqB,EAAE,OAAgB;IAE9D,cAAK,CAAC,cAAc,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,QAAQ;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE/B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EACjD;QACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EACjD;YACI,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9C;KACJ;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CACjD,SAAS,EACT,IAAI,EACJ,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,KAAK,CACR,CAAC,CAAC;AACP,CAAC;AA9BD,gCA8BC;AAED,SAAgB,iBAAiB,CAAC,MAAqB;IAEnD,cAAK,CAAC,qBAAqB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,kCAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAkB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ;QAC7C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEhC,MAAM,CAAE,IAAI,EAAE,aAAa,CAAE,GAAG,8CAAuB,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAC1C,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,SAAS,CACZ,CAAC,CAAC;AACP,CAAC;AAvBD,8CAuBC;AAED,SAAS,kBAAkB,CAAC,MAAoC;IAE5D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;SAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9D,OAAO,IAAI,CAAA;AACf,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAoB;IAElD,cAAK,CAAC,qBAAqB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvD,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAC7C,SAAS,EACT,kBAAkB,CAAC,MAAM,CAAC,EAC1B,2CAAoB,CAAC,MAAM,CAAC,EAC5B,SAAS,CACZ,CAAC,CAAA;AACN,CAAC;AAVD,8CAUC;AAED,SAAgB,qBAAqB,CAAC,MAAqB;IAEvD,cAAK,CAAC,yBAAyB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,kCAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAE,IAAI,EAAE,aAAa,CAAE,GAAG,8CAAuB,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CACnD,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,SAAS,CACZ,CAAC,CAAC;AACP,CAAC;AArBD,sDAqBC;AAMD,SAAgB,qBAAqB,CAAC,MAAqB,EAAE,OAAgB;IAEzE,cAAK,CAAC,yBAAyB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/F,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;QACvD,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAC7E,CAAC,CAAC,SAAS,CAAC;IACjC,MAAM,WAAW,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAG9H,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAExE,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CACnD,IAAI,EACJ,EAAE,CAAC,6BAA6B,CAAC;QAC7B,EAAE,CAAC,yBAAyB,CACxB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,IAAI,EACJ,WAAW,CACV;KACJ,EACD,KAAK,CACR,CACJ,CAAC,CAAC;AACP,CAAC;AA3BD,sDA2BC;AAED,SAAgB,mBAAmB,CAAC,MAAqB,EAAE,KAAa;IAEpE,cAAK,CAAC,uBAAuB,wBAAe,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IAErE,MAAM,UAAU,GAAmB,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,CAAC;AAND,kDAMC;AAED,SAAgB,YAAY,CAAC,MAAwB,EAAE,MAAe,EAAE,QAAoB;IAExF,cAAK,CAAC,gBAAgB,wBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAElD,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,IAAI,GAA+B,SAAS,CAAC;IACjD,IAAI,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;IAE9B,IAAI,MAAM;QACN,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC;IAE1C,IAAI,QAAQ;QACR,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAA0B,CAAC,CAAC;IAE5D,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;WACxD,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EACpE;QACI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACnD;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CACnD,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,CACR,CAAC,CAAC;AACP,CAAC;AAhCD,oCAgCC;AAED,SAAgB,eAAe,CAAC,MAAwB,EAAE,MAAe,EAAE,QAAoB,EAAE,OAAgB;IAE7G,cAAK,CAAC,mBAAmB,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAEzE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,IAAI,GAA+B,SAAS,CAAC;IACjD,IAAI,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;IAEnC,IAAI,MAAM;QACN,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC;IAE1C,IAAI,QAAQ,EACZ;QACI,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAA0B,CAAC,CAAC;KAC3D;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CACnD,SAAS,EACT,IAAI,EACJ,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,IAAI,EACJ,KAAK,CACR,CAAC,CAAC;AACP,CAAC;AAzBD,0CAyBC;AAED,SAAgB,aAAa,CAAC,MAAsB,EAAE,QAAoB,EAAE,OAAgB;IAExF,cAAK,CAAC,iBAAiB,wBAAe,CAAC,MAAM,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC;IAEvE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,kCAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,4CAAqB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,0BAA0B,CACtD,SAAS,EACT,IAAI,EACJ,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,UAAU,EACV,IAAI,CACP,CAAC,CAAC;AACP,CAAC;AAfD,sCAeC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js b/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js new file mode 100644 index 0000000000..5e884697a9 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js @@ -0,0 +1,164 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const logger_1 = require("./logger"); +function isDocumentedDoclet(doclet) { + if (doclet.undocumented) + if (doclet.comment && doclet.comment.length > 0) + return true; + else + return false; + else + return true; +} +exports.isDocumentedDoclet = isDocumentedDoclet; +function hasParamsDoclet(doclet) { + if (doclet.kind === 'class' + || doclet.kind === 'interface' + || doclet.kind === 'mixin' + || doclet.kind === 'file' + || doclet.kind === 'event' + || doclet.kind === 'function' + || doclet.kind === 'callback' + || doclet.kind === 'typedef') { + if (doclet.params && doclet.params.length > 0) + return true; + } + return false; +} +exports.hasParamsDoclet = hasParamsDoclet; +function isClassDoclet(doclet) { + return doclet.kind === 'class' || doclet.kind === 'interface' || doclet.kind === 'mixin'; +} +exports.isClassDoclet = isClassDoclet; +function isClassDeclarationDoclet(doclet) { + return !!(doclet.kind === 'class' + && doclet.meta + && (!doclet.meta.code.type + || doclet.meta.code.type === 'ClassDeclaration' + || doclet.meta.code.type === 'ClassExpression')); +} +exports.isClassDeclarationDoclet = isClassDeclarationDoclet; +function isConstructorDoclet(doclet) { + return !!(doclet.kind === 'class' + && doclet.meta + && doclet.meta.code.type === 'MethodDefinition'); +} +exports.isConstructorDoclet = isConstructorDoclet; +function isFileDoclet(doclet) { + return doclet.kind === 'file'; +} +exports.isFileDoclet = isFileDoclet; +function isEventDoclet(doclet) { + return doclet.kind === 'event'; +} +exports.isEventDoclet = isEventDoclet; +function isFunctionDoclet(doclet) { + return doclet.kind === 'function' || doclet.kind === 'callback'; +} +exports.isFunctionDoclet = isFunctionDoclet; +function isMemberDoclet(doclet) { + return doclet.kind === 'member' || doclet.kind === 'constant'; +} +exports.isMemberDoclet = isMemberDoclet; +function isNamespaceDoclet(doclet) { + return doclet.kind === 'module' || doclet.kind === 'namespace'; +} +exports.isNamespaceDoclet = isNamespaceDoclet; +function isTypedefDoclet(doclet) { + return doclet.kind === 'typedef'; +} +exports.isTypedefDoclet = isTypedefDoclet; +function isPackageDoclet(doclet) { + return doclet.kind === 'package'; +} +exports.isPackageDoclet = isPackageDoclet; +function isEnumDoclet(doclet) { + return isMemberDoclet(doclet) && (doclet.isEnum === true); +} +exports.isEnumDoclet = isEnumDoclet; +function isDefaultExportDoclet(doclet, treeNodes) { + if (doclet.kind !== 'module' + && doclet.meta + && doclet.meta.code.name === 'module.exports' + && doclet.longname.startsWith('module:')) { + const moduleName = doclet.memberof ? doclet.memberof : doclet.longname; + const node = treeNodes[moduleName]; + if (node && node.doclet.kind === 'module') { + if (!doclet.memberof) { + doclet.memberof = node.doclet.longname; + logger_1.debug(`isDefaultExport(): ${logger_1.docletDebugInfo(doclet)}.memberof fixed to '${doclet.memberof}'`); + } + if (!doclet.meta.code.value) { + const sourcePath = path.join(doclet.meta.path, doclet.meta.filename); + const fd = fs.openSync(sourcePath, 'r'); + if (fd < 0) { + logger_1.warn(`Could not read from '${sourcePath}'`); + return true; + } + const begin = doclet.meta.range[0]; + const end = doclet.meta.range[1]; + const length = end - begin; + const buffer = Buffer.alloc(length); + if (fs.readSync(fd, buffer, 0, length, begin) !== length) { + logger_1.warn(`Could not read from '${sourcePath}'`); + return true; + } + doclet.meta.code.value = buffer.toString().trim(); + if (doclet.meta.code.value.endsWith(";")) + doclet.meta.code.value = doclet.meta.code.value.slice(0, -1).trimRight(); + if (doclet.meta.code.value.match(/^export +default +/)) + doclet.meta.code.value = doclet.meta.code.value.replace(/^export +default +/, ""); + logger_1.debug(`isDefaultExport(): ${logger_1.docletDebugInfo(doclet)}.meta.code.value fixed to '${doclet.meta.code.value}'`); + } + return true; + } + } + return false; +} +exports.isDefaultExportDoclet = isDefaultExportDoclet; +function isNamedExportDoclet(doclet, treeNodes) { + const node = treeNodes[doclet.longname]; + if (node && node.isNamedExport) { + return true; + } + if (doclet.kind !== 'module' + && doclet.meta + && doclet.meta.code.name + && (doclet.meta.code.name.startsWith('module.exports.') || doclet.meta.code.name.startsWith('exports.')) + && doclet.longname.startsWith('module:') + && doclet.memberof) { + const parent = treeNodes[doclet.memberof]; + if (parent && parent.doclet.kind === 'module') { + if (node) { + node.isNamedExport = true; + } + return true; + } + } + return false; +} +exports.isNamedExportDoclet = isNamedExportDoclet; +function isExportsAssignmentDoclet(doclet, treeNodes) { + if (doclet.kind === 'member' + && doclet.meta + && doclet.meta.code.name + && doclet.meta.code.name === 'exports' + && doclet.longname.startsWith('module:') + && doclet.memberof) { + const node = treeNodes[doclet.memberof]; + if (node && node.doclet.kind === 'module') + return true; + } + return false; +} +exports.isExportsAssignmentDoclet = isExportsAssignmentDoclet; +//# sourceMappingURL=doclet_utils.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js.map b/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js.map new file mode 100644 index 0000000000..3128c00874 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/doclet_utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"doclet_utils.js","sourceRoot":"","sources":["../src/doclet_utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/logger.js b/tools/jsdoc/overte-tsd-jsdoc/logger.js new file mode 100644 index 0000000000..d94c9bba99 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/logger.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const header = '[TSD-JSDoc]'; +let isVerbose = false; +function setVerbose(value) { + isVerbose = value; +} +exports.setVerbose = setVerbose; +function warn(msg, data) { + if (typeof (console) === 'undefined') + return; + let prefix = header; + if (data && data.meta) { + const meta = data.meta; + prefix = `${prefix} ${meta.filename}:${meta.lineno}:${meta.columnno}`; + } + console.warn(`${prefix} ${msg}`); + if (isVerbose && arguments.length > 1) { + console.warn(data); + } + if (isDebug) { + console.log(`${header} WARN: ${msg}`); + if (arguments.length > 1) { + console.log(data); + } + } +} +exports.warn = warn; +let isDebug = false; +function setDebug(value) { + isDebug = value; +} +exports.setDebug = setDebug; +function debug(msg, data) { + if (typeof (console) === 'undefined') + return; + if (isDebug) { + console.log(`${header} DEBUG: ${msg}`); + if (arguments.length > 1) { + console.log(data); + } + } +} +exports.debug = debug; +function docletDebugInfo(doclet) { + let debugInfo = `{longname='${doclet.longname}', kind='${doclet.kind}'`; + if ((doclet.kind !== 'package') && doclet.meta) { + if (doclet.meta.code.id) + debugInfo += `, id='${doclet.meta.code.id}'`; + if (doclet.meta.range) + debugInfo += `, range=[${doclet.meta.range[0]}-${doclet.meta.range[1]}]`; + else if (doclet.meta.lineno) + debugInfo += `, lineno=${doclet.meta.lineno}`; + } + debugInfo += `}`; + return debugInfo; +} +exports.docletDebugInfo = docletDebugInfo; +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/logger.js.map b/tools/jsdoc/overte-tsd-jsdoc/logger.js.map new file mode 100644 index 0000000000..c8bfc3f958 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG,aAAa,CAAC;AAE7B,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAgB,UAAU,CAAC,KAAc;IAErC,SAAS,GAAG,KAAK,CAAC;AACtB,CAAC;AAHD,gCAGC;AAED,SAAgB,IAAI,CAAC,GAAW,EAAE,IAAU;IAExC,IAAI,OAAM,CAAC,OAAO,CAAC,KAAK,WAAW;QAC/B,OAAO;IAEX,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EACrB;QACI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;KACzE;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAEjC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACrC;QACI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACtB;IAED,IAAI,OAAO,EACX;QAGI,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;YACI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrB;KACJ;AACL,CAAC;AA7BD,oBA6BC;AAED,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,SAAgB,QAAQ,CAAC,KAAc;IAEnC,OAAO,GAAG,KAAK,CAAC;AACpB,CAAC;AAHD,4BAGC;AAED,SAAgB,KAAK,CAAC,GAAW,EAAE,IAAU;IAEzC,IAAI,OAAM,CAAC,OAAO,CAAC,KAAK,WAAW;QAC/B,OAAO;IAEX,IAAI,OAAO,EACX;QAEI,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;YACI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrB;KACJ;AACL,CAAC;AAdD,sBAcC;AAED,SAAgB,eAAe,CAAC,MAAkB;IAC9C,IAAI,SAAS,GAAG,cAAc,MAAM,CAAC,QAAQ,YAAY,MAAM,CAAC,IAAI,GAAG,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,EAC9C;QACI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnB,SAAS,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QACjD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK;YACjB,SAAS,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;aACxE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;YACvB,SAAS,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACrD;IACD,SAAS,IAAI,GAAG,CAAC;IACjB,OAAO,SAAS,CAAC;AACrB,CAAC;AAbD,0CAaC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/package.json b/tools/jsdoc/overte-tsd-jsdoc/package.json new file mode 100644 index 0000000000..d01abc6b9a --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/package.json @@ -0,0 +1,41 @@ +{ + "name": "tsd-jsdoc", + "version": "0.0.1", + "description": "Compiles JSDoc annotated javascript into a Typescript Declaration File (.d.ts).", + "main": "dist/publish.js", + "author": "Chad Engler <chad@pantherdev.com>", + "license": "MIT", + "repository": { + "type": "git", + "url": "git@github.com:englercj/jsdoc2tsd.git" + }, + "scripts": { + "build": "tsc -p tsconfig.json", + "watch": "tsc -w -p tsconfig.json", + "prepare": "npm run build", + "test": "npm run build && mocha --ui tdd -r ts-node/register --timeout 5000 --colors test/specs/**.ts" + }, + "files": [ + "dist/*", + "README.md", + "LICENSE" + ], + "devDependencies": { + "@types/chai": "^4.1.7", + "@types/mocha": "^5.2.5", + "@types/node": "^10.12.12", + "chai": "^4.2.0", + "jsdoc": "^3.6.3", + "jsdoc-api": "^5.0.3", + "mocha": "^5.2.0", + "object-to-spawn-args": "^2.0.0", + "ts-node": "^7.0.1", + "walk-back": "^3.0.1" + }, + "peerDependencies": { + "jsdoc": "^3.6.3" + }, + "dependencies": { + "typescript": "^3.2.1" + } +} diff --git a/tools/jsdoc/overte-tsd-jsdoc/plugin.js b/tools/jsdoc/overte-tsd-jsdoc/plugin.js new file mode 100644 index 0000000000..1e9636c3ce --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/plugin.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function defineTags(dictionary) { + dictionary.defineTag("template", { + onTagged: function (doclet, tag) { + doclet.tags = doclet.tags || []; + doclet.tags.push(tag); + } + }); +} +exports.defineTags = defineTags; +; +const regexTypeOf = /typeof\s+([^\|\}]+)/g; +exports.handlers = { + jsdocCommentFound: function (event) { + let oldResult = ""; + let newResult = event.comment || ""; + while (newResult !== oldResult) { + oldResult = newResult; + newResult = newResult.replace(regexTypeOf, (typeExpression, className) => "Class<" + className + ">"); + } + event.comment = newResult; + } +}; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/plugin.js.map b/tools/jsdoc/overte-tsd-jsdoc/plugin.js.map new file mode 100644 index 0000000000..832ffcc9db --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/plugin.js.map @@ -0,0 +1 @@ +{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;AAAA,SAAgB,UAAU,CAAC,UAA0B;IACjD,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE;QAC7B,QAAQ,EAAE,UAAS,MAAM,EAAE,GAAG;YAC1B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAPD,gCAOC;AAAA,CAAC;AAEF,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAE/B,QAAA,QAAQ,GAAG;IAClB,iBAAiB,EAAE,UAAS,KAAgE;QACxF,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,OAAO,SAAS,KAAK,SAAS,EAAE;YAC5B,SAAS,GAAG,SAAS,CAAC;YACtB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;SACzG;QACD,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;IAC9B,CAAC;CACJ,CAAC"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/publish.js b/tools/jsdoc/overte-tsd-jsdoc/publish.js new file mode 100644 index 0000000000..2173872472 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/publish.js @@ -0,0 +1,82 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = __importStar(require("path")); +const fs = __importStar(require("fs")); +const helper = __importStar(require("jsdoc/util/templateHelper")); +const Emitter_1 = require("./Emitter"); +const logger_1 = require("./logger"); +function publish(data, opts) { + logger_1.setVerbose(!!opts.verbose); + logger_1.setDebug(!!opts.debug); + if (!opts.generationStrategy) { + opts.generationStrategy = 'documented'; + } + logger_1.debug(`publish(): Generation strategy: '${opts.generationStrategy}'`); + if (opts.generationStrategy === 'documented') { + data(function () { + if (this.undocumented) { + if ((!this.comment) || (this.comment === '')) { + logger_1.debug(`publish(): ${logger_1.docletDebugInfo(this)} removed`); + return true; + } + else { + logger_1.debug(`publish(): ${logger_1.docletDebugInfo(this)} saved from removal`); + } + } + return false; + }).remove(); + } + else if (opts.generationStrategy === 'exported') { + logger_1.warn(`Note: The 'exported' generation strategy is still an experimental feature for the moment, thank you for your comprehension. ` + + `Feel free to contribute in case you find a bug.`); + } + const docs = data().get().filter(d => !d.inherited || d.overrides); + const emitter = new Emitter_1.Emitter(opts); + emitter.parse(docs); + if (opts.destination === 'console') { + console.log(emitter.emit()); + } + else { + try { + fs.mkdirSync(opts.destination); + } + catch (e) { + if (e.code !== 'EEXIST') { + throw e; + } + } + let filedata = emitter.emit().toString(); + console.log('stage1 starting preprocesing'); + filedata = filedata.replace(/(: void)/gmi, ''); + filedata = filedata.replace(/(: int)/gmi, ': number'); + filedata = filedata.replace(/(numberer)/gmi, 'Inter'); + console.log('stage2 replacing Void and int'); + filedata = filedata.replace(/([a-zA-Z])~([a-zA-Z])/g, '$1.$2'); + filedata = filedata.replace(/\b(([A-Z][a-z]+)+)-(([A-Z][a-z]+)+)\b/g, '$1$3'); + console.log('stage3 removing "-" from type names'); + filedata = filedata.replace(/\b(Vec[2-4]|Mat4|Quat)\b/g, 'T$1'); + console.log('stage4 add prefix "T" to the types'); + filedata = filedata.replace(/\bdeclare namespace T(Vec[2-4]|Mat4|Quat)/g, 'declare namespace $1'); + filedata = filedata.replace(/\bT(Vec[2-4]|Mat4|Quat)\./g, '$1.'); + console.log('stage5 Restore previous names for namespace'); + filedata = filedata.replace(/function: \(/g, 'fn: ('); + console.log('stage6 "function" is really wrong name for na variable'); + const pkgArray = helper.find(data, { kind: 'package' }) || []; + const pkg = pkgArray[0]; + let definitionName = 'types'; + if (pkg && pkg.name) { + definitionName = pkg.name.split('/').pop() || definitionName; + } + const out = path.join(opts.destination, opts.outFile || `${definitionName}.d.ts`); + fs.writeFileSync(out, filedata); + } +} +exports.publish = publish; +//# sourceMappingURL=publish.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/publish.js.map b/tools/jsdoc/overte-tsd-jsdoc/publish.js.map new file mode 100644 index 0000000000..e2bd77f46f --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/publish.js.map @@ -0,0 +1 @@ +{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js b/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js new file mode 100644 index 0000000000..42b4e63a59 --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js @@ -0,0 +1,523 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = __importStar(require("typescript")); +const logger_1 = require("./logger"); +const PropTree_1 = require("./PropTree"); +const rgxObjectTokenize = /(<|>|,|\(|\)|\||\{|\}|:)/; +const rgxCommaAll = /,/g; +const rgxParensAll = /\(|\)/g; +const anyTypeNode = ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword); +const voidTypeNode = ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword); +const strTypeNode = ts.createKeywordTypeNode(ts.SyntaxKind.StringKeyword); +var ENodeType; +(function (ENodeType) { + ENodeType[ENodeType["GENERIC"] = 0] = "GENERIC"; + ENodeType[ENodeType["UNION"] = 1] = "UNION"; + ENodeType[ENodeType["FUNCTION"] = 2] = "FUNCTION"; + ENodeType[ENodeType["TUPLE"] = 3] = "TUPLE"; + ENodeType[ENodeType["TYPE"] = 4] = "TYPE"; + ENodeType[ENodeType["OBJECT"] = 5] = "OBJECT"; +})(ENodeType || (ENodeType = {})); +class StringTreeNode { + constructor(name, type, parent) { + this.name = name; + this.type = type; + this.parent = parent; + this.children = []; + } + dump(output, indent = 0) { + output(`${' '.repeat(indent)}name: ${this.name}, type:${this.typeToString()}`); + this.children.forEach((child) => { + child.dump(output, indent + 1); + }); + } + walkTypes(callback) { + for (let i = 0; i < this.children.length; ++i) { + if (this.type === ENodeType.OBJECT && (i % 2 === 0)) + continue; + this.children[i].walkTypes(callback); + } + callback(this); + } + typeToString() { + switch (this.type) { + case ENodeType.GENERIC: + return 'GENERIC'; + case ENodeType.UNION: + return 'UNION'; + case ENodeType.FUNCTION: + return 'FUNCTION'; + case ENodeType.TUPLE: + return 'TUPLE'; + case ENodeType.TYPE: + return 'TYPE'; + case ENodeType.OBJECT: + return 'OBJECT'; + default: + return 'UNKNOWN'; + } + } +} +exports.StringTreeNode = StringTreeNode; +function resolveComplexTypeName(name, doclet) { + const root = generateTree(name); + if (!root) { + logger_1.warn(`failed to generate tree for ${name}, defaulting to any`); + return anyTypeNode; + } + return resolveTree(root); +} +exports.resolveComplexTypeName = resolveComplexTypeName; +function generateTree(name, parent = null) { + const anyNode = new StringTreeNode('any', ENodeType.TYPE, parent); + const parts = name.split(rgxObjectTokenize).filter(function (e) { + return e.trim() !== ''; + }); + for (let i = 0; i < parts.length; ++i) { + const part = parts[i].trim(); + const partUpper = part.toUpperCase(); + if (part.endsWith('.')) { + const matchingIndex = findMatchingBracket(parts, i + 1, '<', '>'); + if (matchingIndex === -1) { + logger_1.warn(`Unable to find matching '<', '>' brackets in '${part}', defaulting to \`any\``, name); + return anyNode; + } + const node = new StringTreeNode(part.substring(0, part.length - 1), ENodeType.GENERIC, parent); + generateTree(parts.slice(i + 2, matchingIndex).join(''), node); + if (!parent) + return node; + parent.children.push(node); + i = matchingIndex + 1; + continue; + } + if (part === '(') { + const matchingIndex = findMatchingBracket(parts, i, '(', ')'); + if (matchingIndex === -1) { + logger_1.warn(`Unable to find matching '(', ')' brackets in '${part}', defaulting to \`any\``, name); + return anyNode; + } + const node = new StringTreeNode('Union', ENodeType.UNION, parent); + generateTree(parts.slice(i + 1, matchingIndex).join(''), node); + if (!parent) + return node; + parent.children.push(node); + i = matchingIndex + 1; + continue; + } + if (part === '{') { + const matchingIndex = findMatchingBracket(parts, i, '{', '}'); + if (matchingIndex === -1) { + logger_1.warn(`Unable to find matching '{', '}' brackets in '${part}', defaulting to \`any\``, name); + return anyNode; + } + const node = new StringTreeNode('Object', ENodeType.OBJECT, parent); + generateTree(parts.slice(i + 1, matchingIndex).join(''), node); + if (!parent) + return node; + parent.children.push(node); + i = matchingIndex + 1; + continue; + } + if (partUpper === 'FUNCTION') { + const node = new StringTreeNode(part, ENodeType.FUNCTION, parent); + let matchingIndex = findMatchingBracket(parts, i + 1, '(', ')'); + if (matchingIndex === -1) { + logger_1.warn(`Unable to find matching '(', ')' brackets in '${part}', defaulting to \`any\``, name); + return anyNode; + } + if (matchingIndex > i + 2) + generateTree(parts.slice(i + 2, matchingIndex).join(''), node); + if (parts.length > matchingIndex + 2 && parts[matchingIndex + 1] === ':') { + generateTree(parts[matchingIndex + 2], node); + matchingIndex += 2; + } + else { + node.children.push(new StringTreeNode('void', ENodeType.TYPE, node)); + } + if (!parent) + return node; + parent.children.push(node); + i = matchingIndex + 1; + continue; + } + if (part === '|' || part === ',' || part === ':') { + continue; + } + const node = new StringTreeNode(part, ENodeType.TYPE, parent); + if (part === '*') + node.name = 'any'; + else if (partUpper === 'OBJECT') + node.name = 'object'; + else if (partUpper === 'ARRAY') + node.name = 'any[]'; + if (!parent) + return node; + parent.children.push(node); + } + return anyNode; +} +exports.generateTree = generateTree; +function findMatchingBracket(parts, startIndex, openBracket, closeBracket) { + let count = 0; + for (let i = startIndex; i < parts.length; ++i) { + if (parts[i] === openBracket) { + ++count; + } + else if (parts[i] === closeBracket) { + if (--count === 0) { + return i; + } + } + } + return -1; +} +function resolveTree(node, parentTypes = null) { + const childTypes = []; + node.children.forEach((child) => resolveTree(child, childTypes)); + const upperName = node.name.toUpperCase(); + switch (node.type) { + case ENodeType.OBJECT: + const objectProperties = []; + for (var i = 0; i < node.children.length; i = i + 2) { + let valType = childTypes[i + 1]; + if (!valType) { + logger_1.warn('Unable to resolve object value type, this is likely due to invalid JSDoc. Defaulting to \`any\`.', node); + valType = anyTypeNode; + } + const property = ts.createPropertySignature(undefined, ts.createIdentifier(node.children[i].name), undefined, valType, undefined); + objectProperties.push(property); + } + const objectNode = ts.createTypeLiteralNode(objectProperties); + ts.setEmitFlags(objectNode, ts.EmitFlags.SingleLine); + if (!parentTypes) + return objectNode; + parentTypes.push(objectNode); + break; + case ENodeType.GENERIC: + let genericNode; + if (upperName === 'OBJECT') { + let keyType = childTypes[0]; + if (!keyType) { + logger_1.warn(`Unable to resolve object key type, this is likely due to invalid JSDoc. Defaulting to \`string\`.`); + keyType = strTypeNode; + } + else if (node.children[0].type !== ENodeType.TYPE || (node.children[0].name !== 'string' && node.children[0].name !== 'number')) { + logger_1.warn(`Invalid object key type. It must be \`string\` or \`number\`, but got: ${node.children[0].name}. Defaulting to \`string\`.`); + keyType = strTypeNode; + } + let valType = childTypes[1]; + if (!valType) { + logger_1.warn('Unable to resolve object value type, this is likely due to invalid JSDoc. Defaulting to \`any\`.', node); + valType = anyTypeNode; + } + const indexParam = ts.createParameter(undefined, undefined, undefined, 'key', undefined, keyType, undefined); + const indexSignature = ts.createIndexSignature(undefined, undefined, [indexParam], valType); + genericNode = ts.createTypeLiteralNode([indexSignature]); + } + else if (upperName === 'ARRAY') { + let valType = childTypes[0]; + if (!valType) { + logger_1.warn('Unable to resolve array value type, defaulting to \`any\`.', node); + valType = anyTypeNode; + } + genericNode = ts.createArrayTypeNode(valType); + } + else if (upperName === 'CLASS') { + let valType = childTypes[0]; + if (!valType) { + logger_1.warn('Unable to resolve class value type, defaulting to \`any\`.', node); + valType = anyTypeNode; + } + genericNode = ts.createTypeQueryNode(ts.createIdentifier(node.children[0].name)); + } + else { + if (childTypes.length === 0) { + logger_1.warn('Unable to resolve generic type, defaulting to \`any\`.', node); + childTypes.push(anyTypeNode); + } + if (upperName === 'PROMISE') { + while (childTypes.length > 1) + childTypes.pop(); + } + genericNode = ts.createTypeReferenceNode(node.name, childTypes); + } + if (!parentTypes) + return genericNode; + parentTypes.push(genericNode); + break; + case ENodeType.UNION: + if (childTypes.length === 0) { + logger_1.warn('Unable to resolve any types for union, defaulting to \`any\`.', node); + childTypes.push(anyTypeNode); + } + const unionNode = ts.createUnionTypeNode(childTypes); + if (!parentTypes) + return unionNode; + parentTypes.push(unionNode); + break; + case ENodeType.FUNCTION: + const funcParameters = []; + if (childTypes.length === 0 || childTypes.length === 1) { + const anyArray = ts.createArrayTypeNode(anyTypeNode); + const dotDotDot = ts.createToken(ts.SyntaxKind.DotDotDotToken); + funcParameters.push(ts.createParameter(undefined, undefined, dotDotDot, 'params', undefined, anyArray, undefined)); + if (childTypes.length === 0) + childTypes.push(voidTypeNode); + } + for (var i = 0; i < node.children.length - 1; ++i) { + const param = ts.createParameter(undefined, undefined, undefined, 'arg' + i, undefined, childTypes[i], undefined); + funcParameters.push(param); + } + const functionNode = ts.createFunctionTypeNode(undefined, funcParameters, childTypes[childTypes.length - 1]); + if (!parentTypes) + return functionNode; + parentTypes.push(functionNode); + break; + case ENodeType.TYPE: + const typeNode = ts.createTypeReferenceNode(node.name, undefined); + if (!parentTypes) + return typeNode; + parentTypes.push(typeNode); + break; + } + return anyTypeNode; +} +function toKeywordTypeKind(k) { + if (!k || k.length === 0) + return null; + k = k.toUpperCase(); + switch (k) { + case 'ANY': return ts.SyntaxKind.AnyKeyword; + case 'UNKNOWN': return ts.SyntaxKind.UnknownKeyword; + case 'NUMBER': return ts.SyntaxKind.NumberKeyword; + case 'BIGINT': return ts.SyntaxKind.BigIntKeyword; + case 'OBJECT': return ts.SyntaxKind.ObjectKeyword; + case 'BOOLEAN': return ts.SyntaxKind.BooleanKeyword; + case 'BOOL': return ts.SyntaxKind.BooleanKeyword; + case 'STRING': return ts.SyntaxKind.StringKeyword; + case 'SYMBOL': return ts.SyntaxKind.SymbolKeyword; + case 'THIS': return ts.SyntaxKind.ThisKeyword; + case 'VOID': return ts.SyntaxKind.VoidKeyword; + case 'UNDEFINED': return ts.SyntaxKind.UndefinedKeyword; + case 'NULL': return ts.SyntaxKind.NullKeyword; + case 'NEVER': return ts.SyntaxKind.NeverKeyword; + default: + return null; + } +} +exports.toKeywordTypeKind = toKeywordTypeKind; +function resolveOptionalParameter(doclet) { + if (doclet.defaultvalue || doclet.optional) + return ts.createToken(ts.SyntaxKind.QuestionToken); + return undefined; +} +exports.resolveOptionalParameter = resolveOptionalParameter; +function resolveVariableParameter(doclet) { + if (doclet.variable) + return ts.createToken(ts.SyntaxKind.DotDotDotToken); + return undefined; +} +exports.resolveVariableParameter = resolveVariableParameter; +function resolveOptionalFromName(doclet) { + let name = doclet.name; + if (name.startsWith('[') && name.endsWith(']')) { + name = name.substring(1, name.length - 1); + return [name, ts.createToken(ts.SyntaxKind.QuestionToken)]; + } + if (doclet.optional) { + return [name, ts.createToken(ts.SyntaxKind.QuestionToken)]; + } + return [name, undefined]; +} +exports.resolveOptionalFromName = resolveOptionalFromName; +function getExprWithTypeArgs(identifier) { + const expr = ts.createIdentifier(identifier); + return ts.createExpressionWithTypeArguments(undefined, expr); +} +function resolveHeritageClauses(doclet, onlyExtend) { + const clauses = []; + let extensions = doclet.augments || []; + if (onlyExtend) { + extensions = extensions.concat(doclet.implements || []); + extensions = extensions.concat(doclet.mixes || []); + } + if (extensions.length) { + clauses.push(ts.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, extensions.map(getExprWithTypeArgs))); + } + if (onlyExtend) + return clauses; + let implementations = (doclet.implements || []).concat(doclet.mixes || []); + if (implementations.length) { + clauses.push(ts.createHeritageClause(ts.SyntaxKind.ImplementsKeyword, implementations.map(getExprWithTypeArgs))); + } + return clauses; +} +exports.resolveHeritageClauses = resolveHeritageClauses; +function resolveTypeParameters(doclet) { + const typeParams = []; + if (doclet.tags) { + for (let i = 0; i < doclet.tags.length; ++i) { + const tag = doclet.tags[i]; + if (tag.title === 'template') { + onTemplateTag(tag.text); + } + } + } + else if (doclet.comment && doclet.comment.includes('@template')) { + logger_1.debug(`resolveTypeParameters(): jsdoc@3.6.x @template handling directly in the comment text for ${logger_1.docletDebugInfo(doclet)}`); + for (let line of doclet.comment.split(/\r?\n/)) { + line = line.trim(); + if (line.startsWith('*')) + line = line.slice(1).trim(); + if (line.startsWith('@template')) { + line = line.slice('@template'.length).trim(); + onTemplateTag(line); + } + } + } + function onTemplateTag(tagText) { + const types = (tagText || 'T').split(','); + for (let x = 0; x < types.length; ++x) { + const name = types[x].trim(); + if (!name) + continue; + typeParams.push(ts.createTypeParameterDeclaration(name, undefined, undefined)); + } + } + return typeParams; +} +exports.resolveTypeParameters = resolveTypeParameters; +function resolveType(t, doclet) { + if (!t || !t.names || t.names.length === 0) { + if (doclet && doclet.properties) + return resolveTypeName('object', doclet); + if (doclet) { + logger_1.warn(`Unable to resolve type for ${doclet.longname || doclet.name}, none specified in JSDoc. Defaulting to \`any\`.`, doclet); + } + else { + logger_1.warn(`Unable to resolve type for an unnamed item, this is likely due to invalid JSDoc.` + + ` Often this is caused by invalid JSDoc on a parameter. Defaulting to \`any\`.`, doclet); + } + return anyTypeNode; + } + if (t.names.length === 1) { + return resolveTypeName(t.names[0], doclet); + } + else { + const types = []; + for (let i = 0; i < t.names.length; ++i) { + types.push(resolveTypeName(t.names[i], doclet)); + } + return ts.createUnionTypeNode(types); + } +} +exports.resolveType = resolveType; +function resolveTypeName(name, doclet) { + if (!name) { + logger_1.warn('Unable to resolve type name, it is null, undefined, or empty. Defaulting to \`any\`.', doclet); + return anyTypeNode; + } + if (name === '*') + return anyTypeNode; + const keyword = toKeywordTypeKind(name); + if (keyword !== null) { + if (keyword === ts.SyntaxKind.ThisKeyword) + return ts.createThisTypeNode(); + if (keyword === ts.SyntaxKind.ObjectKeyword) { + if (!doclet || !doclet.properties) + return anyTypeNode; + else + return resolveTypeLiteral(doclet.properties); + } + return ts.createKeywordTypeNode(keyword); + } + const upperName = name.toUpperCase(); + if (upperName === 'FUNCTION' || upperName === 'FUNCTION()') { + if (doclet && doclet.kind === 'typedef') { + const params = createFunctionParams(doclet); + const type = createFunctionReturnType(doclet); + return ts.createFunctionTypeNode(undefined, params, type); + } + else { + const anyArray = ts.createArrayTypeNode(anyTypeNode); + const dotDotDot = ts.createToken(ts.SyntaxKind.DotDotDotToken); + const param = ts.createParameter(undefined, undefined, dotDotDot, 'params', undefined, anyArray, undefined); + return ts.createFunctionTypeNode(undefined, [param], anyTypeNode); + } + } + return resolveComplexTypeName(name); +} +exports.resolveTypeName = resolveTypeName; +function resolveTypeLiteral(props) { + if (!props) + return ts.createTypeLiteralNode([]); + const tree = new PropTree_1.PropTree(props); + return createTypeLiteral(tree.roots); +} +exports.resolveTypeLiteral = resolveTypeLiteral; +function createTypeLiteral(children, parent) { + const members = []; + for (let i = 0; i < children.length; ++i) { + const node = children[i]; + const opt = node.prop.optional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined; + const t = node.children.length ? createTypeLiteral(node.children, node) : resolveType(node.prop.type); + const property = ts.createPropertySignature(undefined, node.name, opt, t, undefined); + if (!parent && (node.prop.description || node.prop.defaultvalue)) { + let comment = `*\n `; + if (node.prop.description) + comment += `* ${node.prop.description.split(/\r\s*/).join("\n * ")}\n `; + if (node.prop.defaultvalue) + comment += `* @defaultValue ${node.prop.defaultvalue}\n `; + ts.addSyntheticLeadingComment(property, ts.SyntaxKind.MultiLineCommentTrivia, comment, true); + } + members.push(property); + } + let node = ts.createTypeLiteralNode(members); + if (parent && parent.prop.type) { + const names = parent.prop.type.names; + if (names.length === 1 && names[0].toLowerCase() === 'array.<object>') { + node = ts.createArrayTypeNode(node); + } + } + return node; +} +exports.createTypeLiteral = createTypeLiteral; +function createFunctionParams(doclet) { + const params = []; + if ((doclet.kind === 'function' || doclet.kind === 'typedef') && doclet.this) { + const type = resolveType({ names: [doclet.this] }, doclet); + params.push(ts.createParameter(undefined, undefined, undefined, 'this', undefined, type, undefined)); + } + if (!doclet.params || !doclet.params.length) + return params; + const tree = new PropTree_1.PropTree(doclet.params); + for (let i = 0; i < tree.roots.length; ++i) { + const node = tree.roots[i]; + const opt = resolveOptionalParameter(node.prop); + const dots = resolveVariableParameter(node.prop); + let type = node.children.length ? createTypeLiteral(node.children, node) : resolveType(node.prop.type); + if (dots) { + type = ts.createArrayTypeNode(type); + } + params.push(ts.createParameter(undefined, undefined, dots, node.name, opt, type, undefined)); + } + return params; +} +exports.createFunctionParams = createFunctionParams; +function createFunctionReturnType(doclet) { + if (doclet.returns && doclet.returns.length === 1) { + return resolveType(doclet.returns[0].type, doclet); + } + else { + return ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword); + } +} +exports.createFunctionReturnType = createFunctionReturnType; +//# sourceMappingURL=type_resolve_helpers.js.map \ No newline at end of file diff --git a/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js.map b/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js.map new file mode 100644 index 0000000000..6859b7cb5c --- /dev/null +++ b/tools/jsdoc/overte-tsd-jsdoc/type_resolve_helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"type_resolve_helpers.js","sourceRoot":"","sources":["../src/type_resolve_helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file