@mrmtsu/mcms-cli 0.1.0

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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +184 -0
  3. package/README.md +185 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +143 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/api.d.ts +2 -0
  8. package/dist/commands/api.js +27 -0
  9. package/dist/commands/api.js.map +1 -0
  10. package/dist/commands/auth.d.ts +2 -0
  11. package/dist/commands/auth.js +238 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/completion.d.ts +2 -0
  14. package/dist/commands/completion.js +390 -0
  15. package/dist/commands/completion.js.map +1 -0
  16. package/dist/commands/config.d.ts +2 -0
  17. package/dist/commands/config.js +63 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/content.d.ts +2 -0
  20. package/dist/commands/content.js +191 -0
  21. package/dist/commands/content.js.map +1 -0
  22. package/dist/commands/media.d.ts +2 -0
  23. package/dist/commands/media.js +47 -0
  24. package/dist/commands/media.js.map +1 -0
  25. package/dist/commands/schema.d.ts +2 -0
  26. package/dist/commands/schema.js +71 -0
  27. package/dist/commands/schema.js.map +1 -0
  28. package/dist/commands/types.d.ts +2 -0
  29. package/dist/commands/types.js +85 -0
  30. package/dist/commands/types.js.map +1 -0
  31. package/dist/commands/utils.d.ts +8 -0
  32. package/dist/commands/utils.js +56 -0
  33. package/dist/commands/utils.js.map +1 -0
  34. package/dist/commands/validate.d.ts +2 -0
  35. package/dist/commands/validate.js +38 -0
  36. package/dist/commands/validate.js.map +1 -0
  37. package/dist/core/auth-store.d.ts +11 -0
  38. package/dist/core/auth-store.js +83 -0
  39. package/dist/core/auth-store.js.map +1 -0
  40. package/dist/core/client.d.ts +33 -0
  41. package/dist/core/client.js +416 -0
  42. package/dist/core/client.js.map +1 -0
  43. package/dist/core/config.d.ts +11 -0
  44. package/dist/core/config.js +73 -0
  45. package/dist/core/config.js.map +1 -0
  46. package/dist/core/context.d.ts +39 -0
  47. package/dist/core/context.js +382 -0
  48. package/dist/core/context.js.map +1 -0
  49. package/dist/core/errors.d.ts +26 -0
  50. package/dist/core/errors.js +167 -0
  51. package/dist/core/errors.js.map +1 -0
  52. package/dist/core/exit-codes.d.ts +10 -0
  53. package/dist/core/exit-codes.js +10 -0
  54. package/dist/core/exit-codes.js.map +1 -0
  55. package/dist/core/http.d.ts +24 -0
  56. package/dist/core/http.js +237 -0
  57. package/dist/core/http.js.map +1 -0
  58. package/dist/core/io.d.ts +2 -0
  59. package/dist/core/io.js +39 -0
  60. package/dist/core/io.js.map +1 -0
  61. package/dist/core/output.d.ts +4 -0
  62. package/dist/core/output.js +182 -0
  63. package/dist/core/output.js.map +1 -0
  64. package/dist/core/schema.d.ts +23 -0
  65. package/dist/core/schema.js +319 -0
  66. package/dist/core/schema.js.map +1 -0
  67. package/dist/validation/payload.d.ts +6 -0
  68. package/dist/validation/payload.js +204 -0
  69. package/dist/validation/payload.js.map +1 -0
  70. package/package.json +39 -0
@@ -0,0 +1,319 @@
1
+ export function buildSchemaBundle(params) {
2
+ return {
3
+ version: "0.x",
4
+ pulledAt: new Date().toISOString(),
5
+ serviceDomain: params.serviceDomain ?? null,
6
+ apis: params.apis
7
+ };
8
+ }
9
+ export function extractApiEndpoints(data) {
10
+ const items = extractApiListItems(data);
11
+ const endpoints = items
12
+ .map((item) => extractEndpointName(item))
13
+ .filter((value) => value !== null);
14
+ return [...new Set(endpoints)].sort((a, b) => a.localeCompare(b));
15
+ }
16
+ export function generateTypesFromSchema(input) {
17
+ const schemas = normalizeSchemas(input);
18
+ const warnings = [];
19
+ const lines = [];
20
+ lines.push("/* eslint-disable */");
21
+ lines.push("/**");
22
+ lines.push(" * Generated by mcms-cli types generate");
23
+ lines.push(" * Do not edit manually.");
24
+ lines.push(" */");
25
+ lines.push("");
26
+ const endpointMap = [];
27
+ const usedTypeNames = new Set();
28
+ for (const schema of schemas) {
29
+ const typeName = uniqueTypeName(`${toPascalCase(schema.endpoint)}Content`, usedTypeNames);
30
+ usedTypeNames.add(typeName);
31
+ endpointMap.push({ endpoint: schema.endpoint, typeName });
32
+ const fields = extractApiFields(schema.api);
33
+ if (fields.length === 0) {
34
+ warnings.push(`No fields found for endpoint: ${schema.endpoint}`);
35
+ }
36
+ lines.push(`export interface ${typeName} {`);
37
+ lines.push(" id?: string;");
38
+ const seenFields = new Set();
39
+ for (const field of fields) {
40
+ const fieldId = normalizeString(field.fieldId);
41
+ if (!fieldId) {
42
+ continue;
43
+ }
44
+ if (seenFields.has(fieldId)) {
45
+ continue;
46
+ }
47
+ seenFields.add(fieldId);
48
+ const propertyName = isTsIdentifier(fieldId) ? fieldId : JSON.stringify(fieldId);
49
+ const optional = isFieldRequired(field) ? "" : "?";
50
+ const propertyType = inferTsType(field);
51
+ lines.push(` ${propertyName}${optional}: ${propertyType};`);
52
+ }
53
+ lines.push("}");
54
+ lines.push("");
55
+ }
56
+ lines.push("export interface MicroCMSEndpointMap {");
57
+ for (const item of endpointMap) {
58
+ lines.push(` ${JSON.stringify(item.endpoint)}: ${item.typeName};`);
59
+ }
60
+ lines.push("}");
61
+ lines.push("");
62
+ lines.push("export type MicroCMSEndpoint = keyof MicroCMSEndpointMap;");
63
+ lines.push("export type MicroCMSContent<E extends MicroCMSEndpoint> = MicroCMSEndpointMap[E];");
64
+ lines.push("");
65
+ return {
66
+ code: lines.join("\n"),
67
+ endpointCount: endpointMap.length,
68
+ warnings
69
+ };
70
+ }
71
+ function normalizeSchemas(input) {
72
+ const fromBundle = tryExtractBundleSchemas(input);
73
+ if (fromBundle.length > 0) {
74
+ return dedupeSchemas(fromBundle);
75
+ }
76
+ const fromArray = Array.isArray(input)
77
+ ? input
78
+ .map((item) => {
79
+ if (typeof item !== "object" || item === null) {
80
+ return null;
81
+ }
82
+ const endpoint = extractEndpointName(item);
83
+ if (!endpoint) {
84
+ return null;
85
+ }
86
+ return {
87
+ endpoint,
88
+ api: item
89
+ };
90
+ })
91
+ .filter((item) => item !== null)
92
+ : [];
93
+ if (fromArray.length > 0) {
94
+ return dedupeSchemas(fromArray);
95
+ }
96
+ if (typeof input === "object" && input !== null) {
97
+ const endpoint = extractEndpointName(input);
98
+ if (endpoint) {
99
+ return [{ endpoint, api: input }];
100
+ }
101
+ }
102
+ return [];
103
+ }
104
+ function tryExtractBundleSchemas(input) {
105
+ if (typeof input !== "object" || input === null) {
106
+ return [];
107
+ }
108
+ const asRecord = input;
109
+ if (!Array.isArray(asRecord.apis)) {
110
+ return [];
111
+ }
112
+ return asRecord.apis
113
+ .map((item) => {
114
+ if (typeof item !== "object" || item === null) {
115
+ return null;
116
+ }
117
+ const endpoint = normalizeString(item.endpoint);
118
+ if (!endpoint) {
119
+ return null;
120
+ }
121
+ const api = item.api ?? item;
122
+ return {
123
+ endpoint,
124
+ api
125
+ };
126
+ })
127
+ .filter((item) => item !== null);
128
+ }
129
+ function dedupeSchemas(items) {
130
+ const map = new Map();
131
+ for (const item of items) {
132
+ map.set(item.endpoint, item.api);
133
+ }
134
+ return [...map.entries()]
135
+ .map(([endpoint, api]) => ({ endpoint, api }))
136
+ .sort((a, b) => a.endpoint.localeCompare(b.endpoint));
137
+ }
138
+ function extractApiListItems(data) {
139
+ if (Array.isArray(data)) {
140
+ return data.filter((item) => typeof item === "object" && item !== null);
141
+ }
142
+ if (typeof data !== "object" || data === null) {
143
+ return [];
144
+ }
145
+ const asRecord = data;
146
+ const candidates = [asRecord.contents, asRecord.apis, asRecord.items];
147
+ for (const candidate of candidates) {
148
+ if (Array.isArray(candidate)) {
149
+ return candidate.filter((item) => typeof item === "object" && item !== null);
150
+ }
151
+ }
152
+ return [];
153
+ }
154
+ function extractEndpointName(item) {
155
+ const candidates = [item.endpoint, item.apiId, item.id];
156
+ for (const candidate of candidates) {
157
+ const endpoint = normalizeString(candidate);
158
+ if (endpoint) {
159
+ return endpoint;
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+ function extractApiFields(data) {
165
+ if (typeof data !== "object" || data === null) {
166
+ return [];
167
+ }
168
+ const asRecord = data;
169
+ const candidates = [asRecord.apiFields, asRecord.fields, asRecord.customFields];
170
+ for (const candidate of candidates) {
171
+ if (Array.isArray(candidate)) {
172
+ return candidate.filter((item) => typeof item === "object" && item !== null);
173
+ }
174
+ }
175
+ return [];
176
+ }
177
+ function inferTsType(field) {
178
+ const allowedValues = extractAllowedValues(field);
179
+ if (allowedValues.length > 0) {
180
+ const union = allowedValues.map((value) => JSON.stringify(value)).join(" | ");
181
+ if (isFieldMultiple(field)) {
182
+ return `(${union})[]`;
183
+ }
184
+ return union;
185
+ }
186
+ const hint = normalizeKind(field.type) ?? normalizeKind(field.fieldType) ?? normalizeKind(field.inputType);
187
+ const fromHint = mapKindToType(hint, field);
188
+ if (fromHint) {
189
+ return fromHint;
190
+ }
191
+ const fromKind = mapKindToType(normalizeKind(field.kind), field);
192
+ if (fromKind) {
193
+ return fromKind;
194
+ }
195
+ return "unknown";
196
+ }
197
+ function mapKindToType(kind, field) {
198
+ if (!kind) {
199
+ return null;
200
+ }
201
+ switch (kind) {
202
+ case "string":
203
+ case "text":
204
+ case "textarea":
205
+ case "richtext":
206
+ case "richeditor":
207
+ case "wysiwyg":
208
+ case "date":
209
+ case "datetime":
210
+ case "time":
211
+ case "slug":
212
+ case "url":
213
+ case "radio":
214
+ case "image":
215
+ case "media":
216
+ case "file":
217
+ return "string";
218
+ case "number":
219
+ case "int":
220
+ case "integer":
221
+ case "float":
222
+ case "double":
223
+ case "decimal":
224
+ return "number";
225
+ case "boolean":
226
+ case "bool":
227
+ case "switch":
228
+ case "checkbox":
229
+ return "boolean";
230
+ case "array":
231
+ case "list":
232
+ case "repeater":
233
+ return "unknown[]";
234
+ case "group":
235
+ case "object":
236
+ return "Record<string, unknown>";
237
+ case "select":
238
+ return isFieldMultiple(field) ? "string[]" : "string";
239
+ case "relation":
240
+ return isFieldMultiple(field) ? "string[]" : "string";
241
+ default:
242
+ return null;
243
+ }
244
+ }
245
+ function extractAllowedValues(field) {
246
+ const candidates = [field.selectItems, field.options];
247
+ for (const candidate of candidates) {
248
+ if (!Array.isArray(candidate)) {
249
+ continue;
250
+ }
251
+ const values = candidate
252
+ .map((item) => {
253
+ if (typeof item === "string") {
254
+ return item;
255
+ }
256
+ if (typeof item === "object" && item !== null) {
257
+ const value = item.value ?? item.id;
258
+ return normalizeString(value);
259
+ }
260
+ return null;
261
+ })
262
+ .filter((value) => value !== null);
263
+ if (values.length > 0) {
264
+ return [...new Set(values)];
265
+ }
266
+ }
267
+ return [];
268
+ }
269
+ function isFieldRequired(field) {
270
+ return Boolean(field.required);
271
+ }
272
+ function isFieldMultiple(field) {
273
+ return Boolean(field.multiple) || Boolean(field.isMultiple);
274
+ }
275
+ function normalizeString(value) {
276
+ if (typeof value !== "string") {
277
+ return null;
278
+ }
279
+ const trimmed = value.trim();
280
+ return trimmed.length > 0 ? trimmed : null;
281
+ }
282
+ function normalizeKind(value) {
283
+ if (typeof value !== "string") {
284
+ return null;
285
+ }
286
+ const normalized = value.trim().toLowerCase().replace(/[\s_-]/g, "");
287
+ return normalized.length > 0 ? normalized : null;
288
+ }
289
+ function toPascalCase(value) {
290
+ const segments = value
291
+ .split(/[^A-Za-z0-9]+/)
292
+ .map((segment) => segment.trim())
293
+ .filter((segment) => segment.length > 0)
294
+ .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1));
295
+ const joined = segments.join("");
296
+ if (joined.length === 0) {
297
+ return "Api";
298
+ }
299
+ if (/^[0-9]/.test(joined)) {
300
+ return `Api${joined}`;
301
+ }
302
+ return joined;
303
+ }
304
+ function uniqueTypeName(base, used) {
305
+ if (!used.has(base)) {
306
+ return base;
307
+ }
308
+ for (let i = 2; i < 10_000; i += 1) {
309
+ const candidate = `${base}${i}`;
310
+ if (!used.has(candidate)) {
311
+ return candidate;
312
+ }
313
+ }
314
+ return `${base}X`;
315
+ }
316
+ function isTsIdentifier(value) {
317
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);
318
+ }
319
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type ValidationResult = {
2
+ valid: boolean;
3
+ errors: string[];
4
+ warnings: string[];
5
+ };
6
+ export declare function validatePayload(payload: unknown, apiSchema?: unknown): ValidationResult;
@@ -0,0 +1,204 @@
1
+ import { z } from "zod";
2
+ const payloadSchema = z.record(z.unknown());
3
+ export function validatePayload(payload, apiSchema) {
4
+ const parsed = payloadSchema.safeParse(payload);
5
+ if (!parsed.success) {
6
+ return {
7
+ valid: false,
8
+ errors: parsed.error.issues.map((issue) => issue.message),
9
+ warnings: []
10
+ };
11
+ }
12
+ const errors = [];
13
+ const warnings = [];
14
+ const fields = extractFields(apiSchema);
15
+ const knownFields = new Map(fields
16
+ .filter((field) => typeof field.fieldId === "string" && field.fieldId.length > 0)
17
+ .map((field) => [field.fieldId, field]));
18
+ const requiredFields = fields.filter((field) => field.required && field.fieldId).map((field) => field.fieldId);
19
+ for (const field of requiredFields) {
20
+ if (!(field in parsed.data)) {
21
+ errors.push(`Required field is missing: ${field}`);
22
+ }
23
+ }
24
+ if (knownFields.size > 0) {
25
+ for (const key of Object.keys(parsed.data)) {
26
+ if (!knownFields.has(key)) {
27
+ warnings.push(`Unknown field in payload: ${key}`);
28
+ }
29
+ }
30
+ }
31
+ for (const [key, value] of Object.entries(parsed.data)) {
32
+ const field = knownFields.get(key);
33
+ if (!field) {
34
+ continue;
35
+ }
36
+ const expectedType = inferExpectedType(field);
37
+ if (expectedType && !matchesExpectedType(value, expectedType)) {
38
+ errors.push(`Field type mismatch: ${key} expected ${expectedType}`);
39
+ continue;
40
+ }
41
+ const allowedValues = extractAllowedValues(field);
42
+ if (!allowedValues) {
43
+ continue;
44
+ }
45
+ if (typeof value === "string") {
46
+ if (!allowedValues.has(value)) {
47
+ errors.push(`Field value out of range: ${key} must be one of [${[...allowedValues].join(", ")}]`);
48
+ }
49
+ continue;
50
+ }
51
+ if (Array.isArray(value)) {
52
+ const invalid = value.filter((item) => typeof item === "string" && !allowedValues.has(item));
53
+ if (invalid.length > 0) {
54
+ errors.push(`Field value out of range: ${key} has invalid values [${invalid.join(", ")}]`);
55
+ }
56
+ }
57
+ }
58
+ return {
59
+ valid: errors.length === 0,
60
+ errors,
61
+ warnings
62
+ };
63
+ }
64
+ function inferExpectedType(field) {
65
+ const explicit = [field.type, field.fieldType, field.inputType]
66
+ .map((value) => normalizeTypeHint(value))
67
+ .find((value) => value !== null);
68
+ if (explicit) {
69
+ return explicit;
70
+ }
71
+ const kind = normalizeKind(field.kind);
72
+ if (!kind) {
73
+ return null;
74
+ }
75
+ switch (kind) {
76
+ case "number":
77
+ case "int":
78
+ case "integer":
79
+ case "float":
80
+ case "double":
81
+ case "decimal":
82
+ return "number";
83
+ case "boolean":
84
+ case "switch":
85
+ case "checkbox":
86
+ return "boolean";
87
+ case "repeater":
88
+ case "array":
89
+ case "list":
90
+ return "array";
91
+ case "group":
92
+ case "object":
93
+ return "object";
94
+ case "text":
95
+ case "textarea":
96
+ case "richtext":
97
+ case "richeditor":
98
+ case "wysiwyg":
99
+ case "date":
100
+ case "datetime":
101
+ case "time":
102
+ case "slug":
103
+ case "url":
104
+ case "select":
105
+ case "radio":
106
+ return "string";
107
+ case "relation":
108
+ return field.multiple || field.isMultiple ? "array" : null;
109
+ default:
110
+ // Unknown kinds are skipped to avoid false-positive type errors.
111
+ return null;
112
+ }
113
+ }
114
+ function normalizeTypeHint(value) {
115
+ if (typeof value !== "string") {
116
+ return null;
117
+ }
118
+ const normalized = normalizeKind(value);
119
+ if (!normalized) {
120
+ return null;
121
+ }
122
+ switch (normalized) {
123
+ case "string":
124
+ case "text":
125
+ return "string";
126
+ case "number":
127
+ case "int":
128
+ case "integer":
129
+ case "float":
130
+ case "double":
131
+ case "decimal":
132
+ return "number";
133
+ case "boolean":
134
+ case "bool":
135
+ return "boolean";
136
+ case "array":
137
+ case "list":
138
+ return "array";
139
+ case "object":
140
+ case "group":
141
+ return "object";
142
+ default:
143
+ return null;
144
+ }
145
+ }
146
+ function normalizeKind(value) {
147
+ if (typeof value !== "string") {
148
+ return null;
149
+ }
150
+ const normalized = value.trim().toLowerCase().replace(/[\s_-]/g, "");
151
+ return normalized.length > 0 ? normalized : null;
152
+ }
153
+ function matchesExpectedType(value, expected) {
154
+ switch (expected) {
155
+ case "string":
156
+ return typeof value === "string";
157
+ case "number":
158
+ return typeof value === "number" && Number.isFinite(value);
159
+ case "boolean":
160
+ return typeof value === "boolean";
161
+ case "array":
162
+ return Array.isArray(value);
163
+ case "object":
164
+ return typeof value === "object" && value !== null && !Array.isArray(value);
165
+ }
166
+ }
167
+ function extractAllowedValues(field) {
168
+ const candidates = [field.selectItems, field.options];
169
+ for (const candidate of candidates) {
170
+ if (!Array.isArray(candidate)) {
171
+ continue;
172
+ }
173
+ const values = candidate
174
+ .map((item) => {
175
+ if (typeof item === "string") {
176
+ return item;
177
+ }
178
+ if (typeof item === "object" && item !== null) {
179
+ const value = item.value ?? item.id;
180
+ return typeof value === "string" ? value : null;
181
+ }
182
+ return null;
183
+ })
184
+ .filter((value) => value !== null && value.length > 0);
185
+ if (values.length > 0) {
186
+ return new Set(values);
187
+ }
188
+ }
189
+ return null;
190
+ }
191
+ function extractFields(apiSchema) {
192
+ if (typeof apiSchema !== "object" || apiSchema === null) {
193
+ return [];
194
+ }
195
+ const schema = apiSchema;
196
+ const candidates = [schema.apiFields, schema.fields, schema.customFields];
197
+ for (const candidate of candidates) {
198
+ if (Array.isArray(candidate)) {
199
+ return candidate.filter((item) => typeof item === "object" && item !== null);
200
+ }
201
+ }
202
+ return [];
203
+ }
204
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/validation/payload.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@mrmtsu/mcms-cli",
3
+ "version": "0.1.0",
4
+ "description": "AI/CI friendly CLI for microCMS",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "microcms": "dist/cli.js"
9
+ },
10
+ "engines": {
11
+ "node": ">=20"
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.build.json",
20
+ "dev": "tsx src/cli.ts",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit"
24
+ },
25
+ "dependencies": {
26
+ "commander": "^13.1.0",
27
+ "microcms-js-sdk": "^3.1.1",
28
+ "zod": "^3.24.1"
29
+ },
30
+ "optionalDependencies": {
31
+ "keytar": "^7.9.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.13.10",
35
+ "tsx": "^4.19.3",
36
+ "typescript": "^5.8.2",
37
+ "vitest": "^3.0.8"
38
+ }
39
+ }