Browse Source

first commit

zy 1 year ago
parent
commit
b1d87f54e6
100 changed files with 914 additions and 0 deletions
  1. 2 0
      .env.Dev
  2. 4 0
      .gitignore
  3. 3 0
      .npmignore
  4. 45 0
      LICENSE
  5. 306 0
      app.js
  6. BIN
      build/Release/FileGDBAPI.dll
  7. BIN
      build/Release/NCSEcw.dll
  8. BIN
      build/Release/adrg.dll
  9. BIN
      build/Release/apr_dbd_odbc-1.dll
  10. BIN
      build/Release/apr_ldap-1.dll
  11. BIN
      build/Release/cairo.dll
  12. BIN
      build/Release/cfitsio.dll
  13. BIN
      build/Release/concrt140.dll
  14. BIN
      build/Release/freexl.dll
  15. BIN
      build/Release/fribidi-0.dll
  16. BIN
      build/Release/fts5.dll
  17. BIN
      build/Release/gdal305.dll
  18. BIN
      build/Release/geos.dll
  19. BIN
      build/Release/geos_c.dll
  20. BIN
      build/Release/hdf.dll
  21. BIN
      build/Release/hdf5.dll
  22. BIN
      build/Release/hdf5_cpp.dll
  23. BIN
      build/Release/hdf5_hl.dll
  24. BIN
      build/Release/hdf5_hl_cpp.dll
  25. BIN
      build/Release/iconv-2.dll
  26. BIN
      build/Release/libapr-1.dll
  27. BIN
      build/Release/libaprutil-1.dll
  28. BIN
      build/Release/libcrypto-1_1-x64.dll
  29. BIN
      build/Release/libcurl.dll
  30. BIN
      build/Release/libexpat.dll
  31. BIN
      build/Release/libfcgi.dll
  32. BIN
      build/Release/libhttpd.dll
  33. BIN
      build/Release/libkea.dll
  34. BIN
      build/Release/libmysql.dll
  35. BIN
      build/Release/libpng16.dll
  36. BIN
      build/Release/libpq.dll
  37. BIN
      build/Release/librttopo.dll
  38. BIN
      build/Release/libssl-1_1-x64.dll
  39. BIN
      build/Release/libxml2.dll
  40. BIN
      build/Release/mapcache.dll
  41. BIN
      build/Release/mapserver.dll
  42. BIN
      build/Release/mfhdf.dll
  43. BIN
      build/Release/mod_mapcache.dll
  44. BIN
      build/Release/msplugin_mssql2008.dll
  45. BIN
      build/Release/msplugin_oracle.dll
  46. BIN
      build/Release/msvcp140.dll
  47. BIN
      build/Release/msvcp140_1.dll
  48. BIN
      build/Release/msvcp140_2.dll
  49. BIN
      build/Release/msvcp140_atomic_wait.dll
  50. BIN
      build/Release/msvcp140_codecvt_ids.dll
  51. BIN
      build/Release/napi_sample.exp
  52. BIN
      build/Release/napi_sample.iobj
  53. BIN
      build/Release/napi_sample.ipdb
  54. BIN
      build/Release/napi_sample.lib
  55. BIN
      build/Release/napi_sample.node
  56. BIN
      build/Release/napi_sample.pdb
  57. BIN
      build/Release/netcdf.dll
  58. BIN
      build/Release/obj/napi_sample/OCRenderingontours.obj
  59. BIN
      build/Release/obj/napi_sample/exports.obj
  60. BIN
      build/Release/obj/napi_sample/json_reader.obj
  61. BIN
      build/Release/obj/napi_sample/json_value.obj
  62. BIN
      build/Release/obj/napi_sample/json_writer.obj
  63. BIN
      build/Release/obj/napi_sample/mtiff.obj
  64. 11 0
      build/Release/obj/napi_sample/napi_sample.node.recipe
  65. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/CL.command.1.tlog
  66. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/CL.read.1.tlog
  67. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/CL.write.1.tlog
  68. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/link.command.1.tlog
  69. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/link.read.1.tlog
  70. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/link.write.1.tlog
  71. BIN
      build/Release/obj/napi_sample/napi_sample.tlog/link.write.2u.tlog
  72. 2 0
      build/Release/obj/napi_sample/napi_sample.tlog/napi_sample.lastbuildstate
  73. BIN
      build/Release/obj/napi_sample/nodejs/TIFOC.obj
  74. BIN
      build/Release/obj/napi_sample/win_delay_load_hook.obj
  75. BIN
      build/Release/ogdi.dll
  76. BIN
      build/Release/opencv_world451.dll
  77. BIN
      build/Release/openjp2.dll
  78. BIN
      build/Release/pcre.dll
  79. BIN
      build/Release/pcrecpp.dll
  80. BIN
      build/Release/pcreposix.dll
  81. BIN
      build/Release/proj_4_9.dll
  82. BIN
      build/Release/proj_7_2.dll
  83. BIN
      build/Release/remote.dll
  84. BIN
      build/Release/rpf.dll
  85. BIN
      build/Release/skeleton.dll
  86. BIN
      build/Release/spatialite.dll
  87. BIN
      build/Release/sqlite3.dll
  88. BIN
      build/Release/szip.dll
  89. BIN
      build/Release/tiff.dll
  90. BIN
      build/Release/tiffxx.dll
  91. BIN
      build/Release/vcruntime140.dll
  92. BIN
      build/Release/vcruntime140_1.dll
  93. BIN
      build/Release/vrf.dll
  94. BIN
      build/Release/xdr.dll
  95. BIN
      build/Release/xerces-c_3_2.dll
  96. BIN
      build/Release/zlib.dll
  97. BIN
      build/Release/zstd.dll
  98. 19 0
      build/binding.sln
  99. 362 0
      build/config.gypi
  100. 160 0
      build/napi_sample.vcxproj

+ 2 - 0
.env.Dev

@@ -0,0 +1,2 @@
+PORT=6999;
+GRIBURL='';

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+.idea
+node_modules
+grib-data
+json-data

+ 3 - 0
.npmignore

@@ -0,0 +1,3 @@
+wind-archive.zip
+grib-data
+json-data

+ 45 - 0
LICENSE

@@ -0,0 +1,45 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Cameron Beccario
+
+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.
+
+--------------------------------------------------------------------------------
+
+The MIT License (MIT)
+
+Copyright (c) 2016 Daniel Wild
+
+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.

+ 306 - 0
app.js

@@ -0,0 +1,306 @@
+var express = require("express");
+var moment = require("moment");
+var http = require('http');
+var request = require('postman-request');
+var fs = require('fs');
+var Q = require('q');
+var cors = require('cors');
+const iconv = require('iconv-lite');
+const { upload, uploadfileFn } = require("./src/tifupload");
+
+var app = express();
+var port = process.env.PORT || 7000;
+var baseDir = 'http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_1p00.pl';
+
+// cors config
+var whitelist = [
+	'http://localhost:3000',
+	'http://localhost:5000',
+];
+
+var corsOptions = {
+	origin: function (origin, callback) {
+		var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
+		callback(null, originIsWhitelisted);
+	}
+};
+
+app.listen(port, function (err) {
+	console.log(" running server on port " + port);
+});
+app.use('/public', express.static('./public'));
+app.get('/', cors(corsOptions), function (req, res) {
+	res.send('hello wind-server.. go to /latest for wind data..');
+});
+
+app.post("/file/upload", upload.single('file'), uploadfileFn)
+
+app.get('/alive', cors(corsOptions), function (req, res) {
+	res.send('wind-server is alive');
+});
+const LevelArray = ["lev_10_m_above_ground", 'lev_1000_mb', 'lev_100_mb', 'lev_250_mb', 'lev_500_mb', "lev_750_mb"];
+app.get('/latest', cors(corsOptions), function (req, res) {
+	let { leavel } = req.query;
+	if (!LevelArray.includes(leavel)) {
+		res.send({
+			code: 400,
+			message: `参数需要为${LevelArray.join(',')}其一`
+		})
+		return
+	}
+	if (!leavel) {
+		leavel = LevelArray[0]
+	}
+
+	/**
+	 * Find and return the latest available 6 hourly pre-parsed JSON data
+	 *
+	 * @param targetMoment {Object} UTC moment
+	 */
+	function sendLatest(targetMoment, repeatTime) {
+		var stamp = moment(targetMoment).format('YYYYMMDD') + '/' + roundHours(moment(targetMoment).hour(), 6) + '/atmos';
+		var fileName = __dirname + "/json-data/" + stamp.replaceAll('/', '_').replace('/a', '\\a') + leavel + ".json";
+
+		if (responseSent) {
+			return;
+		}
+
+		res.setHeader('Access-Control-Allow-Origin', '*');
+		res.setHeader('Content-Type', 'application/json');
+		res.sendFile(fileName, {}, function (err) {
+			if (err) {
+				console.log(fileName + ' doesnt exist yet, trying previous interval..');
+				if (!repeatTime) repeatTime = 0
+				sendLatest(moment(targetMoment).subtract(6, 'hours'), repeatTime++);
+				return
+			} else {
+				responseSent = true;
+			}
+		});
+		return
+	}
+
+	let responseSent = false;
+	sendLatest(moment().utc());
+});
+
+app.get('/nearest', cors(corsOptions), function (req, res, next) {
+
+	var time = req.query.timeIso;
+	var limit = req.query.searchLimit;
+	var searchForwards = false;
+
+	/**
+	 * Find and return the nearest available 6 hourly pre-parsed JSON data
+	 * If limit provided, searches backwards to limit, then forwards to limit before failing.
+	 *
+	 * @param targetMoment {Object} UTC moment
+	 */
+	function sendNearestTo(targetMoment) {
+
+		if (limit && Math.abs(moment.utc(time).diff(targetMoment, 'days')) >= limit) {
+			if (!searchForwards) {
+				searchForwards = true;
+				sendNearestTo(moment(targetMoment).add(limit, 'days'));
+				return;
+			}
+			else {
+				return next(new Error('No data within searchLimit'));
+			}
+		}
+
+		var stamp = moment(targetMoment).format('YYYYMMDD') + '/' + roundHours(moment(targetMoment).hour(), 6) + '/atmos';
+		var fileName = __dirname + "/json-data/" + stamp.replaceAll('/', '_').replace('/a', '\\a') + ".json";
+
+		res.setHeader('Content-Type', 'application/json');
+		res.sendFile(fileName, {}, function (err) {
+			if (err) {
+				var nextTarget = searchForwards ? moment(targetMoment).add(6, 'hours') : moment(targetMoment).subtract(6, 'hours');
+				sendNearestTo(nextTarget);
+			}
+		});
+	}
+
+	if (time && moment(time).isValid()) {
+		sendNearestTo(moment.utc(time));
+	}
+	else {
+		return next(new Error('Invalid params, expecting: timeIso=ISO_TIME_STRING'));
+	}
+
+});
+
+/**
+ *
+ * Ping for new data every 3 hours
+ *
+ */
+setInterval(function () {
+
+	run(moment.utc());
+
+}, 3 * 60 * 60000);
+
+/**
+ *
+ * @param targetMoment {Object} moment to check for new data
+ */
+function run(targetMoment) {
+
+	// const LevelArray = ['lev_750_mb'];
+	for (const item of LevelArray) {
+		getGribData(targetMoment, item).then(function (response) {
+			if (response.stamp) {
+				convertGribToJson(response.stamp, response.targetMoment, response.level);
+			}
+		});
+	}
+}
+
+/**
+ *
+ * Finds and returns the latest 6 hourly GRIB2 data from NOAAA
+ *
+ * @returns {*|promise}
+ */
+function getGribData(targetMoment, item) {
+
+	var deferred = Q.defer();
+
+	function runQuery(targetMoment, item) {
+		// only go 1 day deep
+		if (moment.utc().diff(targetMoment, 'days') > 2) {
+			console.log('超出限定,不再向下查询', item);
+			return;
+		}
+		var stamp = moment(targetMoment).format('YYYYMMDD') + '/' + roundHours(moment(targetMoment).hour(), 6) + '/atmos';
+		if (checkPath('json-data/' + stamp.replaceAll('/', '_') + item + '.json')) {//避免重复请求覆盖
+			runQuery(moment(targetMoment).subtract(6, 'hours'), item);
+			return
+		}
+		const param = {
+			file: 'gfs.t' + roundHours(moment(targetMoment).hour(), 6) + 'z.pgrb2.1p00.f000',
+			var_TMP: 'on',
+			var_UGRD: 'on',
+			var_VGRD: 'on',
+			leftlon: 0,
+			rightlon: 360,
+			toplat: 90,
+			bottomlat: -90,
+			dir: '/gfs.' + stamp
+		}
+		param[item] = 'on';
+		request.get({
+			url: baseDir,
+			qs: param
+			//https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_1p00.pl?file = gfs.t00z.pgrb2.1p00.f000&lev_800_mb=on&leftlon=0 &rightlon=360 & toplat=90 & bottomlat=-90 & dir=/gfs.20230302/00/atmos
+		}).on('error', function (err) {
+			runQuery(moment(targetMoment).subtract(6, 'hours'), item);
+		}).on('response', function (response) {
+			console.log('response ' + response.statusCode + ' | ' + stamp);
+			if (response.statusCode != 200) {
+				if (response.statusCode == 404) {
+					runQuery(moment(targetMoment).subtract(6, 'hours'), item);
+				} else {
+					deferred.resolve({ stamp: false, targetMoment: false, level: item });
+				}
+			} else {
+				// don't rewrite stamps
+				if (!checkPath('json-data/' + stamp.replaceAll('/', '_') + item + '.json', false)) {
+
+					console.log('转换' + stamp.replaceAll('/', '_'), item);
+
+					// mk sure we've got somewhere to put output
+					checkPath('grib-data', true);
+
+					// pipe the file, resolve the valid time stamp
+					var file = fs.createWriteStream("grib-data/" + stamp.replaceAll('/', '_') + item + ".f000");
+					response.pipe(file);
+					file.on('finish', function () {
+						file.close();
+						deferred.resolve({ stamp: stamp.replaceAll('/', '_'), targetMoment: targetMoment, level: item });
+					});
+				}
+				else {
+					console.log('already have ' + stamp.replaceAll('/', '_') + ', not looking further');
+					deferred.resolve({ stamp: false, targetMoment: false, level: item });
+				}
+			}
+		});
+	}
+
+
+
+	runQuery(targetMoment, item);
+	return deferred.promise;
+}
+
+function convertGribToJson(stamp, targetMoment, level) {
+	// debugger
+	// mk sure we've got somewhere to put output
+	checkPath('json-data', true);
+
+	var exec = require('child_process').exec, child;
+
+	var commandStr = `grib2json --data --output ./json-data/${stamp.replaceAll('/', '_').replace('/a', '\\a') + level}.json --names --compact ./grib-data/${stamp.replaceAll('/', '_').replace('/a', '\\a') + level}.f000`
+	child = exec(commandStr,
+		{ maxBuffer: 500 * 1024, encoding: 'buffer', },
+		function (error, stdout, stderr) {
+			if (error) {
+				console.log('exec error: ', error, iconv.decode(stderr, 'cp936'))
+			} else {
+				console.log("转换中..");
+				// don't keep raw grib data
+				exec('rm grib-data/*');
+
+				// if we don't have older stamp, try and harvest one
+				var prevMoment = moment(targetMoment).subtract(6, 'hours');
+				var prevStamp = prevMoment.format('YYYYMMDD') + '/' + roundHours(prevMoment.hour(), 6) + '/atmos';
+
+				if (!checkPath('json-data/' + prevStamp.replaceAll('/', '_').replace('/a', '\\a') + level + '.json', false)) {
+					console.log("attempting to harvest older data " + stamp);
+					run(prevMoment);
+				} else {
+					console.log('got older, no need to harvest further' + stamp);
+				}
+			}
+		});
+}
+
+/**
+ *
+ * Round hours to expected interval, e.g. we're currently using 6 hourly interval
+ *  00 || 06 || 12 || 18
+ *
+ * @param hours
+ * @param interval
+ * @returns {String}
+ */
+function roundHours(hours, interval) {
+	if (interval > 0) {
+		var result = (Math.floor(hours / interval) * interval);
+		return result < 10 ? '0' + result.toString() : result;
+	}
+}
+
+/**
+ * Sync check if path or file exists
+ *
+ * @param path {string}
+ * @param mkdir {boolean} create dir if doesn't exist
+ * @returns {boolean}
+ */
+function checkPath(path, mkdir) {
+	try {
+		fs.statSync(path);
+		return true;
+	} catch (e) {
+		if (mkdir) {
+			fs.mkdirSync(path);
+		}
+		return false;
+	}
+}
+
+// init harvest
+run(moment.utc());

BIN
build/Release/FileGDBAPI.dll


BIN
build/Release/NCSEcw.dll


BIN
build/Release/adrg.dll


BIN
build/Release/apr_dbd_odbc-1.dll


BIN
build/Release/apr_ldap-1.dll


BIN
build/Release/cairo.dll


BIN
build/Release/cfitsio.dll


BIN
build/Release/concrt140.dll


BIN
build/Release/freexl.dll


BIN
build/Release/fribidi-0.dll


BIN
build/Release/fts5.dll


BIN
build/Release/gdal305.dll


BIN
build/Release/geos.dll


BIN
build/Release/geos_c.dll


BIN
build/Release/hdf.dll


BIN
build/Release/hdf5.dll


BIN
build/Release/hdf5_cpp.dll


BIN
build/Release/hdf5_hl.dll


BIN
build/Release/hdf5_hl_cpp.dll


BIN
build/Release/iconv-2.dll


BIN
build/Release/libapr-1.dll


BIN
build/Release/libaprutil-1.dll


BIN
build/Release/libcrypto-1_1-x64.dll


BIN
build/Release/libcurl.dll


BIN
build/Release/libexpat.dll


BIN
build/Release/libfcgi.dll


BIN
build/Release/libhttpd.dll


BIN
build/Release/libkea.dll


BIN
build/Release/libmysql.dll


BIN
build/Release/libpng16.dll


BIN
build/Release/libpq.dll


BIN
build/Release/librttopo.dll


BIN
build/Release/libssl-1_1-x64.dll


BIN
build/Release/libxml2.dll


BIN
build/Release/mapcache.dll


BIN
build/Release/mapserver.dll


BIN
build/Release/mfhdf.dll


BIN
build/Release/mod_mapcache.dll


BIN
build/Release/msplugin_mssql2008.dll


BIN
build/Release/msplugin_oracle.dll


BIN
build/Release/msvcp140.dll


BIN
build/Release/msvcp140_1.dll


BIN
build/Release/msvcp140_2.dll


BIN
build/Release/msvcp140_atomic_wait.dll


BIN
build/Release/msvcp140_codecvt_ids.dll


BIN
build/Release/napi_sample.exp


BIN
build/Release/napi_sample.iobj


BIN
build/Release/napi_sample.ipdb


BIN
build/Release/napi_sample.lib


BIN
build/Release/napi_sample.node


BIN
build/Release/napi_sample.pdb


BIN
build/Release/netcdf.dll


BIN
build/Release/obj/napi_sample/OCRenderingontours.obj


BIN
build/Release/obj/napi_sample/exports.obj


BIN
build/Release/obj/napi_sample/json_reader.obj


BIN
build/Release/obj/napi_sample/json_value.obj


BIN
build/Release/obj/napi_sample/json_writer.obj


BIN
build/Release/obj/napi_sample/mtiff.obj


+ 11 - 0
build/Release/obj/napi_sample/napi_sample.node.recipe

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project>
+  <ProjectOutputs>
+    <ProjectOutput>
+      <FullPath>G:\Qt\TifOC\TifOC\build\Release\napi_sample.node</FullPath>
+    </ProjectOutput>
+  </ProjectOutputs>
+  <ContentFiles />
+  <SatelliteDlls />
+  <NonRecipeFileRefs />
+</Project>

BIN
build/Release/obj/napi_sample/napi_sample.tlog/CL.command.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/CL.read.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/CL.write.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/link.command.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/link.read.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/link.write.1.tlog


BIN
build/Release/obj/napi_sample/napi_sample.tlog/link.write.2u.tlog


+ 2 - 0
build/Release/obj/napi_sample/napi_sample.tlog/napi_sample.lastbuildstate

@@ -0,0 +1,2 @@
+PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.35.32215:TargetPlatformVersion=10.0.22000.0:
+Release|x64|G:\Qt\TifOC\TifOC\build\|

BIN
build/Release/obj/napi_sample/nodejs/TIFOC.obj


BIN
build/Release/obj/napi_sample/win_delay_load_hook.obj


BIN
build/Release/ogdi.dll


BIN
build/Release/opencv_world451.dll


BIN
build/Release/openjp2.dll


BIN
build/Release/pcre.dll


BIN
build/Release/pcrecpp.dll


BIN
build/Release/pcreposix.dll


BIN
build/Release/proj_4_9.dll


BIN
build/Release/proj_7_2.dll


BIN
build/Release/remote.dll


BIN
build/Release/rpf.dll


BIN
build/Release/skeleton.dll


BIN
build/Release/spatialite.dll


BIN
build/Release/sqlite3.dll


BIN
build/Release/szip.dll


BIN
build/Release/tiff.dll


BIN
build/Release/tiffxx.dll


BIN
build/Release/vcruntime140.dll


BIN
build/Release/vcruntime140_1.dll


BIN
build/Release/vrf.dll


BIN
build/Release/xdr.dll


BIN
build/Release/xerces-c_3_2.dll


BIN
build/Release/zlib.dll


BIN
build/Release/zstd.dll


+ 19 - 0
build/binding.sln

@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2015
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "napi_sample", "napi_sample.vcxproj", "{540100E4-483F-BBF1-7D5D-7E9B9812D13D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Release|x64 = Release|x64
+		Debug|x64 = Debug|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{540100E4-483F-BBF1-7D5D-7E9B9812D13D}.Release|x64.ActiveCfg = Release|x64
+		{540100E4-483F-BBF1-7D5D-7E9B9812D13D}.Release|x64.Build.0 = Release|x64
+		{540100E4-483F-BBF1-7D5D-7E9B9812D13D}.Debug|x64.ActiveCfg = Debug|x64
+		{540100E4-483F-BBF1-7D5D-7E9B9812D13D}.Debug|x64.Build.0 = Debug|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 362 - 0
build/config.gypi

@@ -0,0 +1,362 @@
+# Do not edit. File was generated by node-gyp's "configure" step
+{
+  "target_defaults": {
+    "cflags": [],
+    "default_configuration": "Release",
+    "defines": [],
+    "include_dirs": [],
+    "libraries": [],
+    "msbuild_toolset": "v143",
+    "msvs_windows_target_platform_version": "10.0.22000.0"
+  },
+  "variables": {
+    "asan": 0,
+    "coverage": "false",
+    "dcheck_always_on": 0,
+    "debug_nghttp2": "false",
+    "debug_node": "false",
+    "enable_lto": "false",
+    "enable_pgo_generate": "false",
+    "enable_pgo_use": "false",
+    "error_on_warn": "false",
+    "force_dynamic_crt": 0,
+    "host_arch": "x64",
+    "icu_data_in": "..\\..\\deps\\icu-tmp\\icudt70l.dat",
+    "icu_endianness": "l",
+    "icu_gyp_path": "tools/icu/icu-generic.gyp",
+    "icu_path": "deps/icu-small",
+    "icu_small": "false",
+    "icu_ver_major": "70",
+    "is_debug": 0,
+    "llvm_version": "0.0",
+    "napi_build_version": "8",
+    "nasm_version": "2.15",
+    "node_byteorder": "little",
+    "node_debug_lib": "false",
+    "node_enable_d8": "false",
+    "node_install_corepack": "true",
+    "node_install_npm": "true",
+    "node_library_files": [
+      "lib/assert.js",
+      "lib/async_hooks.js",
+      "lib/buffer.js",
+      "lib/child_process.js",
+      "lib/cluster.js",
+      "lib/console.js",
+      "lib/constants.js",
+      "lib/crypto.js",
+      "lib/dgram.js",
+      "lib/diagnostics_channel.js",
+      "lib/dns.js",
+      "lib/domain.js",
+      "lib/events.js",
+      "lib/fs.js",
+      "lib/http.js",
+      "lib/http2.js",
+      "lib/https.js",
+      "lib/inspector.js",
+      "lib/module.js",
+      "lib/net.js",
+      "lib/os.js",
+      "lib/path.js",
+      "lib/perf_hooks.js",
+      "lib/process.js",
+      "lib/punycode.js",
+      "lib/querystring.js",
+      "lib/readline.js",
+      "lib/repl.js",
+      "lib/stream.js",
+      "lib/string_decoder.js",
+      "lib/sys.js",
+      "lib/timers.js",
+      "lib/tls.js",
+      "lib/trace_events.js",
+      "lib/tty.js",
+      "lib/url.js",
+      "lib/util.js",
+      "lib/v8.js",
+      "lib/vm.js",
+      "lib/wasi.js",
+      "lib/worker_threads.js",
+      "lib/zlib.js",
+      "lib/_http_agent.js",
+      "lib/_http_client.js",
+      "lib/_http_common.js",
+      "lib/_http_incoming.js",
+      "lib/_http_outgoing.js",
+      "lib/_http_server.js",
+      "lib/_stream_duplex.js",
+      "lib/_stream_passthrough.js",
+      "lib/_stream_readable.js",
+      "lib/_stream_transform.js",
+      "lib/_stream_wrap.js",
+      "lib/_stream_writable.js",
+      "lib/_tls_common.js",
+      "lib/_tls_wrap.js",
+      "lib/assert/strict.js",
+      "lib/dns/promises.js",
+      "lib/fs/promises.js",
+      "lib/internal/abort_controller.js",
+      "lib/internal/assert.js",
+      "lib/internal/async_hooks.js",
+      "lib/internal/blob.js",
+      "lib/internal/blocklist.js",
+      "lib/internal/buffer.js",
+      "lib/internal/child_process.js",
+      "lib/internal/cli_table.js",
+      "lib/internal/constants.js",
+      "lib/internal/dgram.js",
+      "lib/internal/dtrace.js",
+      "lib/internal/encoding.js",
+      "lib/internal/errors.js",
+      "lib/internal/error_serdes.js",
+      "lib/internal/event_target.js",
+      "lib/internal/fixed_queue.js",
+      "lib/internal/freelist.js",
+      "lib/internal/freeze_intrinsics.js",
+      "lib/internal/heap_utils.js",
+      "lib/internal/histogram.js",
+      "lib/internal/http.js",
+      "lib/internal/idna.js",
+      "lib/internal/inspector_async_hook.js",
+      "lib/internal/js_stream_socket.js",
+      "lib/internal/linkedlist.js",
+      "lib/internal/net.js",
+      "lib/internal/options.js",
+      "lib/internal/priority_queue.js",
+      "lib/internal/promise_hooks.js",
+      "lib/internal/querystring.js",
+      "lib/internal/repl.js",
+      "lib/internal/socketaddress.js",
+      "lib/internal/socket_list.js",
+      "lib/internal/stream_base_commons.js",
+      "lib/internal/timers.js",
+      "lib/internal/trace_events_async_hooks.js",
+      "lib/internal/tty.js",
+      "lib/internal/url.js",
+      "lib/internal/util.js",
+      "lib/internal/v8_prof_polyfill.js",
+      "lib/internal/v8_prof_processor.js",
+      "lib/internal/validators.js",
+      "lib/internal/watchdog.js",
+      "lib/internal/worker.js",
+      "lib/internal/assert/assertion_error.js",
+      "lib/internal/assert/calltracker.js",
+      "lib/internal/bootstrap/environment.js",
+      "lib/internal/bootstrap/loaders.js",
+      "lib/internal/bootstrap/node.js",
+      "lib/internal/bootstrap/pre_execution.js",
+      "lib/internal/bootstrap/switches/does_not_own_process_state.js",
+      "lib/internal/bootstrap/switches/does_own_process_state.js",
+      "lib/internal/bootstrap/switches/is_main_thread.js",
+      "lib/internal/bootstrap/switches/is_not_main_thread.js",
+      "lib/internal/child_process/serialization.js",
+      "lib/internal/cluster/child.js",
+      "lib/internal/cluster/primary.js",
+      "lib/internal/cluster/round_robin_handle.js",
+      "lib/internal/cluster/shared_handle.js",
+      "lib/internal/cluster/utils.js",
+      "lib/internal/cluster/worker.js",
+      "lib/internal/console/constructor.js",
+      "lib/internal/console/global.js",
+      "lib/internal/crypto/aes.js",
+      "lib/internal/crypto/certificate.js",
+      "lib/internal/crypto/cipher.js",
+      "lib/internal/crypto/diffiehellman.js",
+      "lib/internal/crypto/dsa.js",
+      "lib/internal/crypto/ec.js",
+      "lib/internal/crypto/hash.js",
+      "lib/internal/crypto/hashnames.js",
+      "lib/internal/crypto/hkdf.js",
+      "lib/internal/crypto/keygen.js",
+      "lib/internal/crypto/keys.js",
+      "lib/internal/crypto/mac.js",
+      "lib/internal/crypto/pbkdf2.js",
+      "lib/internal/crypto/random.js",
+      "lib/internal/crypto/rsa.js",
+      "lib/internal/crypto/scrypt.js",
+      "lib/internal/crypto/sig.js",
+      "lib/internal/crypto/util.js",
+      "lib/internal/crypto/webcrypto.js",
+      "lib/internal/crypto/x509.js",
+      "lib/internal/debugger/inspect.js",
+      "lib/internal/debugger/inspect_client.js",
+      "lib/internal/debugger/inspect_repl.js",
+      "lib/internal/dns/promises.js",
+      "lib/internal/dns/utils.js",
+      "lib/internal/fs/dir.js",
+      "lib/internal/fs/promises.js",
+      "lib/internal/fs/read_file_context.js",
+      "lib/internal/fs/rimraf.js",
+      "lib/internal/fs/streams.js",
+      "lib/internal/fs/sync_write_stream.js",
+      "lib/internal/fs/utils.js",
+      "lib/internal/fs/watchers.js",
+      "lib/internal/fs/cp/cp-sync.js",
+      "lib/internal/fs/cp/cp.js",
+      "lib/internal/http2/compat.js",
+      "lib/internal/http2/core.js",
+      "lib/internal/http2/util.js",
+      "lib/internal/legacy/processbinding.js",
+      "lib/internal/main/check_syntax.js",
+      "lib/internal/main/eval_stdin.js",
+      "lib/internal/main/eval_string.js",
+      "lib/internal/main/inspect.js",
+      "lib/internal/main/print_help.js",
+      "lib/internal/main/prof_process.js",
+      "lib/internal/main/repl.js",
+      "lib/internal/main/run_main_module.js",
+      "lib/internal/main/worker_thread.js",
+      "lib/internal/modules/package_json_reader.js",
+      "lib/internal/modules/run_main.js",
+      "lib/internal/modules/cjs/helpers.js",
+      "lib/internal/modules/cjs/loader.js",
+      "lib/internal/modules/esm/assert.js",
+      "lib/internal/modules/esm/create_dynamic_module.js",
+      "lib/internal/modules/esm/fetch_module.js",
+      "lib/internal/modules/esm/formats.js",
+      "lib/internal/modules/esm/get_format.js",
+      "lib/internal/modules/esm/get_source.js",
+      "lib/internal/modules/esm/handle_process_exit.js",
+      "lib/internal/modules/esm/initialize_import_meta.js",
+      "lib/internal/modules/esm/load.js",
+      "lib/internal/modules/esm/loader.js",
+      "lib/internal/modules/esm/module_job.js",
+      "lib/internal/modules/esm/module_map.js",
+      "lib/internal/modules/esm/resolve.js",
+      "lib/internal/modules/esm/translators.js",
+      "lib/internal/perf/event_loop_delay.js",
+      "lib/internal/perf/event_loop_utilization.js",
+      "lib/internal/perf/nodetiming.js",
+      "lib/internal/perf/observe.js",
+      "lib/internal/perf/performance.js",
+      "lib/internal/perf/performance_entry.js",
+      "lib/internal/perf/timerify.js",
+      "lib/internal/perf/usertiming.js",
+      "lib/internal/perf/utils.js",
+      "lib/internal/per_context/domexception.js",
+      "lib/internal/per_context/messageport.js",
+      "lib/internal/per_context/primordials.js",
+      "lib/internal/policy/manifest.js",
+      "lib/internal/policy/sri.js",
+      "lib/internal/process/esm_loader.js",
+      "lib/internal/process/execution.js",
+      "lib/internal/process/per_thread.js",
+      "lib/internal/process/policy.js",
+      "lib/internal/process/promises.js",
+      "lib/internal/process/report.js",
+      "lib/internal/process/signal.js",
+      "lib/internal/process/task_queues.js",
+      "lib/internal/process/warning.js",
+      "lib/internal/process/worker_thread_only.js",
+      "lib/internal/readline/callbacks.js",
+      "lib/internal/readline/emitKeypressEvents.js",
+      "lib/internal/readline/interface.js",
+      "lib/internal/readline/utils.js",
+      "lib/internal/repl/await.js",
+      "lib/internal/repl/history.js",
+      "lib/internal/repl/utils.js",
+      "lib/internal/source_map/prepare_stack_trace.js",
+      "lib/internal/source_map/source_map.js",
+      "lib/internal/source_map/source_map_cache.js",
+      "lib/internal/streams/add-abort-signal.js",
+      "lib/internal/streams/buffer_list.js",
+      "lib/internal/streams/compose.js",
+      "lib/internal/streams/destroy.js",
+      "lib/internal/streams/duplex.js",
+      "lib/internal/streams/duplexify.js",
+      "lib/internal/streams/end-of-stream.js",
+      "lib/internal/streams/from.js",
+      "lib/internal/streams/lazy_transform.js",
+      "lib/internal/streams/legacy.js",
+      "lib/internal/streams/operators.js",
+      "lib/internal/streams/passthrough.js",
+      "lib/internal/streams/pipeline.js",
+      "lib/internal/streams/readable.js",
+      "lib/internal/streams/state.js",
+      "lib/internal/streams/transform.js",
+      "lib/internal/streams/utils.js",
+      "lib/internal/streams/writable.js",
+      "lib/internal/test/binding.js",
+      "lib/internal/test/transfer.js",
+      "lib/internal/tls/parse-cert-string.js",
+      "lib/internal/tls/secure-context.js",
+      "lib/internal/tls/secure-pair.js",
+      "lib/internal/util/comparisons.js",
+      "lib/internal/util/debuglog.js",
+      "lib/internal/util/inspect.js",
+      "lib/internal/util/inspector.js",
+      "lib/internal/util/iterable_weak_map.js",
+      "lib/internal/util/types.js",
+      "lib/internal/vm/module.js",
+      "lib/internal/webstreams/adapters.js",
+      "lib/internal/webstreams/compression.js",
+      "lib/internal/webstreams/encoding.js",
+      "lib/internal/webstreams/queuingstrategies.js",
+      "lib/internal/webstreams/readablestream.js",
+      "lib/internal/webstreams/transfer.js",
+      "lib/internal/webstreams/transformstream.js",
+      "lib/internal/webstreams/util.js",
+      "lib/internal/webstreams/writablestream.js",
+      "lib/internal/worker/io.js",
+      "lib/internal/worker/js_transferable.js",
+      "lib/path/posix.js",
+      "lib/path/win32.js",
+      "lib/stream/consumers.js",
+      "lib/stream/promises.js",
+      "lib/stream/web.js",
+      "lib/timers/promises.js",
+      "lib/util/types.js"
+    ],
+    "node_module_version": 93,
+    "node_no_browser_globals": "false",
+    "node_prefix": "/usr/local",
+    "node_release_urlbase": "https://nodejs.org/download/release/",
+    "node_shared": "false",
+    "node_shared_brotli": "false",
+    "node_shared_cares": "false",
+    "node_shared_http_parser": "false",
+    "node_shared_libuv": "false",
+    "node_shared_nghttp2": "false",
+    "node_shared_nghttp3": "false",
+    "node_shared_ngtcp2": "false",
+    "node_shared_openssl": "false",
+    "node_shared_zlib": "false",
+    "node_tag": "",
+    "node_target_type": "executable",
+    "node_use_bundled_v8": "true",
+    "node_use_dtrace": "false",
+    "node_use_etw": "true",
+    "node_use_node_code_cache": "true",
+    "node_use_node_snapshot": "true",
+    "node_use_openssl": "true",
+    "node_use_v8_platform": "true",
+    "node_with_ltcg": "true",
+    "node_without_node_options": "false",
+    "openssl_fips": "",
+    "openssl_is_fips": "false",
+    "openssl_quic": "true",
+    "ossfuzz": "false",
+    "shlib_suffix": "so.93",
+    "target_arch": "x64",
+    "v8_enable_31bit_smis_on_64bit_arch": 0,
+    "v8_enable_gdbjit": 0,
+    "v8_enable_hugepage": 0,
+    "v8_enable_i18n_support": 1,
+    "v8_enable_inspector": 1,
+    "v8_enable_lite_mode": 0,
+    "v8_enable_object_print": 1,
+    "v8_enable_pointer_compression": 0,
+    "v8_enable_webassembly": 1,
+    "v8_no_strict_aliasing": 1,
+    "v8_optimized_debug": 1,
+    "v8_promise_internal_field_count": 1,
+    "v8_random_seed": 0,
+    "v8_trace_maps": 0,
+    "v8_use_siphash": 1,
+    "want_separate_host_toolset": 0,
+    "nodedir": "C:\\Users\\Think\\AppData\\Local\\node-gyp\\Cache\\16.15.0",
+    "standalone_static_library": 1,
+    "msbuild_path": "E:\\vs2022Professional\\IDE\\MSBuild\\Current\\Bin\\MSBuild.exe"
+  }
+}

+ 160 - 0
build/napi_sample.vcxproj

@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{540100E4-483F-BBF1-7D5D-7E9B9812D13D}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>napi_sample</RootNamespace>
+    <IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
+    <PreferredToolArchitecture>x64</PreferredToolArchitecture>
+    <WindowsTargetPlatformVersion>10.0.22000.0</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+  </PropertyGroup>
+  <PropertyGroup Label="Locals">
+    <PlatformToolset>v143</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
+  <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props"/>
+  <ImportGroup Label="ExtensionSettings"/>
+  <ImportGroup Label="PropertySheets">
+    <Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros"/>
+  <PropertyGroup>
+    <ExecutablePath>$(ExecutablePath);$(MSBuildProjectDirectory)\..\bin\;$(MSBuildProjectDirectory)\..\bin\</ExecutablePath>
+    <IgnoreImportLibrary>true</IgnoreImportLibrary>
+    <IntDir>$(Configuration)\obj\$(ProjectName)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.node</TargetExt>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.node</TargetExt>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.node</TargetExt>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.node</TargetExt>
+    <TargetName>$(ProjectName)</TargetName>
+    <TargetPath>$(OutDir)\$(ProjectName).node</TargetPath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\include\node;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\src;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\config;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\openssl\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\uv\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\zlib;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\v8\include;..\&lt;!--@(node -p &quot;require(&apos;node-addon-api&apos;).include&quot;);..\node_modules\node-addon-api;F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include;..\include\gdal2;..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/Zc:__cplusplus /EHsc %(AdditionalOptions)</AdditionalOptions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <DebugInformationFormat>OldStyle</DebugInformationFormat>
+      <DisableSpecificWarnings>4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ExceptionHandling>false</ExceptionHandling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>Disabled</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=napi_sample;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;DEBUG;_DEBUG;V8_ENABLE_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <StringPooling>true</StringPooling>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+    <Link>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;&quot;C:\\Users\\Think\\AppData\\Local\\node-gyp\\Cache\\16.15.0\\x64\\node.lib&quot;;..\lib\gdal_i.lib;..\lib\opencv_world451.lib;..\lib\quc.lib</AdditionalDependencies>
+      <AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>
+      <DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)$(ProjectName).node</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetExt>.node</TargetExt>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <ResourceCompile>
+      <AdditionalIncludeDirectories>C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\include\node;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\src;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\config;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\openssl\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\uv\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\zlib;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\v8\include;..\&lt;!--@(node -p &quot;require(&apos;node-addon-api&apos;).include&quot;);..\node_modules\node-addon-api;F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include;..\include\gdal2;..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=napi_sample;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;DEBUG;_DEBUG;V8_ENABLE_CHECKS;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\include\node;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\src;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\config;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\openssl\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\uv\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\zlib;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\v8\include;..\&lt;!--@(node -p &quot;require(&apos;node-addon-api&apos;).include&quot;);..\node_modules\node-addon-api;F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include;..\include\gdal2;..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>/Zc:__cplusplus /EHsc %(AdditionalOptions)</AdditionalOptions>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <DebugInformationFormat>OldStyle</DebugInformationFormat>
+      <DisableSpecificWarnings>4351;4355;4800;4251;4275;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <ExceptionHandling>false</ExceptionHandling>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitFramePointers>true</OmitFramePointers>
+      <Optimization>Full</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=napi_sample;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatWarningAsError>false</TreatWarningAsError>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+    </ClCompile>
+    <Lib>
+      <AdditionalOptions>/LTCG:INCREMENTAL %(AdditionalOptions)</AdditionalOptions>
+    </Lib>
+    <Link>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;&quot;C:\\Users\\Think\\AppData\\Local\\node-gyp\\Cache\\16.15.0\\x64\\node.lib&quot;;..\lib\gdal_i.lib;..\lib\opencv_world451.lib;..\lib\quc.lib</AdditionalDependencies>
+      <AdditionalOptions>/LTCG:INCREMENTAL /ignore:4199 %(AdditionalOptions)</AdditionalOptions>
+      <DelayLoadDLLs>node.exe;%(DelayLoadDLLs)</DelayLoadDLLs>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OptimizeReferences>true</OptimizeReferences>
+      <OutputFile>$(OutDir)$(ProjectName).node</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetExt>.node</TargetExt>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <ResourceCompile>
+      <AdditionalIncludeDirectories>C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\include\node;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\src;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\config;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\openssl\openssl\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\uv\include;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\zlib;C:\Users\Think\AppData\Local\node-gyp\Cache\16.15.0\deps\v8\include;..\&lt;!--@(node -p &quot;require(&apos;node-addon-api&apos;).include&quot;);..\node_modules\node-addon-api;F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include;..\include\gdal2;..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NODE_GYP_MODULE_NAME=napi_sample;USING_UV_SHARED=1;USING_V8_SHARED=1;V8_DEPRECATION_WARNINGS=1;V8_DEPRECATION_WARNINGS;V8_IMMINENT_DEPRECATION_WARNINGS;_GLIBCXX_USE_CXX11_ABI=1;WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_HAS_EXCEPTIONS=0;OPENSSL_NO_PINSHARED;OPENSSL_THREADS;NAPI_DISABLE_CPP_EXCEPTIONS;BUILDING_NODE_EXTENSION;HOST_BINARY=&quot;node.exe&quot;;%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="..\binding.gyp"/>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\exports.cc">
+      <ObjectFileName>$(IntDir)\exports.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\nodejs\TIFOC.cc">
+      <ObjectFileName>$(IntDir)\nodejs\TIFOC.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json\json_reader.cpp"/>
+    <ClCompile Include="F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json\json_value.cpp"/>
+    <ClCompile Include="F:\谷歌下载\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json\json_writer.cpp"/>
+    <ClCompile Include="..\mtiff.cpp">
+      <ObjectFileName>$(IntDir)\mtiff.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="..\OCRenderingontours.cpp">
+      <ObjectFileName>$(IntDir)\OCRenderingontours.obj</ObjectFileName>
+    </ClCompile>
+    <ClCompile Include="C:\Users\Think\AppData\Roaming\npm\node_modules\node-gyp\src\win_delay_load_hook.cc"/>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
+  <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets"/>
+  <ImportGroup Label="ExtensionTargets"/>
+</Project>

Some files were not shown because too many files changed in this diff