UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

159 lines (147 loc) 10.9 kB
const ts = require('../lib/tsserver'); require('../lib/harness'); const tsconfig = require('../../sandbox/tsconfig.json'); exports.default = async function start(webHost) { const system = ts.TestFSWithWatch.createServerHost([], { windowsStyleRoot: '/' }); const typesMap = require('typescript/lib/typesMap.json'); let stdlibMap = {}; if (process.env.BUILD_TARGET) { if (process.env.BUILD_TARGET === 'node') { if (globalThis.process) { // For TS build const fs = require('fs'); stdlibMap = { 'lib.es5.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es5.d.ts'), 'utf8'), 'lib.es6.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es6.d.ts'), 'utf8'), 'lib.dom.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.dom.d.ts'), 'utf8'), 'lib.es2015.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.d.ts'), 'utf8'), 'lib.es2015.core.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.core.d.ts'), 'utf8'), 'lib.es2015.collection.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.collection.d.ts'), 'utf8'), 'lib.es2015.iterable.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.iterable.d.ts'), 'utf8'), 'lib.es2015.generator.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.generator.d.ts'), 'utf8'), 'lib.es2015.promise.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.promise.d.ts'), 'utf8'), 'lib.es2015.proxy.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.proxy.d.ts'), 'utf8'), 'lib.es2015.reflect.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.reflect.d.ts'), 'utf8'), 'lib.es2015.symbol.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.symbol.d.ts'), 'utf8'), 'lib.es2015.symbol.wellknown.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.symbol.wellknown.d.ts'), 'utf8'), 'typesMap.json': JSON.stringify(typesMap), }; } } else if (process.env.BUILD_TARGET === 'node-worker') { stdlibMap = { 'lib.es5.d.ts': require('!!raw-loader!typescript/lib/lib.es5.d.ts').default, 'lib.es6.d.ts': require('!!raw-loader!typescript/lib/lib.es6.d.ts').default, 'lib.dom.d.ts': require('!!raw-loader!typescript/lib/lib.dom.d.ts').default, 'lib.es2015.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.d.ts').default, 'lib.es2015.core.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.core.d.ts').default, 'lib.es2015.collection.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.collection.d.ts').default, 'lib.es2015.iterable.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.iterable.d.ts').default, 'lib.es2015.generator.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.generator.d.ts').default, 'lib.es2015.promise.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.promise.d.ts').default, 'lib.es2015.proxy.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.proxy.d.ts').default, 'lib.es2015.reflect.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.reflect.d.ts').default, 'lib.es2015.symbol.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.d.ts').default, 'lib.es2015.symbol.wellknown.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.wellknown.d.ts').default, 'typesMap.json': JSON.stringify(typesMap), }; } else { if (!globalThis.process) { // For TS build stdlibMap = { 'lib.es5.d.ts': require('!!raw-loader!typescript/lib/lib.es5.d.ts').default, 'lib.es6.d.ts': require('!!raw-loader!typescript/lib/lib.es6.d.ts').default, 'lib.dom.d.ts': require('!!raw-loader!typescript/lib/lib.dom.d.ts').default, 'lib.es2015.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.d.ts').default, 'lib.es2015.core.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.core.d.ts').default, 'lib.es2015.collection.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.collection.d.ts').default, 'lib.es2015.iterable.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.iterable.d.ts').default, 'lib.es2015.generator.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.generator.d.ts').default, 'lib.es2015.promise.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.promise.d.ts').default, 'lib.es2015.proxy.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.proxy.d.ts').default, 'lib.es2015.reflect.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.reflect.d.ts').default, 'lib.es2015.symbol.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.d.ts').default, 'lib.es2015.symbol.wellknown.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.wellknown.d.ts').default, 'typesMap.json': JSON.stringify(typesMap), }; } } } else { /// #if process.env.BUILD_TARGET === 'node' if (globalThis.process) { // For TS build const fs = require('fs'); stdlibMap = { 'lib.es5.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es5.d.ts'), 'utf8'), 'lib.es6.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es6.d.ts'), 'utf8'), 'lib.dom.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.dom.d.ts'), 'utf8'), 'lib.es2015.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.d.ts'), 'utf8'), 'lib.es2015.core.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.core.d.ts'), 'utf8'), 'lib.es2015.collection.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.collection.d.ts'), 'utf8'), 'lib.es2015.iterable.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.iterable.d.ts'), 'utf8'), 'lib.es2015.generator.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.generator.d.ts'), 'utf8'), 'lib.es2015.promise.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.promise.d.ts'), 'utf8'), 'lib.es2015.proxy.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.proxy.d.ts'), 'utf8'), 'lib.es2015.reflect.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.reflect.d.ts'), 'utf8'), 'lib.es2015.symbol.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.symbol.d.ts'), 'utf8'), 'lib.es2015.symbol.wellknown.d.ts': fs.readFileSync(require.resolve('typescript/lib/lib.es2015.symbol.wellknown.d.ts'), 'utf8'), 'typesMap.json': JSON.stringify(typesMap), }; } /// #endif /// process.env.BUILD_TARGET !== 'node' if (!globalThis.process) { // For TS build stdlibMap = { 'lib.es5.d.ts': require('!!raw-loader!typescript/lib/lib.es5.d.ts').default, 'lib.es6.d.ts': require('!!raw-loader!typescript/lib/lib.es6.d.ts').default, 'lib.dom.d.ts': require('!!raw-loader!typescript/lib/lib.dom.d.ts').default, 'lib.es2015.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.d.ts').default, 'lib.es2015.core.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.core.d.ts').default, 'lib.es2015.collection.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.collection.d.ts').default, 'lib.es2015.iterable.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.iterable.d.ts').default, 'lib.es2015.generator.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.generator.d.ts').default, 'lib.es2015.promise.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.promise.d.ts').default, 'lib.es2015.proxy.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.proxy.d.ts').default, 'lib.es2015.reflect.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.reflect.d.ts').default, 'lib.es2015.symbol.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.d.ts').default, 'lib.es2015.symbol.wellknown.d.ts': require('!!raw-loader!typescript/lib/lib.es2015.symbol.wellknown.d.ts').default, 'typesMap.json': JSON.stringify(typesMap), }; } /// #endif } // 从内容中生成 // 'nasl.ui.definition.ts': require('!!raw-loader!../../../file-storage/data/stdlib/nasl.ui.definition.ts').default, Object.keys(stdlibMap).forEach((libFileName) => { system.writeFile('/' + libFileName, stdlibMap[libFileName]); }); system.writeFile('/tsconfig.json', JSON.stringify(tsconfig)); class TestWorkerSession extends ts.server.WorkerSession { constructor(host, webHost, options, logger) { super(host, webHost, { globalPlugins: undefined, pluginProbeLocations: undefined, allowLocalPluginLoads: undefined, useSingleInferredProject: true, useInferredProjectPerProjectRoot: false, suppressDiagnosticEvents: false, noGetErrOnBackgroundUpdate: true, syntaxOnly: undefined, serverMode: ts.LanguageServiceMode.Semantic, ...options, }, logger, ts.server.nullCancellationToken, () => ts.emptyArray); } getProjectService() { return this.projectService; } } const logLevel = 3; const logger = logLevel !== undefined ? new ts.server.MainProcessLogger(logLevel, webHost) : undefined; const session = new TestWorkerSession(system, webHost, { serverMode: ts.LanguageServiceMode.Semantic }, logger); logger.info('Starting TS Server'); logger.info('Version: ' + ts.version); logger.info('Arguments: '.concat([].join(' '))); if (globalThis.process) { logger.info('Platform: Node.js ' + process.version); } else { logger.info('Platform: ' + navigator.userAgent); } logger.info(''); return { session, system }; };