eser 0.1.3 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/codebase/mod.ts +411 -0
- package/deno.json +9 -0
- package/main.ts +78 -0
- package/package.json +11 -33
- package/.csscomb.json +0 -333
- package/.eslintrc.json +0 -295
- package/LICENSE +0 -14
- package/README.md +0 -57
- package/index.js +0 -1
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
// Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Codebase command group - validation and management tools
|
|
5
|
+
*
|
|
6
|
+
* Subcommands:
|
|
7
|
+
* check-circular-deps Detect circular package dependencies
|
|
8
|
+
* check-mod-exports Validate mod.ts exports all files
|
|
9
|
+
* check-export-names Validate export naming conventions
|
|
10
|
+
* check-docs Validate JSDoc documentation
|
|
11
|
+
* check-licenses Validate license headers
|
|
12
|
+
* check-package-configs Validate deno.json/package.json consistency
|
|
13
|
+
* versions Manage workspace versions
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as cliParseArgs from "@std/cli/parse-args";
|
|
19
|
+
import * as fmtColors from "@std/fmt/colors";
|
|
20
|
+
import * as standardsRuntime from "@eser/standards/runtime";
|
|
21
|
+
import * as checkCircularDeps from "@eser/codebase/check-circular-deps";
|
|
22
|
+
import * as checkModExports from "@eser/codebase/check-mod-exports";
|
|
23
|
+
import * as checkExportNames from "@eser/codebase/check-export-names";
|
|
24
|
+
import * as checkDocs from "@eser/codebase/check-docs";
|
|
25
|
+
import * as checkLicenses from "@eser/codebase/check-licenses";
|
|
26
|
+
import * as checkPackageConfigs from "@eser/codebase/check-package-configs";
|
|
27
|
+
import * as versions from "@eser/codebase/versions";
|
|
28
|
+
|
|
29
|
+
type SubcommandDef = {
|
|
30
|
+
description: string;
|
|
31
|
+
usage: string;
|
|
32
|
+
options: Array<{ flag: string; description: string }>;
|
|
33
|
+
handler: (args: string[], flags: Record<string, unknown>) => Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const showSubcommandHelp = (name: string, def: SubcommandDef): void => {
|
|
37
|
+
console.log(`eser codebase ${name} - ${def.description}\n`);
|
|
38
|
+
console.log(`Usage: ${def.usage}\n`);
|
|
39
|
+
if (def.options.length > 0) {
|
|
40
|
+
console.log("Options:");
|
|
41
|
+
for (const opt of def.options) {
|
|
42
|
+
console.log(` ${opt.flag.padEnd(20)} ${opt.description}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const subcommands: Record<string, SubcommandDef> = {
|
|
48
|
+
"check-circular-deps": {
|
|
49
|
+
description: "Detect circular package dependencies",
|
|
50
|
+
usage: "eser codebase check-circular-deps [options]",
|
|
51
|
+
options: [
|
|
52
|
+
{
|
|
53
|
+
flag: "--root <path>",
|
|
54
|
+
description: "Root directory (default: current)",
|
|
55
|
+
},
|
|
56
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
57
|
+
],
|
|
58
|
+
handler: async (_args, flags) => {
|
|
59
|
+
const root = flags["root"] as string | undefined;
|
|
60
|
+
console.log("Checking for circular dependencies...\n");
|
|
61
|
+
|
|
62
|
+
const result = await checkCircularDeps.checkCircularDeps({ root });
|
|
63
|
+
|
|
64
|
+
console.log(`Checked ${result.packagesChecked} packages.`);
|
|
65
|
+
|
|
66
|
+
if (result.hasCycles) {
|
|
67
|
+
console.log(
|
|
68
|
+
fmtColors.red(
|
|
69
|
+
`\nFound ${result.cycles.length} circular dependencies:\n`,
|
|
70
|
+
),
|
|
71
|
+
);
|
|
72
|
+
for (const cycle of result.cycles) {
|
|
73
|
+
console.log(fmtColors.yellow(` ${cycle.join(" → ")}`));
|
|
74
|
+
}
|
|
75
|
+
standardsRuntime.runtime.process.exit(1);
|
|
76
|
+
} else {
|
|
77
|
+
console.log(fmtColors.green("\nNo circular dependencies found."));
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
"check-mod-exports": {
|
|
83
|
+
description: "Validate mod.ts exports all public files",
|
|
84
|
+
usage: "eser codebase check-mod-exports [options]",
|
|
85
|
+
options: [
|
|
86
|
+
{
|
|
87
|
+
flag: "--root <path>",
|
|
88
|
+
description: "Root directory (default: current)",
|
|
89
|
+
},
|
|
90
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
91
|
+
],
|
|
92
|
+
handler: async (_args, flags) => {
|
|
93
|
+
const root = flags["root"] as string | undefined;
|
|
94
|
+
console.log("Checking mod.ts exports...\n");
|
|
95
|
+
|
|
96
|
+
const result = await checkModExports.checkModExports({ root });
|
|
97
|
+
|
|
98
|
+
console.log(`Checked ${result.packagesChecked} packages.`);
|
|
99
|
+
|
|
100
|
+
if (!result.isComplete) {
|
|
101
|
+
console.log(
|
|
102
|
+
fmtColors.red(
|
|
103
|
+
`\nFound ${result.missingExports.length} missing exports:\n`,
|
|
104
|
+
),
|
|
105
|
+
);
|
|
106
|
+
for (const missing of result.missingExports) {
|
|
107
|
+
console.log(
|
|
108
|
+
fmtColors.yellow(` ${missing.packageName}: ${missing.file}`),
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
standardsRuntime.runtime.process.exit(1);
|
|
112
|
+
} else {
|
|
113
|
+
console.log(fmtColors.green("\nAll mod.ts exports are complete."));
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
"check-export-names": {
|
|
119
|
+
description: "Validate export naming conventions",
|
|
120
|
+
usage: "eser codebase check-export-names [options]",
|
|
121
|
+
options: [
|
|
122
|
+
{
|
|
123
|
+
flag: "--root <path>",
|
|
124
|
+
description: "Root directory (default: current)",
|
|
125
|
+
},
|
|
126
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
127
|
+
],
|
|
128
|
+
handler: async (_args, flags) => {
|
|
129
|
+
const root = flags["root"] as string | undefined;
|
|
130
|
+
console.log("Checking export naming conventions...\n");
|
|
131
|
+
|
|
132
|
+
const result = await checkExportNames.checkExportNames({ root });
|
|
133
|
+
|
|
134
|
+
console.log(`Checked ${result.packagesChecked} packages.`);
|
|
135
|
+
|
|
136
|
+
if (!result.isValid) {
|
|
137
|
+
console.log(
|
|
138
|
+
fmtColors.red(
|
|
139
|
+
`\nFound ${result.violations.length} naming violations:\n`,
|
|
140
|
+
),
|
|
141
|
+
);
|
|
142
|
+
for (const violation of result.violations) {
|
|
143
|
+
console.log(fmtColors.yellow(` ${violation.packageName}:`));
|
|
144
|
+
console.log(` Export: ${violation.exportPath}`);
|
|
145
|
+
console.log(` Suggestion: ${violation.suggestion}`);
|
|
146
|
+
}
|
|
147
|
+
standardsRuntime.runtime.process.exit(1);
|
|
148
|
+
} else {
|
|
149
|
+
console.log(fmtColors.green("\nAll export names follow conventions."));
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
"check-docs": {
|
|
155
|
+
description: "Validate JSDoc documentation",
|
|
156
|
+
usage: "eser codebase check-docs [options]",
|
|
157
|
+
options: [
|
|
158
|
+
{
|
|
159
|
+
flag: "--root <path>",
|
|
160
|
+
description: "Root directory (default: current)",
|
|
161
|
+
},
|
|
162
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
163
|
+
],
|
|
164
|
+
handler: async (_args, flags) => {
|
|
165
|
+
const root = flags["root"] as string | undefined;
|
|
166
|
+
console.log("Checking documentation...\n");
|
|
167
|
+
|
|
168
|
+
const result = await checkDocs.checkDocs({ root });
|
|
169
|
+
|
|
170
|
+
console.log(
|
|
171
|
+
`Checked ${result.filesChecked} files, ${result.symbolsChecked} symbols.`,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
if (!result.isValid) {
|
|
175
|
+
console.log(
|
|
176
|
+
fmtColors.red(
|
|
177
|
+
`\nFound ${result.issues.length} documentation issues:\n`,
|
|
178
|
+
),
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
// Group by file
|
|
182
|
+
const byFile = new Map<string, checkDocs.DocIssue[]>();
|
|
183
|
+
for (const issue of result.issues) {
|
|
184
|
+
const existing = byFile.get(issue.file) ?? [];
|
|
185
|
+
existing.push(issue);
|
|
186
|
+
byFile.set(issue.file, existing);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
for (const [file, fileIssues] of byFile) {
|
|
190
|
+
console.log(fmtColors.yellow(`\n${file}:`));
|
|
191
|
+
for (const issue of fileIssues) {
|
|
192
|
+
const lineInfo = issue.line !== undefined ? `:${issue.line}` : "";
|
|
193
|
+
console.log(` ${issue.symbol}${lineInfo}: ${issue.issue}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
standardsRuntime.runtime.process.exit(1);
|
|
198
|
+
} else {
|
|
199
|
+
console.log(fmtColors.green("\nAll documentation is valid."));
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
"check-licenses": {
|
|
205
|
+
description: "Validate license headers in source files",
|
|
206
|
+
usage: "eser codebase check-licenses [options]",
|
|
207
|
+
options: [
|
|
208
|
+
{ flag: "--fix", description: "Auto-fix missing or incorrect headers" },
|
|
209
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
210
|
+
],
|
|
211
|
+
handler: async (_args, flags) => {
|
|
212
|
+
const fix = flags["fix"] as boolean | undefined;
|
|
213
|
+
console.log("Validating license headers...\n");
|
|
214
|
+
|
|
215
|
+
const result = await checkLicenses.validateLicenses({ fix });
|
|
216
|
+
|
|
217
|
+
if (result.issues.length === 0) {
|
|
218
|
+
console.log(
|
|
219
|
+
`Checked ${result.checked} files. All licenses are valid.`,
|
|
220
|
+
);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (fix) {
|
|
225
|
+
for (const issue of result.issues) {
|
|
226
|
+
if (issue.fixed) {
|
|
227
|
+
console.log(`Fixed ${issue.issue} header: ${issue.path}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
console.log(`Fixed ${result.fixedCount} files.`);
|
|
231
|
+
} else {
|
|
232
|
+
for (const issue of result.issues) {
|
|
233
|
+
console.error(
|
|
234
|
+
fmtColors.red(
|
|
235
|
+
`${
|
|
236
|
+
issue.issue === "missing" ? "Missing" : "Incorrect"
|
|
237
|
+
} copyright header: ${issue.path}`,
|
|
238
|
+
),
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
console.log(
|
|
242
|
+
fmtColors.yellow(
|
|
243
|
+
`\nCopyright header should be "// Copyright YYYY-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license."`,
|
|
244
|
+
),
|
|
245
|
+
);
|
|
246
|
+
standardsRuntime.runtime.process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
|
|
251
|
+
"check-package-configs": {
|
|
252
|
+
description: "Validate deno.json and package.json consistency",
|
|
253
|
+
usage: "eser codebase check-package-configs [options]",
|
|
254
|
+
options: [
|
|
255
|
+
{
|
|
256
|
+
flag: "--root <path>",
|
|
257
|
+
description: "Root directory (default: current)",
|
|
258
|
+
},
|
|
259
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
260
|
+
],
|
|
261
|
+
handler: async (_args, flags) => {
|
|
262
|
+
const root = flags["root"] as string | undefined;
|
|
263
|
+
console.log("Checking package config consistency...\n");
|
|
264
|
+
|
|
265
|
+
const result = await checkPackageConfigs.checkPackageConfigs({ root });
|
|
266
|
+
|
|
267
|
+
console.log(`Checked ${result.packagesChecked} packages.`);
|
|
268
|
+
|
|
269
|
+
if (!result.isConsistent) {
|
|
270
|
+
console.log(
|
|
271
|
+
fmtColors.red(
|
|
272
|
+
`\nFound ${result.inconsistencies.length} inconsistencies:\n`,
|
|
273
|
+
),
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
// Group by package
|
|
277
|
+
const byPackage = new Map<
|
|
278
|
+
string,
|
|
279
|
+
checkPackageConfigs.ConfigInconsistency[]
|
|
280
|
+
>();
|
|
281
|
+
for (const inc of result.inconsistencies) {
|
|
282
|
+
const existing = byPackage.get(inc.packageName) ?? [];
|
|
283
|
+
existing.push(inc);
|
|
284
|
+
byPackage.set(inc.packageName, existing);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
for (const [pkgName, inconsistencies] of byPackage) {
|
|
288
|
+
console.log(fmtColors.yellow(`${pkgName}:`));
|
|
289
|
+
for (const inc of inconsistencies) {
|
|
290
|
+
console.log(fmtColors.red(` ⚠ ${inc.field} mismatch:`));
|
|
291
|
+
console.log(` deno.json: ${JSON.stringify(inc.denoValue)}`);
|
|
292
|
+
console.log(
|
|
293
|
+
` package.json: ${JSON.stringify(inc.packageValue)}`,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
standardsRuntime.runtime.process.exit(1);
|
|
299
|
+
} else {
|
|
300
|
+
console.log(fmtColors.green("\nAll package configs are consistent."));
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
versions: {
|
|
306
|
+
description: "Manage workspace package versions",
|
|
307
|
+
usage: "eser codebase versions [command] [options]",
|
|
308
|
+
options: [
|
|
309
|
+
{ flag: "sync", description: "Sync all packages to root version" },
|
|
310
|
+
{ flag: "patch", description: "Bump patch version (0.0.x)" },
|
|
311
|
+
{ flag: "minor", description: "Bump minor version (0.x.0)" },
|
|
312
|
+
{ flag: "major", description: "Bump major version (x.0.0)" },
|
|
313
|
+
{ flag: "--dry-run", description: "Preview changes without applying" },
|
|
314
|
+
{ flag: "-h, --help", description: "Show this help message" },
|
|
315
|
+
],
|
|
316
|
+
handler: async (args, flags) => {
|
|
317
|
+
const command = args[0] as versions.VersionCommand | undefined;
|
|
318
|
+
const dryRun = flags["dry-run"] as boolean | undefined;
|
|
319
|
+
|
|
320
|
+
if (command === undefined) {
|
|
321
|
+
const result = await versions.showVersions();
|
|
322
|
+
console.table(result.packages);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const validCommands = ["sync", "patch", "minor", "major"];
|
|
327
|
+
if (!validCommands.includes(command)) {
|
|
328
|
+
console.error(fmtColors.red(`Invalid command: ${command}`));
|
|
329
|
+
console.error(
|
|
330
|
+
"Usage: eser codebase versions [sync|patch|minor|major] [--dry-run]",
|
|
331
|
+
);
|
|
332
|
+
standardsRuntime.runtime.process.exit(1);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (command === "sync") {
|
|
336
|
+
console.log("Syncing all versions...");
|
|
337
|
+
} else {
|
|
338
|
+
console.log(`Bumping all versions (${command})...`);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const result = await versions.versions(command, { dryRun });
|
|
342
|
+
|
|
343
|
+
console.log(`Target version: ${result.targetVersion}`);
|
|
344
|
+
console.table(result.updates);
|
|
345
|
+
|
|
346
|
+
if (result.dryRun) {
|
|
347
|
+
console.log(
|
|
348
|
+
fmtColors.cyan(
|
|
349
|
+
`Dry run - ${result.changedCount} packages would be modified.`,
|
|
350
|
+
),
|
|
351
|
+
);
|
|
352
|
+
} else {
|
|
353
|
+
console.log(`Done. Updated ${result.changedCount} packages.`);
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
const showHelp = (): void => {
|
|
360
|
+
console.log("eser codebase - Codebase validation tools\n");
|
|
361
|
+
console.log("Usage: eser codebase <subcommand> [options]\n");
|
|
362
|
+
console.log("Subcommands:");
|
|
363
|
+
console.log(" check-circular-deps Detect circular package dependencies");
|
|
364
|
+
console.log(" check-mod-exports Validate mod.ts exports all files");
|
|
365
|
+
console.log(" check-export-names Validate export naming conventions");
|
|
366
|
+
console.log(" check-docs Validate JSDoc documentation");
|
|
367
|
+
console.log(" check-licenses Validate license headers");
|
|
368
|
+
console.log(
|
|
369
|
+
" check-package-configs Validate deno.json/package.json consistency",
|
|
370
|
+
);
|
|
371
|
+
console.log(" versions Manage workspace versions");
|
|
372
|
+
console.log(
|
|
373
|
+
"\nRun 'eser codebase <subcommand> --help' for subcommand options.",
|
|
374
|
+
);
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
export const codebaseCommand = async (
|
|
378
|
+
rawArgs: string[],
|
|
379
|
+
_parentFlags: Record<string, unknown>,
|
|
380
|
+
): Promise<void> => {
|
|
381
|
+
// Parse all flags (don't use stopEarly so --help is always captured)
|
|
382
|
+
const parsed = cliParseArgs.parseArgs(rawArgs, {
|
|
383
|
+
boolean: ["help", "dry-run", "fix"],
|
|
384
|
+
string: ["root"],
|
|
385
|
+
alias: { h: "help" },
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
const subcommand = parsed._[0] as string | undefined;
|
|
389
|
+
|
|
390
|
+
// Show main help if no subcommand or help without subcommand
|
|
391
|
+
if (subcommand === undefined) {
|
|
392
|
+
showHelp();
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
const def = subcommands[subcommand];
|
|
397
|
+
if (def === undefined) {
|
|
398
|
+
console.error(fmtColors.red(`Unknown subcommand: ${subcommand}`));
|
|
399
|
+
console.log("");
|
|
400
|
+
showHelp();
|
|
401
|
+
standardsRuntime.runtime.process.exit(1);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Show subcommand help if --help flag
|
|
405
|
+
if (parsed.help) {
|
|
406
|
+
showSubcommandHelp(subcommand, def);
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
await def.handler(parsed._.slice(1) as string[], parsed);
|
|
411
|
+
};
|
package/deno.json
ADDED
package/main.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright 2023-present Eser Ozvataf and other contributors. All rights reserved. Apache-2.0 license.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* eser - Versatile development CLI
|
|
5
|
+
*
|
|
6
|
+
* A multi-purpose command-line tool for development workflows.
|
|
7
|
+
* Similar in design to `gh` (GitHub CLI) or `wrangler` (Cloudflare).
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* deno run -A ./main.ts <command> [subcommand] [options]
|
|
11
|
+
* dx jsr:@eser/cli <command> [subcommand] [options]
|
|
12
|
+
*
|
|
13
|
+
* Commands:
|
|
14
|
+
* codebase Codebase validation and management tools
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as cliParseArgs from "@std/cli/parse-args";
|
|
20
|
+
import * as standardsRuntime from "@eser/standards/runtime";
|
|
21
|
+
import { codebaseCommand } from "./commands/codebase/mod.ts";
|
|
22
|
+
|
|
23
|
+
type CommandHandler = (
|
|
24
|
+
args: string[],
|
|
25
|
+
flags: Record<string, unknown>,
|
|
26
|
+
) => Promise<void>;
|
|
27
|
+
|
|
28
|
+
const commands: Record<string, CommandHandler> = {
|
|
29
|
+
codebase: codebaseCommand,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const showHelp = (): void => {
|
|
33
|
+
console.log("eser - Versatile development CLI\n");
|
|
34
|
+
console.log("Usage: eser <command> [subcommand] [options]\n");
|
|
35
|
+
console.log("Commands:");
|
|
36
|
+
console.log(" codebase Codebase validation and management tools");
|
|
37
|
+
console.log("\nOptions:");
|
|
38
|
+
console.log(" -h, --help Show this help message");
|
|
39
|
+
console.log(" -v, --version Show version number");
|
|
40
|
+
console.log("\nRun 'eser <command> --help' for command-specific help.");
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const main = async (): Promise<void> => {
|
|
44
|
+
// @ts-ignore parseArgs doesn't mutate the array, readonly is safe
|
|
45
|
+
const args = cliParseArgs.parseArgs(standardsRuntime.runtime.process.args, {
|
|
46
|
+
boolean: ["help", "version"],
|
|
47
|
+
alias: { h: "help", v: "version" },
|
|
48
|
+
stopEarly: true, // Stop parsing at first non-option to pass rest to subcommand
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if (args.version) {
|
|
52
|
+
console.log("eser 0.8.0");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const command = args._[0] as string | undefined;
|
|
57
|
+
|
|
58
|
+
// Show main help only if no command or help without command
|
|
59
|
+
if (command === undefined) {
|
|
60
|
+
showHelp();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const handler = commands[command];
|
|
65
|
+
if (handler === undefined) {
|
|
66
|
+
console.error(`Unknown command: ${command}`);
|
|
67
|
+
console.log("");
|
|
68
|
+
showHelp();
|
|
69
|
+
standardsRuntime.runtime.process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Pass remaining args to command handler
|
|
73
|
+
await handler(args._.slice(1) as string[], args);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
if (import.meta.main) {
|
|
77
|
+
await main();
|
|
78
|
+
}
|
package/package.json
CHANGED
|
@@ -1,37 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eser",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"eslintconfig"
|
|
9
|
-
],
|
|
10
|
-
"scripts": {
|
|
11
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
3
|
+
"version": "0.8.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": "./main.ts",
|
|
6
|
+
"bin": {
|
|
7
|
+
"eser": "./main.ts"
|
|
12
8
|
},
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
}
|
|
19
|
-
"license": "Apache-2.0",
|
|
20
|
-
"contributors": [
|
|
21
|
-
{
|
|
22
|
-
"name": "Eser Ozvataf",
|
|
23
|
-
"email": "eser@ozvataf.com",
|
|
24
|
-
"url": "http://eser.ozvataf.com/"
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"main": "index.js",
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "https://github.com/eserozvataf/eser.git"
|
|
31
|
-
},
|
|
32
|
-
"files": [
|
|
33
|
-
"index.js",
|
|
34
|
-
".eslintrc.json",
|
|
35
|
-
".csscomb.json"
|
|
36
|
-
]
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@eser/codebase": "workspace:*",
|
|
11
|
+
"@eser/standards": "workspace:*",
|
|
12
|
+
"@std/cli": "npm:@jsr/std__cli@^1.0.25",
|
|
13
|
+
"@std/fmt": "npm:@jsr/std__fmt@^1.0.8"
|
|
14
|
+
}
|
|
37
15
|
}
|
package/.csscomb.json
DELETED
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"exclude": [
|
|
3
|
-
".git/**",
|
|
4
|
-
"node_modules/**",
|
|
5
|
-
"bower_components/**"
|
|
6
|
-
],
|
|
7
|
-
|
|
8
|
-
"remove-empty-rulesets": true,
|
|
9
|
-
"always-semicolon": true,
|
|
10
|
-
"color-case": "upper",
|
|
11
|
-
"block-indent": " ",
|
|
12
|
-
"color-shorthand": false,
|
|
13
|
-
"element-case": "lower",
|
|
14
|
-
"eof-newline": true,
|
|
15
|
-
"leading-zero": true,
|
|
16
|
-
"quotes": "single",
|
|
17
|
-
"space-before-colon": "",
|
|
18
|
-
"space-after-colon": " ",
|
|
19
|
-
"space-before-combinator": " ",
|
|
20
|
-
"space-after-combinator": " ",
|
|
21
|
-
"space-between-declarations": "\n",
|
|
22
|
-
"space-before-opening-brace": " ",
|
|
23
|
-
"space-after-opening-brace": "\n",
|
|
24
|
-
"space-after-selector-delimiter": " ",
|
|
25
|
-
"space-before-selector-delimiter": "",
|
|
26
|
-
"space-before-closing-brace": "\n",
|
|
27
|
-
"strip-spaces": true,
|
|
28
|
-
"tab-size": 4,
|
|
29
|
-
"unitless-zero": true,
|
|
30
|
-
"vendor-prefix-align": true,
|
|
31
|
-
"verbose": true,
|
|
32
|
-
|
|
33
|
-
"sort-order": [
|
|
34
|
-
[
|
|
35
|
-
"font",
|
|
36
|
-
"font-family",
|
|
37
|
-
"font-size",
|
|
38
|
-
"font-weight",
|
|
39
|
-
"font-style",
|
|
40
|
-
"font-variant",
|
|
41
|
-
"font-size-adjust",
|
|
42
|
-
"font-stretch",
|
|
43
|
-
"font-effect",
|
|
44
|
-
"font-emphasize",
|
|
45
|
-
"font-emphasize-position",
|
|
46
|
-
"font-emphasize-style",
|
|
47
|
-
"font-smooth",
|
|
48
|
-
"line-height"
|
|
49
|
-
],
|
|
50
|
-
[
|
|
51
|
-
"position",
|
|
52
|
-
"z-index",
|
|
53
|
-
"top",
|
|
54
|
-
"right",
|
|
55
|
-
"bottom",
|
|
56
|
-
"left"
|
|
57
|
-
],
|
|
58
|
-
[
|
|
59
|
-
"display",
|
|
60
|
-
"visibility",
|
|
61
|
-
"float",
|
|
62
|
-
"clear",
|
|
63
|
-
"overflow",
|
|
64
|
-
"overflow-x",
|
|
65
|
-
"overflow-y",
|
|
66
|
-
"-ms-overflow-x",
|
|
67
|
-
"-ms-overflow-y",
|
|
68
|
-
"clip",
|
|
69
|
-
"zoom",
|
|
70
|
-
"flex-direction",
|
|
71
|
-
"flex-order",
|
|
72
|
-
"flex-pack",
|
|
73
|
-
"flex-align"
|
|
74
|
-
],
|
|
75
|
-
[
|
|
76
|
-
"-webkit-box-sizing",
|
|
77
|
-
"-moz-box-sizing",
|
|
78
|
-
"box-sizing",
|
|
79
|
-
"width",
|
|
80
|
-
"min-width",
|
|
81
|
-
"max-width",
|
|
82
|
-
"height",
|
|
83
|
-
"min-height",
|
|
84
|
-
"max-height",
|
|
85
|
-
"margin",
|
|
86
|
-
"margin-top",
|
|
87
|
-
"margin-right",
|
|
88
|
-
"margin-bottom",
|
|
89
|
-
"margin-left",
|
|
90
|
-
"padding",
|
|
91
|
-
"padding-top",
|
|
92
|
-
"padding-right",
|
|
93
|
-
"padding-bottom",
|
|
94
|
-
"padding-left"
|
|
95
|
-
],
|
|
96
|
-
[
|
|
97
|
-
"table-layout",
|
|
98
|
-
"empty-cells",
|
|
99
|
-
"caption-side",
|
|
100
|
-
"border-spacing",
|
|
101
|
-
"border-collapse",
|
|
102
|
-
"list-style",
|
|
103
|
-
"list-style-position",
|
|
104
|
-
"list-style-type",
|
|
105
|
-
"list-style-image"
|
|
106
|
-
],
|
|
107
|
-
[
|
|
108
|
-
"content",
|
|
109
|
-
"quotes",
|
|
110
|
-
"counter-reset",
|
|
111
|
-
"counter-increment",
|
|
112
|
-
"resize",
|
|
113
|
-
"cursor",
|
|
114
|
-
"-webkit-user-select",
|
|
115
|
-
"-moz-user-select",
|
|
116
|
-
"-ms-user-select",
|
|
117
|
-
"user-select",
|
|
118
|
-
"nav-index",
|
|
119
|
-
"nav-up",
|
|
120
|
-
"nav-right",
|
|
121
|
-
"nav-down",
|
|
122
|
-
"nav-left",
|
|
123
|
-
"-webkit-transition",
|
|
124
|
-
"-moz-transition",
|
|
125
|
-
"-ms-transition",
|
|
126
|
-
"-o-transition",
|
|
127
|
-
"transition",
|
|
128
|
-
"-webkit-transition-delay",
|
|
129
|
-
"-moz-transition-delay",
|
|
130
|
-
"-ms-transition-delay",
|
|
131
|
-
"-o-transition-delay",
|
|
132
|
-
"transition-delay",
|
|
133
|
-
"-webkit-transition-timing-function",
|
|
134
|
-
"-moz-transition-timing-function",
|
|
135
|
-
"-ms-transition-timing-function",
|
|
136
|
-
"-o-transition-timing-function",
|
|
137
|
-
"transition-timing-function",
|
|
138
|
-
"-webkit-transition-duration",
|
|
139
|
-
"-moz-transition-duration",
|
|
140
|
-
"-ms-transition-duration",
|
|
141
|
-
"-o-transition-duration",
|
|
142
|
-
"transition-duration",
|
|
143
|
-
"-webkit-transition-property",
|
|
144
|
-
"-moz-transition-property",
|
|
145
|
-
"-ms-transition-property",
|
|
146
|
-
"-o-transition-property",
|
|
147
|
-
"transition-property",
|
|
148
|
-
"-webkit-transform",
|
|
149
|
-
"-moz-transform",
|
|
150
|
-
"-ms-transform",
|
|
151
|
-
"-o-transform",
|
|
152
|
-
"transform",
|
|
153
|
-
"-webkit-transform-origin",
|
|
154
|
-
"-moz-transform-origin",
|
|
155
|
-
"-ms-transform-origin",
|
|
156
|
-
"-o-transform-origin",
|
|
157
|
-
"transform-origin",
|
|
158
|
-
"-webkit-animation",
|
|
159
|
-
"-moz-animation",
|
|
160
|
-
"-ms-animation",
|
|
161
|
-
"-o-animation",
|
|
162
|
-
"animation",
|
|
163
|
-
"-webkit-animation-name",
|
|
164
|
-
"-moz-animation-name",
|
|
165
|
-
"-ms-animation-name",
|
|
166
|
-
"-o-animation-name",
|
|
167
|
-
"animation-name",
|
|
168
|
-
"-webkit-animation-duration",
|
|
169
|
-
"-moz-animation-duration",
|
|
170
|
-
"-ms-animation-duration",
|
|
171
|
-
"-o-animation-duration",
|
|
172
|
-
"animation-duration",
|
|
173
|
-
"-webkit-animation-play-state",
|
|
174
|
-
"-moz-animation-play-state",
|
|
175
|
-
"-ms-animation-play-state",
|
|
176
|
-
"-o-animation-play-state",
|
|
177
|
-
"animation-play-state",
|
|
178
|
-
"-webkit-animation-timing-function",
|
|
179
|
-
"-moz-animation-timing-function",
|
|
180
|
-
"-ms-animation-timing-function",
|
|
181
|
-
"-o-animation-timing-function",
|
|
182
|
-
"animation-timing-function",
|
|
183
|
-
"-webkit-animation-delay",
|
|
184
|
-
"-moz-animation-delay",
|
|
185
|
-
"-ms-animation-delay",
|
|
186
|
-
"-o-animation-delay",
|
|
187
|
-
"animation-delay",
|
|
188
|
-
"-webkit-animation-iteration-count",
|
|
189
|
-
"-moz-animation-iteration-count",
|
|
190
|
-
"-ms-animation-iteration-count",
|
|
191
|
-
"-o-animation-iteration-count",
|
|
192
|
-
"animation-iteration-count",
|
|
193
|
-
"-webkit-animation-direction",
|
|
194
|
-
"-moz-animation-direction",
|
|
195
|
-
"-ms-animation-direction",
|
|
196
|
-
"-o-animation-direction",
|
|
197
|
-
"animation-direction",
|
|
198
|
-
"text-align",
|
|
199
|
-
"-webkit-text-align-last",
|
|
200
|
-
"-moz-text-align-last",
|
|
201
|
-
"-ms-text-align-last",
|
|
202
|
-
"text-align-last",
|
|
203
|
-
"vertical-align",
|
|
204
|
-
"white-space",
|
|
205
|
-
"text-decoration",
|
|
206
|
-
"text-emphasis",
|
|
207
|
-
"text-emphasis-color",
|
|
208
|
-
"text-emphasis-style",
|
|
209
|
-
"text-emphasis-position",
|
|
210
|
-
"text-indent",
|
|
211
|
-
"-ms-text-justify",
|
|
212
|
-
"text-justify",
|
|
213
|
-
"letter-spacing",
|
|
214
|
-
"word-spacing",
|
|
215
|
-
"-ms-writing-mode",
|
|
216
|
-
"text-outline",
|
|
217
|
-
"text-transform",
|
|
218
|
-
"text-wrap",
|
|
219
|
-
"text-overflow",
|
|
220
|
-
"-ms-text-overflow",
|
|
221
|
-
"text-overflow-ellipsis",
|
|
222
|
-
"text-overflow-mode",
|
|
223
|
-
"-ms-word-wrap",
|
|
224
|
-
"word-wrap",
|
|
225
|
-
"word-break",
|
|
226
|
-
"-ms-word-break",
|
|
227
|
-
"-moz-tab-size",
|
|
228
|
-
"-o-tab-size",
|
|
229
|
-
"tab-size",
|
|
230
|
-
"-webkit-hyphens",
|
|
231
|
-
"-moz-hyphens",
|
|
232
|
-
"hyphens",
|
|
233
|
-
"pointer-events"
|
|
234
|
-
],
|
|
235
|
-
[
|
|
236
|
-
"opacity",
|
|
237
|
-
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
|
|
238
|
-
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
|
|
239
|
-
"-ms-interpolation-mode",
|
|
240
|
-
"color",
|
|
241
|
-
"border",
|
|
242
|
-
"border-width",
|
|
243
|
-
"border-style",
|
|
244
|
-
"border-color",
|
|
245
|
-
"border-top",
|
|
246
|
-
"border-top-width",
|
|
247
|
-
"border-top-style",
|
|
248
|
-
"border-top-color",
|
|
249
|
-
"border-right",
|
|
250
|
-
"border-right-width",
|
|
251
|
-
"border-right-style",
|
|
252
|
-
"border-right-color",
|
|
253
|
-
"border-bottom",
|
|
254
|
-
"border-bottom-width",
|
|
255
|
-
"border-bottom-style",
|
|
256
|
-
"border-bottom-color",
|
|
257
|
-
"border-left",
|
|
258
|
-
"border-left-width",
|
|
259
|
-
"border-left-style",
|
|
260
|
-
"border-left-color",
|
|
261
|
-
"-webkit-border-radius",
|
|
262
|
-
"-moz-border-radius",
|
|
263
|
-
"border-radius",
|
|
264
|
-
"-webkit-border-top-left-radius",
|
|
265
|
-
"-moz-border-radius-topleft",
|
|
266
|
-
"border-top-left-radius",
|
|
267
|
-
"-webkit-border-top-right-radius",
|
|
268
|
-
"-moz-border-radius-topright",
|
|
269
|
-
"border-top-right-radius",
|
|
270
|
-
"-webkit-border-bottom-right-radius",
|
|
271
|
-
"-moz-border-radius-bottomright",
|
|
272
|
-
"border-bottom-right-radius",
|
|
273
|
-
"-webkit-border-bottom-left-radius",
|
|
274
|
-
"-moz-border-radius-bottomleft",
|
|
275
|
-
"border-bottom-left-radius",
|
|
276
|
-
"-webkit-border-image",
|
|
277
|
-
"-moz-border-image",
|
|
278
|
-
"-o-border-image",
|
|
279
|
-
"border-image",
|
|
280
|
-
"-webkit-border-image-source",
|
|
281
|
-
"-moz-border-image-source",
|
|
282
|
-
"-o-border-image-source",
|
|
283
|
-
"border-image-source",
|
|
284
|
-
"-webkit-border-image-slice",
|
|
285
|
-
"-moz-border-image-slice",
|
|
286
|
-
"-o-border-image-slice",
|
|
287
|
-
"border-image-slice",
|
|
288
|
-
"-webkit-border-image-width",
|
|
289
|
-
"-moz-border-image-width",
|
|
290
|
-
"-o-border-image-width",
|
|
291
|
-
"border-image-width",
|
|
292
|
-
"-webkit-border-image-outset",
|
|
293
|
-
"-moz-border-image-outset",
|
|
294
|
-
"-o-border-image-outset",
|
|
295
|
-
"border-image-outset",
|
|
296
|
-
"-webkit-border-image-repeat",
|
|
297
|
-
"-moz-border-image-repeat",
|
|
298
|
-
"-o-border-image-repeat",
|
|
299
|
-
"border-image-repeat",
|
|
300
|
-
"outline",
|
|
301
|
-
"outline-width",
|
|
302
|
-
"outline-style",
|
|
303
|
-
"outline-color",
|
|
304
|
-
"outline-offset",
|
|
305
|
-
"background",
|
|
306
|
-
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
|
|
307
|
-
"background-color",
|
|
308
|
-
"background-image",
|
|
309
|
-
"background-repeat",
|
|
310
|
-
"background-attachment",
|
|
311
|
-
"background-position",
|
|
312
|
-
"background-position-x",
|
|
313
|
-
"-ms-background-position-x",
|
|
314
|
-
"background-position-y",
|
|
315
|
-
"-ms-background-position-y",
|
|
316
|
-
"-webkit-background-clip",
|
|
317
|
-
"-moz-background-clip",
|
|
318
|
-
"background-clip",
|
|
319
|
-
"background-origin",
|
|
320
|
-
"-webkit-background-size",
|
|
321
|
-
"-moz-background-size",
|
|
322
|
-
"-o-background-size",
|
|
323
|
-
"background-size",
|
|
324
|
-
"box-decoration-break",
|
|
325
|
-
"-webkit-box-shadow",
|
|
326
|
-
"-moz-box-shadow",
|
|
327
|
-
"box-shadow",
|
|
328
|
-
"filter:progid:DXImageTransform.Microsoft.gradient",
|
|
329
|
-
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
|
|
330
|
-
"text-shadow"
|
|
331
|
-
]
|
|
332
|
-
]
|
|
333
|
-
}
|
package/.eslintrc.json
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"rules": {
|
|
3
|
-
"no-console": 0,
|
|
4
|
-
"complexity": [
|
|
5
|
-
1,
|
|
6
|
-
{
|
|
7
|
-
"maximum": 8
|
|
8
|
-
}
|
|
9
|
-
],
|
|
10
|
-
"consistent-return": 1,
|
|
11
|
-
"curly": [
|
|
12
|
-
2,
|
|
13
|
-
"all"
|
|
14
|
-
],
|
|
15
|
-
"dot-location": [
|
|
16
|
-
2,
|
|
17
|
-
"property"
|
|
18
|
-
],
|
|
19
|
-
"dot-notation": [
|
|
20
|
-
2,
|
|
21
|
-
{
|
|
22
|
-
"allowKeywords": true
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"eqeqeq": [
|
|
26
|
-
2,
|
|
27
|
-
"allow-null"
|
|
28
|
-
],
|
|
29
|
-
"guard-for-in": 1,
|
|
30
|
-
"no-alert": 1,
|
|
31
|
-
"no-caller": 2,
|
|
32
|
-
"no-else-return": 2,
|
|
33
|
-
"no-eval": 2,
|
|
34
|
-
"no-extend-native": [
|
|
35
|
-
2,
|
|
36
|
-
{
|
|
37
|
-
"exceptions": [
|
|
38
|
-
"Object"
|
|
39
|
-
]
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
"no-extra-bind": 1,
|
|
43
|
-
"no-extra-label": 1,
|
|
44
|
-
"no-implicit-coercion": 1,
|
|
45
|
-
"no-implicit-globals": 1,
|
|
46
|
-
"no-implied-eval": 2,
|
|
47
|
-
"no-invalid-this": 1,
|
|
48
|
-
"no-iterator": 1,
|
|
49
|
-
"no-labels": 1,
|
|
50
|
-
"no-lone-blocks": 1,
|
|
51
|
-
"no-loop-func": 1,
|
|
52
|
-
"no-magic-numbers": 1,
|
|
53
|
-
"no-multi-spaces": 1,
|
|
54
|
-
"no-native-reassign": 2,
|
|
55
|
-
"no-new": 2,
|
|
56
|
-
"no-new-func": 2,
|
|
57
|
-
"no-new-wrappers": 2,
|
|
58
|
-
"no-param-reassign": [
|
|
59
|
-
1,
|
|
60
|
-
{
|
|
61
|
-
"props": false
|
|
62
|
-
}
|
|
63
|
-
],
|
|
64
|
-
"no-proto": 1,
|
|
65
|
-
"no-return-assign": 1,
|
|
66
|
-
"no-self-compare": 1,
|
|
67
|
-
"no-throw-literal": 1,
|
|
68
|
-
"no-unused-expressions": [
|
|
69
|
-
1,
|
|
70
|
-
{
|
|
71
|
-
"allowShortCircuit": false,
|
|
72
|
-
"allowTernary": false
|
|
73
|
-
}
|
|
74
|
-
],
|
|
75
|
-
"no-useless-call": 1,
|
|
76
|
-
"no-useless-concat": 1,
|
|
77
|
-
"no-void": 1,
|
|
78
|
-
"wrap-iife": [
|
|
79
|
-
2,
|
|
80
|
-
"outside"
|
|
81
|
-
],
|
|
82
|
-
"yoda": [
|
|
83
|
-
2,
|
|
84
|
-
"never",
|
|
85
|
-
{
|
|
86
|
-
"exceptRange": false,
|
|
87
|
-
"onlyEquality": false
|
|
88
|
-
}
|
|
89
|
-
],
|
|
90
|
-
"strict": [
|
|
91
|
-
1,
|
|
92
|
-
"global"
|
|
93
|
-
],
|
|
94
|
-
"no-catch-shadow": 2,
|
|
95
|
-
"no-label-var": 2,
|
|
96
|
-
"no-shadow": [
|
|
97
|
-
2,
|
|
98
|
-
{
|
|
99
|
-
"builtinGlobals": false,
|
|
100
|
-
"hoist": "all",
|
|
101
|
-
"allow": []
|
|
102
|
-
}
|
|
103
|
-
],
|
|
104
|
-
"no-shadow-restricted-names": 2,
|
|
105
|
-
"no-undef-init": 2,
|
|
106
|
-
"no-unused-vars": [
|
|
107
|
-
0,
|
|
108
|
-
{
|
|
109
|
-
"vars": "local",
|
|
110
|
-
"args": "after-used"
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
"no-use-before-define": [
|
|
114
|
-
2,
|
|
115
|
-
{
|
|
116
|
-
"functions": true,
|
|
117
|
-
"classes": true
|
|
118
|
-
}
|
|
119
|
-
],
|
|
120
|
-
"no-new-require": 2,
|
|
121
|
-
"array-bracket-spacing": [
|
|
122
|
-
2,
|
|
123
|
-
"always"
|
|
124
|
-
],
|
|
125
|
-
"block-spacing": [
|
|
126
|
-
2,
|
|
127
|
-
"always"
|
|
128
|
-
],
|
|
129
|
-
"brace-style": [
|
|
130
|
-
2,
|
|
131
|
-
"stroustrup",
|
|
132
|
-
{
|
|
133
|
-
"allowSingleLine": true
|
|
134
|
-
}
|
|
135
|
-
],
|
|
136
|
-
"camelcase": [
|
|
137
|
-
1,
|
|
138
|
-
{
|
|
139
|
-
"properties": "always"
|
|
140
|
-
}
|
|
141
|
-
],
|
|
142
|
-
"comma-spacing": [
|
|
143
|
-
2,
|
|
144
|
-
{
|
|
145
|
-
"before": false,
|
|
146
|
-
"after": true
|
|
147
|
-
}
|
|
148
|
-
],
|
|
149
|
-
"comma-style": [
|
|
150
|
-
2,
|
|
151
|
-
"last"
|
|
152
|
-
],
|
|
153
|
-
"computed-property-spacing": [
|
|
154
|
-
2,
|
|
155
|
-
"never"
|
|
156
|
-
],
|
|
157
|
-
"consistent-this": [
|
|
158
|
-
2,
|
|
159
|
-
"self"
|
|
160
|
-
],
|
|
161
|
-
"eol-last": 2,
|
|
162
|
-
"indent": [
|
|
163
|
-
1,
|
|
164
|
-
4
|
|
165
|
-
],
|
|
166
|
-
"key-spacing": [
|
|
167
|
-
2,
|
|
168
|
-
{
|
|
169
|
-
"beforeColon": false,
|
|
170
|
-
"afterColon": true,
|
|
171
|
-
"mode": "strict"
|
|
172
|
-
}
|
|
173
|
-
],
|
|
174
|
-
"keyword-spacing": [
|
|
175
|
-
2,
|
|
176
|
-
{
|
|
177
|
-
"before": true,
|
|
178
|
-
"after": true
|
|
179
|
-
}
|
|
180
|
-
],
|
|
181
|
-
"linebreak-style": [
|
|
182
|
-
2,
|
|
183
|
-
"unix"
|
|
184
|
-
],
|
|
185
|
-
"new-parens": 2,
|
|
186
|
-
"newline-after-var": [
|
|
187
|
-
1,
|
|
188
|
-
"always"
|
|
189
|
-
],
|
|
190
|
-
"newline-before-return": 1,
|
|
191
|
-
"newline-per-chained-call": 1,
|
|
192
|
-
"no-mixed-spaces-and-tabs": 1,
|
|
193
|
-
"no-new-object": 2,
|
|
194
|
-
"no-plusplus": 1,
|
|
195
|
-
"no-spaced-func": 2,
|
|
196
|
-
"no-trailing-spaces": [
|
|
197
|
-
1,
|
|
198
|
-
{
|
|
199
|
-
"skipBlankLines": false
|
|
200
|
-
}
|
|
201
|
-
],
|
|
202
|
-
"no-unneeded-ternary": 1,
|
|
203
|
-
"no-whitespace-before-property": 1,
|
|
204
|
-
"object-curly-spacing": [
|
|
205
|
-
2,
|
|
206
|
-
"always"
|
|
207
|
-
],
|
|
208
|
-
"operator-linebreak": [
|
|
209
|
-
2,
|
|
210
|
-
"after"
|
|
211
|
-
],
|
|
212
|
-
"quote-props": [
|
|
213
|
-
2,
|
|
214
|
-
"as-needed",
|
|
215
|
-
{
|
|
216
|
-
"keywords": true,
|
|
217
|
-
"unnecessary": false
|
|
218
|
-
}
|
|
219
|
-
],
|
|
220
|
-
"quotes": [
|
|
221
|
-
2,
|
|
222
|
-
"single"
|
|
223
|
-
],
|
|
224
|
-
"semi": [
|
|
225
|
-
2,
|
|
226
|
-
"always"
|
|
227
|
-
],
|
|
228
|
-
"semi-spacing": [
|
|
229
|
-
2,
|
|
230
|
-
{
|
|
231
|
-
"before": false,
|
|
232
|
-
"after": true
|
|
233
|
-
}
|
|
234
|
-
],
|
|
235
|
-
"space-before-blocks": [
|
|
236
|
-
2,
|
|
237
|
-
{
|
|
238
|
-
"functions": "always",
|
|
239
|
-
"keywords": "always",
|
|
240
|
-
"classes": "always"
|
|
241
|
-
}
|
|
242
|
-
],
|
|
243
|
-
"space-before-function-paren": [
|
|
244
|
-
2,
|
|
245
|
-
{
|
|
246
|
-
"anonymous": "always",
|
|
247
|
-
"named": "never"
|
|
248
|
-
}
|
|
249
|
-
],
|
|
250
|
-
"space-in-parens": [
|
|
251
|
-
2,
|
|
252
|
-
"never"
|
|
253
|
-
],
|
|
254
|
-
"space-infix-ops": [
|
|
255
|
-
2,
|
|
256
|
-
{
|
|
257
|
-
"int32Hint": false
|
|
258
|
-
}
|
|
259
|
-
],
|
|
260
|
-
"space-unary-ops": [
|
|
261
|
-
2,
|
|
262
|
-
{
|
|
263
|
-
"words": true,
|
|
264
|
-
"nonwords": false
|
|
265
|
-
}
|
|
266
|
-
],
|
|
267
|
-
"arrow-body-style": [
|
|
268
|
-
2,
|
|
269
|
-
"as-needed"
|
|
270
|
-
],
|
|
271
|
-
"arrow-parens": [
|
|
272
|
-
2,
|
|
273
|
-
"always"
|
|
274
|
-
],
|
|
275
|
-
"arrow-spacing": [
|
|
276
|
-
2,
|
|
277
|
-
{
|
|
278
|
-
"before": true,
|
|
279
|
-
"after": true
|
|
280
|
-
}
|
|
281
|
-
],
|
|
282
|
-
"no-confusing-arrow": [
|
|
283
|
-
2,
|
|
284
|
-
{
|
|
285
|
-
"allowParens": false
|
|
286
|
-
}
|
|
287
|
-
],
|
|
288
|
-
"no-var": 2,
|
|
289
|
-
"prefer-const": 1,
|
|
290
|
-
"prefer-rest-params": 2,
|
|
291
|
-
"prefer-spread": 2,
|
|
292
|
-
"prefer-template": 1
|
|
293
|
-
},
|
|
294
|
-
"extends": "eslint:recommended"
|
|
295
|
-
}
|
package/LICENSE
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Copyright 2013-2016 Eser Ozvataf
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
package/README.md
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# eser
|
|
2
|
-
|
|
3
|
-
[![npm version][npm-image]][npm-url]
|
|
4
|
-
[![npm download][download-image]][npm-url]
|
|
5
|
-
[![dependencies][dep-image]][dep-url]
|
|
6
|
-
[![license][license-image]][license-url]
|
|
7
|
-
|
|
8
|
-
This repository consists of my own coding standard and guidelines. You can fork and modify it to have yours or use it as it is.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
### Usage
|
|
12
|
-
|
|
13
|
-
To Install:
|
|
14
|
-
`npm install eser`
|
|
15
|
-
|
|
16
|
-
To validate with ESLint:
|
|
17
|
-
`eslint --config ./node_modules/eser/.eslintrc.json ./src/`
|
|
18
|
-
|
|
19
|
-
To validate with CSScomb:
|
|
20
|
-
`csscomb --lint --config ./node_modules/eser/.csscomb.json ./src/`
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
### Todo List
|
|
24
|
-
|
|
25
|
-
See [GitHub Issues](https://github.com/eserozvataf/eser/issues).
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
### Requirements
|
|
29
|
-
|
|
30
|
-
* node.js (https://nodejs.org/)
|
|
31
|
-
* ESLint (http://eslint.org)
|
|
32
|
-
* CSScomb (http://csscomb.com)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## License
|
|
36
|
-
|
|
37
|
-
Apache 2.0, for further details, please see [LICENSE](LICENSE) file
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Contributing
|
|
41
|
-
|
|
42
|
-
See [contributors.md](contributors.md)
|
|
43
|
-
|
|
44
|
-
It is publicly open for any contribution. Bugfixes, new features and extra modules are welcome.
|
|
45
|
-
|
|
46
|
-
* To contribute to code: Fork the repo, push your changes to your fork, and submit a pull request.
|
|
47
|
-
* To report a bug: If something does not work, please report it using GitHub issues.
|
|
48
|
-
* To support: [](https://gratipay.com/eserozvataf/)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
[npm-image]: https://img.shields.io/npm/v/eser.svg?style=flat-square
|
|
52
|
-
[npm-url]: https://www.npmjs.com/package/eser
|
|
53
|
-
[download-image]: https://img.shields.io/npm/dt/eser.svg?style=flat-square
|
|
54
|
-
[dep-image]: https://img.shields.io/david/eserozvataf/eser.svg?style=flat-square
|
|
55
|
-
[dep-url]: https://github.com/eserozvataf/eser
|
|
56
|
-
[license-image]: https://img.shields.io/npm/l/eser.svg?style=flat-square
|
|
57
|
-
[license-url]: https://github.com/eserozvataf/eser/blob/master/LICENSE
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('./.eslintrc.json');
|