UNPKG

roblox-ts

Version:

A TypeScript-to-Luau Compiler for Roblox

88 lines 4.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateCompilerOptions = validateCompilerOptions; const fs_1 = __importDefault(require("fs")); const kleur_1 = __importDefault(require("kleur")); const path_1 = __importDefault(require("path")); const constants_1 = require("../../Shared/constants"); const ProjectError_1 = require("../../Shared/errors/ProjectError"); const typescript_1 = __importDefault(require("typescript")); const ENFORCED_OPTIONS = { target: typescript_1.default.ScriptTarget.ESNext, module: typescript_1.default.ModuleKind.CommonJS, moduleDetection: typescript_1.default.ModuleDetectionKind.Force, moduleResolution: typescript_1.default.ModuleResolutionKind.Node10, noLib: true, strict: true, allowSyntheticDefaultImports: true, }; function y(str) { return kleur_1.default.yellow(str); } function validateTypeRoots(nodeModulesPath, typeRoots) { const typesPath = path_1.default.resolve(nodeModulesPath); for (const typeRoot of typeRoots) { if (path_1.default.resolve(typeRoot) === typesPath) { return true; } } return false; } function validateCompilerOptions(opts, projectPath) { var _a, _b; const errors = new Array(); if (opts.noLib !== ENFORCED_OPTIONS.noLib) { errors.push(`${y(`"noLib"`)} must be ${y(`true`)}`); } if (opts.strict !== ENFORCED_OPTIONS.strict) { errors.push(`${y(`"strict"`)} must be ${y(`true`)}`); } if (opts.target !== ENFORCED_OPTIONS.target) { } if (opts.module !== ENFORCED_OPTIONS.module) { errors.push(`${y(`"module"`)} must be ${y(`commonjs`)}`); } if (opts.moduleDetection !== ENFORCED_OPTIONS.moduleDetection) { errors.push(`${y(`"moduleDetection"`)} must be ${y(`"force"`)}`); } if (opts.moduleResolution !== ENFORCED_OPTIONS.moduleResolution) { errors.push(`${y(`"moduleResolution"`)} must be ${y(`"Node"`)}`); } if (opts.allowSyntheticDefaultImports !== ENFORCED_OPTIONS.allowSyntheticDefaultImports) { errors.push(`${y(`"allowSyntheticDefaultImports"`)} must be ${y(`true`)}`); } const rbxtsModules = path_1.default.join(projectPath, constants_1.NODE_MODULES, constants_1.RBXTS_SCOPE); if (opts.typeRoots === undefined || !validateTypeRoots(rbxtsModules, opts.typeRoots)) { errors.push(`${y(`"typeRoots"`)} must contain ${y(rbxtsModules)}`); } for (const typesLocation of (_a = opts.types) !== null && _a !== void 0 ? _a : []) { const typeRoots = (_b = opts.typeRoots) !== null && _b !== void 0 ? _b : ["node_modules/@rbxts"]; if (!typeRoots.some(typeRoot => { const typesPath = path_1.default.resolve(projectPath, typeRoot, typesLocation); return fs_1.default.existsSync(typesPath) || fs_1.default.existsSync(typesPath + constants_1.DTS_EXT); })) { errors.push(`${y(`"types"`)} ${y(typesLocation)} were not found. Make sure the path is relative to \`typeRoots\``); } } if (opts.rootDir === undefined && opts.rootDirs === undefined) { errors.push(`${y(`"rootDir"`)} or ${y(`"rootDirs"`)} must be defined`); } if (opts.outDir === undefined) { errors.push(`${y(`"outDir"`)} must be defined`); } if (opts.importsNotUsedAsValues !== undefined) { const suggestedValue = opts.importsNotUsedAsValues === typescript_1.default.ImportsNotUsedAsValues.Preserve ? "true" : "false"; errors.push(`${y(`"importsNotUsedAsValues"`)} is no longer supported, use ${y(`"verbatimModuleSyntax": ${suggestedValue}`)} instead`); } if (errors.length > 0) { throw new ProjectError_1.ProjectError([ `Invalid "tsconfig.json" configuration!`, `https://roblox-ts.com/docs/quick-start#project-folder-setup`, errors.map(e => `- ${e}\n`).join(""), ].join("\n")); } } //# sourceMappingURL=validateCompilerOptions.js.map