esri / arcgis-js-cli Goto Github PK
View Code? Open in Web Editor NEWCLI to build a template application and widgets using the ArcGIS API for JavaScript
License: Apache License 2.0
CLI to build a template application and widgets using the ArcGIS API for JavaScript
License: Apache License 2.0
Support for ArcGIS API for JavaScript v4.10
Any plans to upgrade to ArcGIS API for JavaScript v4.10?
I understand that “-type react” for this cli is in making.
However, can we add a react component to application of type “jsapi” and make it work?
Hello,
I'm trying to implement simple coordinate conversion widget and I get this error.
export function initWidgets(view: esri.MapView | esri.SceneView) {
const legend = new Legend({ view });
const layerList = new LayerList({ view });
view.ui.add(legend, 'bottom-left');
view.ui.add(layerList, 'top-right');
view.ui.add(new CoordinateConversion({
view,
mode: 'capture',
multipleConversions: true,
}), 'bottom-left');
return view;
}
Thanks!!
It looks like the css portion of the loaders do not work on Windows.
Multiple failures while trying to parse the .scss
of the template app.
It shouldn't fail.
[./src/css/main.scss] 1.43 KiB {index} [built] [failed] [1 error]
[./src/index.ts] 323 bytes {index} [built]
+ 2032 hidden modules
ERROR in ./src/css/main.scss
Module build failed: ModuleParseError: Module parse failed: Unexpected character ' ' (1:0)
Nothing yet.
arcgis create myapp
cd myapp
npm start
4.7.2
na
na
I faced an issue on a project that started from this CLI : I recreated the package-lock.json file and then I could not build my application any more. Build throws:
Error: ENOENT: no such file or directory, open '/Users/x/Workspace/app/node_modules/dojo/dojo.js'
Indeed, no dojo folder is installed in node_modules. Taking a look at the package-lock.json file which have been updated, all the dojo dependencies from arcgis-js-api have moved from requires to dependencies:
I can reproduce this issue on the application generated by the CLI.
rm -rf node_modules && rm package-lock.json && npm install && npm run build && rm -rf node_modules && npm install && npm run build
should work
Throws error:
Error: ENOENT: no such file or directory, open '/Users/x/Workspace/app/node_modules/dojo/dojo.js'
I noticed that in the application generated by arcgis init
, package-lock.json file is not commited as it is in .gitignore. Isn't that file supposed to be commited ?
It actually solved my issue because I was building the application on gitlab runner and it would not build because of my package-lock.json that I had recreated. Removing it fixed it but is there another solution because npm mention that this file should be commited ?
I would like to be able to build the application with package-lock.json in source control.
npm start error
D:\ArcGIS_JS\jsapi-vue-app (master -> origin) ([email protected])
λ npm start
[email protected] start D:\ArcGIS_JS\jsapi-vue-app
webpack-dev-server --history-api-fallback --mode development --open
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module './dist/index.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (D:\ArcGIS_JS\jsapi-vue-app\node_modules\webpack-pwa-manifest\index.js:1:80)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (D:\ArcGIS_JS\jsapi-vue-app\webpack.config.js:10:28)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: webpack-dev-server --history-api-fallback --mode development --open
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\administere\AppData\Roaming\npm-cache_logs\2019-10-15T03_46_34_804Z-debug.log
When initializing an app in an existing directory, the only types available are "jsapi" and "react"
Types "vue" and "calcite" should be type options for the init command.
path\to\my-project>arcgis init calcite
arcgis init [type]
Initialize a new application in current directory
Options:
--version Show version number [boolean]
--type, -t A project template [choices: "jsapi", "react"] [default: "jsapi"]
-h, --help Show help [boolean]
Invalid values:
Argument: type, Given: "calcite", Choices: "jsapi", "react"
It would be nice to have a CDN version with webpack as well !
Thanks
Webpack cannot find "app" module.
When running npm run build
on node v8.9.4, build fails.
Build should work out of the box.
Build fails.
Add uppercase to 'app' when importing module in index.ts:
import App from "./widgets/App";
When deploying project to Openshift, build fails but it is working locally.
I assume it is because node version is different.
On Openshift, it is node 8.9.4. On my computer: 8.11.2
After changing the case of the import
App from "./widgets/App"`, it solved the issue.
Having hit a bug in the 4.9 API i'm having to downgrade. I have found it difficult to switch between versions once committed to coding in the cli.
It would be good if there was an easy way to switch between versions of the JS api without needing to download different versions of the CLI.
running "arcgis create --version 4.8" should create a 4.8 application without error
adding arcgis update --version 4.8 should convert the app to the target api.
Provide an option to scaffold an widget for Experience Builder
This should be a widget
option.
arcgis widget my-exb-widget -t exb
"Zoom to" of popup just centers not zoom
view.popup default action i.e. "zoom-to" do not zoom just centering
Click on "Zoom To" of popup should Center And Zoom
Click on "Zoom To" of popup just Center not Zoom
Hey @odoe.
Here's small addition to the default app to make custom themes easier.
https://github.com/COV-GIS/arcgis-js-cli/commit/094845954ad78e4496faaf323bc6c37e062726c4
Let me know what you think and if it's legit I'll PR it.
Thanks.
When running app through npm start
, the app's name is not updated in page. It works as expected (app name changed) when running npm run serve
though.
Modifying the app name in index.ts
should change the text in the header on the app
Modifying the appName
variable in index.ts
does not change the text in the header on the app (still says ARCGIS TEMPLATE APP
)
npm install -g @arcgis/cli
mkdir temp
cd temp
arcgis create demo .
npm start
src/index.ts
in a text editor, and modify the string Template App
to anything else (Ex: test
)ARCGIS TEMPLATE APP
@arcgis/[email protected]
The basic widget creation uses intern, but could possibly be updated to use jest.
I cannot manage to test code that runs asynchronously.
I read intern documentation about it and I still cannot make it works.
I have some 404 errors from webpack when running the tests.
I suspect the issue is that as intern webserver is running by default at:
http://localhost:9000/node_modules/intern/
It tries to call the tests bundle from there:
GET http://localhost:9000/node_modules/intern/12.js net::ERR_ABORTED 404 (Not Found)
while it should be and is available at:
http://localhost:9000/~tmp/12.js
As it never resolve the tested promise, Intern returns time-out:
TimeoutError: Timeout reached on intern
It should be possible to test asynchronous job.
404 errors in console, and promise never resolved so tests never successful.
Add esriRequest module at the top of the file:
import esriRequest from "esri/request";
test("can run async", () => {
var url = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson";
return esriRequest(url, {
responseType: "json"
}).then(function(response){
// The requested data
assert(true);
});
});
npm run test
I was trying to test a function returning a Promise.
Thanks for your help !
Template app does not work in IE11 because it does not have native Promise
Needs a shim
💩
Add import "@dojo/shim/Promise";
to app
💩
Style file (scss) that's got created under "styles" folder for a widget is not getting applied. Do we need to load the style file manually somewhere?
Style file should be applied on to the widget in runtime
when i use the CLI to create react app by default the CLI use intern for unit test,
how can i change it from intern to jest ?
I almost PRed this, https://github.com/COV-GIS/arcgis-js-cli/commit/fd22488314953eab1e48d86c370c675ca92daeab, but saw new features require vetting via an issue.
Problem: Every time I scaffold a widget I have to add a constructor interface and view
property. I assume that's common for most users (?).
Fix: Add those items to the template.
Created an app, cleaned node modules. Re-install. Dojo/dijit/dojo-util and dgrid are all missing. I believe this causes the following error
The app still builds after cleaning and reinstalling dependencies.
Error see image.
I added "arcgis-js-api": "^4.10.1" as a dependency manually
npm run build
gives the following error
The folder does appear to exist:
No errors on build
Above
Might be a windows issue, removing the space appears to fix it. PR coming up
render()
method of a custom widget being triggered so many times unnecessarily (I think).
It's been observed that render()
method of a custom widget is being triggered so many times. As per my knowledge render()
method should invoke only in 3 occasions as listed below.
@renderable()
is modifiedrenderNow()
scheduleRender()
render()
method should be invoked only for the occasions listed in above description.
render()
method is being called whenever clicking on the widget and after that on the map.
render()
method is being called whenever switching windows forth and back (alt + tab) then moving cursor on the map.
Do not know
arcgis create TestRender
)arcgis widget SampleWidget
)@renderable
decorator at line number 21 & 27render()
method add console.log("Called render()");
at line number 31SampleWidget
in AppViewModel.ts
at line numbers 46 & 47npm start
Console of Browser Developer Tools
I think render() method is being called unnecessarily so many times which can overload the application.
the command
arcgis widget MyWidget
There are several guides for typescript to get started, and generally these examples have aged, and require some fixing to work today. It is not clear how to include an ArcGIS CLI widget in the ArcGIS CLI created project or how to import the same widget into the ArcGIS created project. Additionally, there is a bug with the widget creation.
expected the arcgis widget template is created within the application
arcgis-js-cli/templates/basic/widget/src/widgets/WidgetName.tsx should properly replace the Widget's Name parameter in the template.. looks like its for both the <%name>Property interface and then later in the reference to this interface.
throws this error:
Error: The widget
command can only be used in a jsapi
type app scaffolded with 'arcgis-js-cli' or exb
widgets
simple update in the documentation to show how to help with widget development, or change to the CLI.
run:
arcgis create myapp
cd myapp
arcgis widget mywidget
I'm just learning how to work with typescript to extend the arcgis javascript api widgets, so this may not be a real issue. thanks.
npm version 6.13.4
vscode version 1.42.1
ArcGIS CLI broken version:4.14.2
ArcGIS CLI known good version: 4.13.0
Test that include an ESRI JS Promise never resolves in intern tests and test fails with the following error:
TimeoutError: Timeout reached on chrome 75.0.3770.100 on Mac OS X - widgets/App/AppViewModel - should resolve ESRI Promise#
@ node_modules/intern/browser/remote.js:99:10665
ESRI JS Promise never resolves but "classic" one does resolve and test succeed.
For example, in any test suite add the following sample:
import esriRequest from "esri/request";
test("should resolve ESRI Promise", async () => {
return esriRequest('https://services.arcgisonline.com/arcgis/rest/services?f=json', {
responseType: "json"
}).then(function(response:any){
assert.equal(response.data.currentVersion, '10.6');
});
});
test("should resolve a Promise", () => {
function solvePromise(resolve:any, reject:any) {
const req = new XMLHttpRequest();
req.onreadystatechange = function(event) {
if (this.readyState === XMLHttpRequest.DONE) {
if (this.status === 200) {
resolve(this.responseText);
}
}
};
req.open('GET', 'https://services.arcgisonline.com/arcgis/rest/services?f=json', true);
req.send(null);
}
var promise = new Promise(solvePromise);
return promise.then(function(value:string) {
assert.equal(JSON.parse(value).currentVersion, '10.6');
});
});
Test 'should resolve ESRI Promise' never resolve and fails with a timeout error but 'should resolve a Promise' does resolve and test succeeds.
ESRI JS Promise should resolve in intern tests and test should be successful.
ESRI JS Promise never resolves in intern test and test fails.
No idea
import esriRequest from "esri/request";
in any test suitenpm test
I cannot test any function that returns an ESRI JS Promise
Any idea @odoe ? Thanks !
Provide a vue
template for the cli
arcgis create jsapi-vue-app -t vue
should scaffold a vue application.
This will provide another framework alternative for users of the arcgis cli.
App creation only partially succeeds due to lack of node-sass; webpack failures result from lack of node-sass in the project.
This appears if there is no binding available for the version of node-sass in package.json
and compilation of node-sass fails, which I'm experiencing and seems related to this GeoNet post, where node-sass version referenced also did not have a binding available.
Scaffold a new app with all dependencies installed.
New app created without all dependencies; mixed reporting of success (something went wrong, but was installed).
Bump node-sass to ~4.12.0 in templates/basic/app/package.json
. Consider sticking with versions of node-sass that have bindings available in future releases.
npm install -g @arcgis/cli
arcgis create example
cd example
npm start
Step 2 above includes these three lines at end of output:
Running npm install
✖ Oops, something went wrong...
Done! Your ArcGIS JSAPI application has been installed!
Step 4 errors out and includes a couple of Error: Cannot find module 'node-sass'
messages.
Running npm install
in the new app directory has output that includes:
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.11.0/darwin-x64-72_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.11.0/darwin-x64-72_binding.node":
HTTP error 404 Not Found
Create an app.
The Vue template app currently uses intern for tests. Investigate maybe moving to jest or another testing library. Looks like jest could be used with vue, but there could be some build conflicts to get it to work, so will need to research further.
Working on app built with this CLI, I am trying to customize a widget view you provide, but nls files are not imported.
import * as i18nCommon from "dojo/i18n!esri/nls/common";
import * as i18n from "dojo/i18n!esri/widgets/Editor/nls/Editor";
Is there any setting that should be modified so that the import work ?
Thanks !
nls files should be imported.
nls files are not imported so there is no text on the widget
I added a simple widget search and when I hit something I get the error Uncaught (in promise).
// Widgets
import LayerList from 'esri/widgets/LayerList';
import Legend from 'esri/widgets/Legend';
import Search from 'esri/widgets/Search';
import esri = __esri;
export function initWidgets(view: esri.MapView | esri.SceneView) {
const legend = new Legend({ view });
const layerList = new LayerList({ view });
const search = new Search({ view: view });
view.ui.add(legend, 'bottom-left');
view.ui.add(layerList, 'top-right');
view.ui.add(search, 'top-right');
return view;
}
Having out of the box tests is great. But they are really slow to launch and do not lend themselves to test driven development. Is there a reason that the server starts and then shuts down rather than watching for changes? I haven't looked into this I wanted to check with you before I did.
Source maps are missing in chrome:
I also worry that users new to webpack won't know where to look for the source. Is it worth adding this to the readme?
Source maps are used for TS code
No source maps
Webpack config needs updating
Create new project and attempt to debug
Chrome latest on windows 10
After successful creation npm run start ends up with the Html Webpack Plugin error.
ERROR in chunk 0
0.dd228d767743d76848f4.js
/home/piotrek/dev/esri/hello/node_modules/arcgis-js-api/views/webgl/BufferObject.js
Cannot read property 'replace' of undefined
ERROR in chunk 1
1.b93d58426cfef4c3c98c.js
/home/piotrek/dev/esri/hello/node_modules/arcgis-js-api/views/3d/support/geometryUtils.js
Cannot read property 'replace' of undefined
ERROR in chunk 2
2.8f8a6737a979cee3510c.js
/home/piotrek/dev/esri/hello/node_modules/arcgis-js-api/views/webgl/FramebufferObject.js
Cannot read property 'replace' of undefined
ERROR in chunk 3
3.c35aae51ee2924963cd9.js
/home/piotrek/dev/esri/hello/node_modules/arcgis-js-api/views/webgl/InstanceCounter.js
Cannot read property 'replace' of undefined
ERROR in chunk 4
4.cfb4f14b056781ec34f1.js
/home/piotrek/dev/esri/hello/node_modules/arcgis-js-api/core/tsSupport/generatorHelper.js
Cannot read property 'replace' of undefined
...and so on...
No fancy things, Just running the template app. Recreated on Windows and Linux.
When a user npm i -g @arcgis/cli
, the .gitignore
in the package is converted to .npmignore
on the machine. I don't know why.
npm pack
shows all the .gitignore
files are in the tarball.
npm publish
shows that the published tarball contains the .gitignore
files.
This is insanity.
Should not rename .gitignore
files should stay .gitignore
files.
.gitignore
installed as .npmignore
I'll probably have to manually create the .gitignore
file when an application is scaffolded. Not too difficult, but why
npm i -g @arcgis/cli
arcgis create my-app
.npmignore
is contents of .gitignore
Would it be possible to make the template configuration settings (webmap id etc.) external? Currently the config is in a typescript file and baked into the bundles. This makes it difficult to re-configure an application for different environments.
My current workaround is to add all settings to a config.json file and modify webpack.config.js to ensure it doesn't get bundled:
externals: { appConfig: JSON.stringify(require("./config/config.json")) }
I think something like that in the template would be a useful addition.
after updating the cli using npm update
I am unable to run a local server or build. The interface produces
"TypeError: Cannot read property 'properties' of undefined"
I've updated the cli to 4.9. I did this by calling npm update
. This has updated the following modules
Runnig npm start
causes an error (described in section below)
Local development should initiate presenting application on browser.
The following error occurs:
C:<folderspace>\node_modules\webpack-cli\bin\config-yargs.js:89
describe: optionsSchema.definitions.output.properties.path.description,TypeError: Cannot read property 'properties' of undefined
at module.exports (C:<folderspace>\node_modules\webpack-cli\bin\config-yargs.js:89:48)
at Object. (C:<folderspace>\node_modules\webpack-dev-server\bin\webpack-dev-server.js:84:40)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] serve:webpack-dev-server --mode production --open --https --compress
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] serve script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users<username>\AppData\Roaming\npm-cache_logs\2018-09-30T08_50_49_773Z-debug.log
Related to version of webpack.
run npm install [email protected]
to fix
npm update
npm start
arcgis create -t react
npm install
npm run build
Should just build
Error: Failed to load parser '@typescript-eslint/parser' declared in '.eslintrc.js': Cannot find module 'eslint/lib/util/traverser'
Require stack:
eslint --fix "src/**/*.ts?(x)"
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\pau10549\AppData\Roaming\npm-cache_logs\2020-02-13T19_24_25_850Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! [email protected] build: npm run lint && webpack --mode production
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\pau10549\AppData\Roaming\npm-cache_logs\2020-02-13T19_24_25_896Z-debug.log
downgrade eslint: to 5.14
webpack-contrib/eslint-loader#287
I want to update the default app when using arcgis create jsapi-app
This is the proposed template app - repo | live demo
This template app will use calcite-app-components for building out the UI over a framework like React or Vue.
Hello there
I used this cli to create a react application template. I imported watchUtils in data/map.ts but cannot use it's methods as watchUtils is undefined after the import. Any help would be highly appreciated.
watchUtils's methods should be accessible after loading it with
import watchUtils from 'esri/core/watchUtils';
Getting Error message in chrome when trying to access watchUtil's methods.
Uncaught (in promise) TypeError: Cannot read property 'init' of undefined
at map.ts:21
import watchUtils from 'esri/core/watchUtils';
[...]
view.when(function(){
watchUtils.init(view, "extent", function() {
console.log("Extent changed");
});
})
Hi,
I ran into an issue when integrating the search widget (ESRI api 4) to a React App created with this cli. I would highly appreciate help or hints in this matter:
The search widget does not look or work the way I expect: No location suggestions are offered when typing and the interface looks very much different compared to how it normally looks when only using the api 4. Other widgets (such as legend, sketch) work as expected.
The widget should work and look similar to this.
The widget is displayed like this and offers no location suggestions as the user is typing
arcgis create jsapi-react-app -t react
import Search from 'esri/widgets/Search';
...
export const search = new Search({
view: view
})
view.ui.add(search, 'top-right')
Creating a FeatureLayer with client-side graphics causes a runtime error because of a missing worker module.
When creating an app with the CLI and adding a simple FeatureLayer with client-side graphics (like here), the layer cannot be created and errors are logged to the console.
The layer is added without errors.
Error: Module not found: esri/layers/graphics/sources/support/MemorySourceWorker at findModule (index.c27875b3b81d7914f7ad.js:278) at contextRequire (index.c27875b3b81d7914f7ad.js:299) at result (index.c27875b3b81d7914f7ad.js:221) at eval (workers.js:25)
It looks like a webworker (MemorySourceWorker) module cannot be resolved.
npm install
npm start
I was trying to use the sample provided here in my app. The only changes to the app template are in https://github.com/ReneU/client-side-featurelayer/blob/master/src/widgets/App.tsx
SceneView not work in 4.12, the same code worked in 4.11
Show map in 3D scene
TypeError: ve is not a constructor in SceneView.js:25:3266
Request your advise:
Which UI components (or UI library) you suggest to use along with this cli.
I would like to add UI components to widgets like DateTime picker, Calendar, Color picker, Treeview, Tabs, Accordions, etc...
Thank you.
Minor issue - when I view the help, it says index.js
everywhere it should say the command name (arcgis
).
Help text should look like what's in the README
(and not have index.js
)
Help text says index.js
everywhere it should say arcgis
:
npm install -g @arcgis/cli
arcgis --help
@arcgis/[email protected]
n/a
Windows 10
n/a
Application generated using the default template application "arcgis create jsapi-app" not working in IE11. Error logged in the browser console is "SCRIPT1010: Expected identifier".
It should work in IE11
Not working in IE11.
Working fine in Chrome.
used the arcgis cli to create app
the print widget should display with proper formatting
it does not diplay with the proper css formatting
jut trying to add the print widget from agol
Can the widget be made to look like Web AppBuilder widget (With Header, Header Icon, Moveable, Closable, Resizable)? Sample screenshot enclosed below. Request your expert advise please. Thank you.
When trying to use await on esri js promise (eg: await map.load()), I have a typescript warning:
"TS1308: 'await' expression is only allowed within an async function."
and compilation fails:
"Module parse failed: The keyword 'yield' is reserved (38:16)
You may need an appropriate loader to handle this file type."
Any idea ? Thanks !
I expected await to work on esri js api Promise.
Typescript compilation failed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.