From 98ee8637e6b07c3b9dc213f7c4af596035c85b9a Mon Sep 17 00:00:00 2001 From: Qi Shu Date: Mon, 8 Apr 2019 17:38:26 -0700 Subject: [PATCH] Console SQL function doc generation (#7406) * Change sql function doc generation script from Bash to Node.js * Minor code change for better reading * Disable tslint in file * clean up code * Use es6 multiline string * Solved a bug which would generate invalid TS variable if no function sections are found; in this case an empty array should be created * Edit build script --- web-console/script/build | 2 +- web-console/script/create-sql-function-doc | 77 ------------- web-console/script/create-sql-function-doc.js | 105 ++++++++++++++++++ 3 files changed, 106 insertions(+), 78 deletions(-) delete mode 100755 web-console/script/create-sql-function-doc create mode 100755 web-console/script/create-sql-function-doc.js diff --git a/web-console/script/build b/web-console/script/build index 3bb9bc122be..d3cf288ddb3 100755 --- a/web-console/script/build +++ b/web-console/script/build @@ -24,7 +24,7 @@ cp -r ./node_modules/druid-console/pages . cp ./node_modules/druid-console/index.html . echo "Adding SQL function doc..." -PATH="./target/node:$PATH" ./script/create-sql-function-doc +PATH="./target/node:$PATH" ./script/create-sql-function-doc.js echo "Transpiling ReactTable CSS..." PATH="./target/node:$PATH" ./node_modules/.bin/stylus lib/react-table.styl -o lib/react-table.css diff --git a/web-console/script/create-sql-function-doc b/web-console/script/create-sql-function-doc deleted file mode 100755 index 01421781f72..00000000000 --- a/web-console/script/create-sql-function-doc +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -readfile='../docs/content/querying/sql.md' -writefile='lib/sql-function-doc.ts' - -> "$writefile" - -cat > "$writefile" <<- EOM -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file is auto generated and should not be modified - -export interface FunctionDescription { - syntax: string; - description: string; -} - -/* tslint:disable */ -export const SQLFunctionDoc: FunctionDescription[] = [ -EOM - -isFunction=false - -while read -r line; do - if [[ $line =~ ^###.*functions$ ]]; then - isFunction=true - elif [[ $line =~ ^## ]] ; then - isFunction=false - elif [[ $isFunction == true ]]; then - if [[ $line =~ \|\`.*\`\|.*\| ]]; then - syntax=$(echo $line | grep -o '|`.*`|') - syntax=${syntax:2:${#syntax}-4} - syntax=${syntax//\\/} - description=$(echo $line | grep -o '`|.*.|') - description=${description//\"/\'} - description=${description:2:${#description}-4} - echo -e " {" >> "$writefile" - echo -e " syntax: \"$syntax\"," >> "$writefile" - echo -e " description: \"$description\"" >> "$writefile" - echo -e " }," >> "$writefile" - fi - fi -done < "$readfile" - -echo -e '];' >> "$writefile" diff --git a/web-console/script/create-sql-function-doc.js b/web-console/script/create-sql-function-doc.js new file mode 100755 index 00000000000..cf20c2378fb --- /dev/null +++ b/web-console/script/create-sql-function-doc.js @@ -0,0 +1,105 @@ +#!/usr/bin/env node + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const fs = require('fs-extra'); +const readfile = '../docs/content/querying/sql.md'; +const writefile = 'lib/sql-function-doc.ts'; + +const license = `/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */` + +const comment = `// This file is auto generated and should not be modified`; + +const disableTSlint = '/* tslint:disable */'; + +const interfaceStr = `export interface FunctionDescription { + syntax: string; + description: string; + }`; + +const heading = `${license}\n\n${comment}\n\n${interfaceStr}\n\n${disableTSlint}\n\n`; + +const readDoc = async () => { + try { + let content = `${heading}export const SQLFunctionDoc: FunctionDescription[] = [ \n`; + + const data = await fs.readFile(readfile, 'utf-8'); + const sections = data.toString().split("##"); + + sections.forEach((section) => { + + if (/^#.*functions/.test(section)) { + + section.split('\n').forEach(line => { + if (line.startsWith('|`')) { + const rawSyntax = line.match(/\|`.*`\|/g); + if (rawSyntax == null) return; + const syntax = rawSyntax[0].slice(2, -2).replace(/\\/g,''); + + const rawDescription = line.match(/`\|.*\|/g); + if (rawDescription == null) return; + const description = rawDescription[0].slice(2,-1); + + const json = { + syntax: syntax, + description: description + } + + const prettyJson = JSON.stringify(json, null, 4) + .replace('{', ' {') + .replace('}', ' }') + .replace(/\"([^(\")"]+)\":/g,"$1:"); + content += `${prettyJson},\n`; + } + }); + + } + }); + + content = content.slice(0, -2); + content += '\n];\n'; + + try { + fs.writeFile(writefile, content, 'utf-8'); + } catch (e) { + console.log(`Error when writing to ${writefile}: `, e); + } + + } catch (e) { + console.log(`Error when reading ${readfile}: `, e); + } +} + +readDoc();