@lcap/nasl
Version:
NetEase Application Specific Language
159 lines (147 loc) • 10.9 kB
JavaScript
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 };
};