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.
@@ -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
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@eser/cli",
3
+ "version": "0.8.1",
4
+ "exports": "./main.ts",
5
+ "imports": {
6
+ "@std/cli": "jsr:@std/cli@^1.0.25",
7
+ "@std/fmt": "jsr:@std/fmt@^1.0.8"
8
+ }
9
+ }
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.3",
4
- "description": "",
5
- "keywords": [
6
- "eser",
7
- "ozvataf",
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
- "author": "Eser Ozvataf",
14
- "homepage": "https://eserozvataf.github.io/eser",
15
- "bugs": {
16
- "url": "https://github.com/eserozvataf/eser/issues",
17
- "email": "eser@ozvataf.com"
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: [![Donate](https://img.shields.io/gratipay/eserozvataf.svg)](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');