icore 0.0.37 → 1.0.0-alpha

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,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeOptionsSchema = mergeOptionsSchema;
4
+ exports.parseOptions = parseOptions;
5
+ exports.parseOptionsDetailed = parseOptionsDetailed;
6
+ /**
7
+ * Merges option schemas while preserving literal option definition types.
8
+ *
9
+ * Later schemas override earlier schemas with the same option name.
10
+ */
11
+ function mergeOptionsSchema(schema, ...schemas) {
12
+ return Object.assign({}, schema, ...schemas);
13
+ }
14
+ /**
15
+ * Validates raw option values against a declarative option schema.
16
+ */
17
+ function parseOptions(schema, values) {
18
+ return parseOptionsDetailed(schema, values).options;
19
+ }
20
+ /**
21
+ * Validates raw option values and returns parsed values with user-provided
22
+ * metadata.
23
+ */
24
+ function parseOptionsDetailed(schema, values) {
25
+ const parsed = {};
26
+ const provided = {};
27
+ for (const name of Object.keys(values)) {
28
+ if (!Object.hasOwn(schema, name)) {
29
+ throw new Error(`Unexpected argument '--${name}'`);
30
+ }
31
+ }
32
+ for (const name of Object.keys(schema)) {
33
+ const definition = schema[name];
34
+ const value = values[String(name)];
35
+ if (definition === undefined) {
36
+ continue;
37
+ }
38
+ provided[name] = value !== undefined;
39
+ if (value === undefined) {
40
+ if ('default' in definition) {
41
+ parsed[name] = parseDefaultOptionValue(String(name), definition);
42
+ continue;
43
+ }
44
+ if (definition.required === true) {
45
+ throw new Error(`Expected required argument '--${String(name)}'`);
46
+ }
47
+ parsed[name] = undefined;
48
+ continue;
49
+ }
50
+ parsed[name] = parseOptionValue(String(name), definition, value);
51
+ }
52
+ return {
53
+ options: parsed,
54
+ provided: provided
55
+ };
56
+ }
57
+ function parseOptionValue(name, definition, value) {
58
+ if (definition.type === 'string') {
59
+ return parseStringOption(name, definition, value);
60
+ }
61
+ if (definition.type === 'boolean') {
62
+ return parseBooleanOption(name, value);
63
+ }
64
+ return parseNumberOption(name, definition, value);
65
+ }
66
+ function parseDefaultOptionValue(name, definition) {
67
+ const value = definition.default;
68
+ if (definition.type === 'string') {
69
+ if (typeof value !== 'string' || value.trim() === '') {
70
+ throw new Error(`Expected default for '--${name}' as string`);
71
+ }
72
+ assertChoice(name, definition.choices, value);
73
+ return value;
74
+ }
75
+ if (definition.type === 'boolean') {
76
+ if (typeof value !== 'boolean') {
77
+ throw new Error(`Expected default for '--${name}' as boolean`);
78
+ }
79
+ return value;
80
+ }
81
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
82
+ throw new Error(`Expected default for '--${name}' as number`);
83
+ }
84
+ validateNumberConstraints(name, definition, value);
85
+ return value;
86
+ }
87
+ function parseStringOption(name, definition, value) {
88
+ if (typeof value !== 'string' || value.trim() === '') {
89
+ throw new Error(`Expected '--${name}' as string`);
90
+ }
91
+ assertChoice(name, definition.choices, value);
92
+ return value;
93
+ }
94
+ function parseBooleanOption(name, value) {
95
+ if (value !== true) {
96
+ throw new Error(`Expected '--${name}' as boolean flag`);
97
+ }
98
+ return true;
99
+ }
100
+ function parseNumberOption(name, definition, value) {
101
+ if (typeof value !== 'string' || value.trim() === '') {
102
+ throw new Error(`Expected '--${name}' as number`);
103
+ }
104
+ if (!/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(value)) {
105
+ throw new Error(`Expected '--${name}' as number`);
106
+ }
107
+ const parsed = Number(value);
108
+ if (!Number.isFinite(parsed)) {
109
+ throw new Error(`Expected '--${name}' as number`);
110
+ }
111
+ validateNumberConstraints(name, definition, parsed);
112
+ return parsed;
113
+ }
114
+ function validateNumberConstraints(name, definition, parsed) {
115
+ if (definition.integer === true && !Number.isInteger(parsed)) {
116
+ throw new Error(`Expected '--${name}' as integer`);
117
+ }
118
+ if (definition.min !== undefined && parsed < definition.min) {
119
+ throw new Error(`Expected '--${name}' to be greater than or equal to ${String(definition.min)}`);
120
+ }
121
+ if (definition.max !== undefined && parsed > definition.max) {
122
+ throw new Error(`Expected '--${name}' to be less than or equal to ${String(definition.max)}`);
123
+ }
124
+ assertChoice(name, definition.choices, parsed);
125
+ }
126
+ function assertChoice(name, choices, value) {
127
+ if (choices === undefined || choices.includes(value)) {
128
+ return;
129
+ }
130
+ throw new Error(`Expected '--${name}' as one of: ${choices.join(', ')}`);
131
+ }
132
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,33 +1,43 @@
1
1
  {
2
2
  "name": "icore",
3
- "version": "0.0.37",
4
- "description": "Simple ECMAScript 6 (ES6) Framework",
5
- "main": "ICore.js",
6
- "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
8
- },
9
- "repository" : {
10
- "type" : "git",
11
- "url" : "https://github.com/woodger/icore"
12
- },
3
+ "version": "1.0.0-alpha",
4
+ "description": "Build command line interface",
13
5
  "keywords": [
14
- "ES6",
15
- "MongoDB",
16
- "Cookie",
17
- "Template strings",
18
- "Routing"
6
+ "cli"
19
7
  ],
8
+ "license": "MIT",
20
9
  "author": {
21
10
  "name": "Stanislav Woodger",
22
- "email": "woodger@ya.ru",
23
- "url": "https://www.npmjs.com/package/icore"
11
+ "email": "woodger@ya.ru"
24
12
  },
25
- "engines": {
26
- "node": ">= 7.6.0"
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/woodger/icore"
27
16
  },
28
- "dependencies": {
29
- "cookies": "^0.7.0",
30
- "mongodb": "^2.2.30"
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "require": "./dist/index.js",
23
+ "default": "./dist/index.js"
24
+ }
25
+ },
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "test": "node --test dist/**/*.test.js",
29
+ "lint": "eslint src eslint.config.mjs"
30
+ },
31
+ "engines": {
32
+ "node": ">=20.19.0"
31
33
  },
32
- "license": "MIT"
34
+ "dependencies": {},
35
+ "devDependencies": {
36
+ "@eslint/js": "^9.39.4",
37
+ "@types/node": "^26.0.1",
38
+ "eslint": "^9.39.4",
39
+ "globals": "^17.7.0",
40
+ "typescript": "^6.0.3",
41
+ "typescript-eslint": "^8.62.0"
42
+ }
33
43
  }