@markuplint/create-rule-helper
Advanced tools
Comparing version 1.0.0-dev.20211227.0 to 1.0.0-dev.20220105.1
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createRuleHelper = void 0; | ||
const create_rule_package_1 = require("./create-rule-package"); | ||
const create_rule_to_core_1 = require("./create-rule-to-core"); | ||
const create_rule_to_project_1 = require("./create-rule-to-project"); | ||
async function createRuleHelper(params) { | ||
switch (params.purpose) { | ||
case 'ADD_TO_PROJECT': { | ||
throw new Error('Not implemented yet'); | ||
return await (0, create_rule_to_project_1.craeteRuleToProject)(params); | ||
} | ||
case 'PUBLISH_AS_PACKAGE': { | ||
throw new Error('Not implemented yet'); | ||
return await (0, create_rule_package_1.craeteRulePackage)(params); | ||
} | ||
@@ -13,0 +15,0 @@ case 'CONTRIBUTE_TO_CORE': { |
@@ -14,3 +14,7 @@ "use strict"; | ||
const newRuleDir = path_1.default.resolve(rulesDir, name); | ||
return await (0, install_scaffold_1.installScaffold)(newRuleDir, { name, lang, needTest }); | ||
const exists = await (0, fs_exists_1.fsExists)(newRuleDir); | ||
if (exists) { | ||
throw new create_rule_helper_error_1.CreateRuleHelperError(`A new rule "${name}" already exists`); | ||
} | ||
return await (0, install_scaffold_1.installScaffold)('core', newRuleDir, '', { name, lang, needTest }); | ||
} | ||
@@ -17,0 +21,0 @@ exports.craeteRuleToCore = craeteRuleToCore; |
import type { CreateRuleCreatorParams, CreateRuleHelperResult } from './types'; | ||
export declare function installScaffold(dir: string, params: CreateRuleCreatorParams): Promise<CreateRuleHelperResult>; | ||
export declare function installScaffold(scaffoldDir: string, dest: string, sourceDir: string, params: CreateRuleCreatorParams & { | ||
packageJson?: boolean; | ||
}): Promise<CreateRuleHelperResult>; |
@@ -7,18 +7,98 @@ "use strict"; | ||
const path_1 = (0, tslib_1.__importDefault)(require("path")); | ||
const create_rule_helper_error_1 = require("./create-rule-helper-error"); | ||
const fs_exists_1 = require("./fs-exists"); | ||
const transfer_1 = require("./transfer"); | ||
const SCAFFOLD_README_FILE = path_1.default.resolve(__dirname, '..', 'scaffold', 'README.md'); | ||
const SCAFFOLD_MAIN_FILE = path_1.default.resolve(__dirname, '..', 'scaffold', 'index.ts'); | ||
const SCAFFOLD_TEST_FILE = path_1.default.resolve(__dirname, '..', 'scaffold', 'index.spec.ts'); | ||
async function installScaffold(dir, params) { | ||
const exists = await (0, fs_exists_1.fsExists)(dir); | ||
if (exists) { | ||
throw new create_rule_helper_error_1.CreateRuleHelperError(`A new rule "${params.name}" already exists`); | ||
async function installScaffold(scaffoldDir, dest, sourceDir, params) { | ||
const exists = await (0, fs_exists_1.fsExists)(dest); | ||
if (!exists) { | ||
await fs_1.promises.mkdir(dest); | ||
} | ||
await fs_1.promises.mkdir(dir); | ||
const scaffoldReadmeFile = path_1.default.resolve(__dirname, '..', 'scaffold', scaffoldDir, 'README.md'); | ||
const scaffoldMainFile = path_1.default.resolve(__dirname, '..', 'scaffold', scaffoldDir, 'index.ts'); | ||
const scaffoldTestFile = path_1.default.resolve(__dirname, '..', 'scaffold', scaffoldDir, 'index.spec.ts'); | ||
const transpile = params.lang === 'JAVASCRIPT'; | ||
const readme = await (0, transfer_1.transfer)(SCAFFOLD_README_FILE, dir, { name: params.name }); | ||
const main = await (0, transfer_1.transfer)(SCAFFOLD_MAIN_FILE, dir, { name: params.name }, { transpile }); | ||
const test = params.needTest ? await (0, transfer_1.transfer)(SCAFFOLD_TEST_FILE, dir, { name: params.name }, { transpile }) : null; | ||
const readme = await (0, transfer_1.transfer)(scaffoldReadmeFile, dest, { name: params.name }); | ||
const main = await (0, transfer_1.transfer)(scaffoldMainFile, path_1.default.resolve(dest, sourceDir), { name: params.name }, { transpile }); | ||
const test = params.needTest | ||
? await (0, transfer_1.transfer)(scaffoldTestFile, path_1.default.resolve(dest, sourceDir), { name: params.name }, { transpile }) | ||
: null; | ||
const packageJson = params.packageJson ? path_1.default.resolve(dest, 'package.json') : null; | ||
const dependencies = []; | ||
const devDependencies = []; | ||
const tsConfig = params.packageJson && params.lang === 'TYPESCRIPT' ? path_1.default.resolve(dest, 'tsconfig.json') : null; | ||
const ext = params.lang === 'JAVASCRIPT' ? 'js' : 'ts'; | ||
if (packageJson) { | ||
const packageContent = { | ||
name: params.name, | ||
scripts: {}, | ||
jest: { | ||
moduleFileExtensions: ['js', ...(params.lang === 'TYPESCRIPT' ? ['ts'] : [])], | ||
testRegex: `(\\.|/)(spec|test)\\.${ext}$`, | ||
testEnvironment: 'node', | ||
transform: params.lang === 'TYPESCRIPT' | ||
? { | ||
'^.+\\.ts$': 'ts-jest', | ||
} | ||
: undefined, | ||
}, | ||
babel: params.needTest && params.lang === 'JAVASCRIPT' | ||
? { | ||
presets: [ | ||
[ | ||
'@babel/preset-env', | ||
{ | ||
targets: { | ||
node: 'current', | ||
}, | ||
}, | ||
], | ||
], | ||
} | ||
: undefined, | ||
}; | ||
if (params.lang === 'TYPESCRIPT') { | ||
packageContent.scripts.build = 'tsc'; | ||
} | ||
dependencies.push('@markuplint/ml-core@next'); | ||
devDependencies.push('markuplint@next'); | ||
if (params.needTest) { | ||
packageContent.scripts.test = 'jest'; | ||
devDependencies.push('jest'); | ||
if (params.lang === 'TYPESCRIPT') { | ||
devDependencies.push('@types/jest'); | ||
devDependencies.push('ts-jest'); | ||
} | ||
else { | ||
devDependencies.push('babel-jest'); | ||
devDependencies.push('@babel/core'); | ||
devDependencies.push('@babel/preset-env'); | ||
} | ||
} | ||
if (params.lang === 'TYPESCRIPT') { | ||
devDependencies.push('typescript'); | ||
} | ||
await fs_1.promises.writeFile(packageJson, JSON.stringify(packageContent, null, 2), { encoding: 'utf-8' }); | ||
} | ||
if (tsConfig) { | ||
const config = { | ||
compilerOptions: { | ||
module: 'commonjs', | ||
target: 'es2019', | ||
strict: true, | ||
strictNullChecks: true, | ||
strictPropertyInitialization: true, | ||
allowSyntheticDefaultImports: true, | ||
experimentalDecorators: true, | ||
esModuleInterop: true, | ||
noImplicitAny: true, | ||
declaration: true, | ||
lib: ['dom', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'esnext'], | ||
skipLibCheck: true, | ||
outDir: './lib', | ||
rootDir: './src', | ||
}, | ||
include: ['./src/**/*'], | ||
exclude: ['node_modules', 'lib', './src/**/*.spec.ts'], | ||
}; | ||
await fs_1.promises.writeFile(tsConfig, JSON.stringify(config, null, 2), { encoding: 'utf-8' }); | ||
} | ||
return { | ||
@@ -29,4 +109,8 @@ ...params, | ||
test, | ||
packageJson, | ||
tsConfig, | ||
dependencies, | ||
devDependencies, | ||
}; | ||
} | ||
exports.installScaffold = installScaffold; |
@@ -10,2 +10,3 @@ "use strict"; | ||
const typescript_1 = require("typescript"); | ||
const fs_exists_1 = require("./fs-exists"); | ||
async function transfer(filePath, destDir, replacer, options) { | ||
@@ -30,2 +31,5 @@ const extname = path_1.default.extname(filePath); | ||
converted = (0, prettier_1.format)(converted, { parser }); | ||
if (!(await (0, fs_exists_1.fsExists)(destDir))) { | ||
await fs_1.promises.mkdir(destDir, { recursive: true }); | ||
} | ||
const dest = path_1.default.resolve(destDir, fileName); | ||
@@ -32,0 +36,0 @@ await fs_1.promises.writeFile(dest, converted, { encoding: 'utf-8' }); |
@@ -13,4 +13,8 @@ export declare type CreateRuleHelperParams = CreateRuleCreatorParams & { | ||
test: string | null; | ||
packageJson: string | null; | ||
tsConfig: string | null; | ||
dependencies: string[]; | ||
devDependencies: string[]; | ||
}; | ||
export declare type CreateRuleLanguage = 'JAVASCRIPT' | 'TYPESCRIPT'; | ||
export declare type CreateRulePurpose = 'ADD_TO_PROJECT' | 'PUBLISH_AS_PACKAGE' | 'CONTRIBUTE_TO_CORE'; |
{ | ||
"name": "@markuplint/create-rule-helper", | ||
"version": "1.0.0-dev.20211227.0", | ||
"version": "1.0.0-dev.20220105.1", | ||
"description": "Create rule helper", | ||
@@ -20,3 +20,4 @@ "repository": "git@github.com:markuplint/markuplint.git", | ||
"dependencies": { | ||
"@markuplint/ml-core": "2.0.0-dev.20211227.0", | ||
"@markuplint/ml-core": "2.0.0-dev.20220105.1", | ||
"glob": "^7.2.0", | ||
"mustache": "^4.2.0", | ||
@@ -31,3 +32,3 @@ "prettier": "^2.4.1", | ||
}, | ||
"gitHead": "20dec43c2303645a8c49cc409900a67cc9ce2a9d" | ||
"gitHead": "73fab2765c080b0a42e71bdc1eed09bae0ed360e" | ||
} |
@@ -52,7 +52,7 @@ import { createRule } from '@markuplint/ml-core'; | ||
*/ | ||
async verify(context) { | ||
async verify({ document, report, t }) { | ||
/** | ||
* Example: Use `walk` method to traverse the node tree | ||
*/ | ||
context.document.walk(node => { | ||
document.walk(node => { | ||
/** | ||
@@ -79,3 +79,3 @@ * Example: Compare the type of the node to filter it | ||
*/ | ||
context.report({ | ||
report({ | ||
/** | ||
@@ -95,3 +95,3 @@ * Example: Define the scope. | ||
*/ | ||
message: context.t('It is {0}', 'TODO'), | ||
message: t('It is {0}', 'TODO'), | ||
}); | ||
@@ -98,0 +98,0 @@ } |
Sorry, the diff of this file is not supported yet
65573
35
530
6
+ Addedglob@^7.2.0
+ Added@markuplint/i18n@2.0.0-dev.20220105.1(transitive)
+ Added@markuplint/ml-ast@2.0.0-dev.20211115.3(transitive)
+ Added@markuplint/ml-config@2.0.0-dev.2021116.3(transitive)
+ Added@markuplint/ml-core@2.0.0-dev.20220105.1(transitive)
+ Added@markuplint/ml-spec@2.0.0-dev.20211227.1(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedwrappy@1.0.2(transitive)
- Removed@markuplint/i18n@2.0.0-dev.20211213.1(transitive)
- Removed@markuplint/ml-ast@2.0.0-dev.20211115.2(transitive)
- Removed@markuplint/ml-config@2.0.0-dev.2021116.2(transitive)
- Removed@markuplint/ml-core@2.0.0-dev.20211227.0(transitive)
- Removed@markuplint/ml-spec@2.0.0-dev.20211227.0(transitive)