sparkling-method-cli 2.0.0-rc.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.
Files changed (86) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +37 -0
  3. package/dist/codegen/definition-parser.d.ts +5 -0
  4. package/dist/codegen/definition-parser.d.ts.map +1 -0
  5. package/dist/codegen/definition-parser.js +376 -0
  6. package/dist/codegen/definition-parser.js.map +1 -0
  7. package/dist/codegen/index.d.ts +3 -0
  8. package/dist/codegen/index.d.ts.map +1 -0
  9. package/dist/codegen/index.js +99 -0
  10. package/dist/codegen/index.js.map +1 -0
  11. package/dist/codegen/kotlin.d.ts +4 -0
  12. package/dist/codegen/kotlin.d.ts.map +1 -0
  13. package/dist/codegen/kotlin.js +273 -0
  14. package/dist/codegen/kotlin.js.map +1 -0
  15. package/dist/codegen/metadata.d.ts +4 -0
  16. package/dist/codegen/metadata.d.ts.map +1 -0
  17. package/dist/codegen/metadata.js +78 -0
  18. package/dist/codegen/metadata.js.map +1 -0
  19. package/dist/codegen/swift.d.ts +4 -0
  20. package/dist/codegen/swift.d.ts.map +1 -0
  21. package/dist/codegen/swift.js +145 -0
  22. package/dist/codegen/swift.js.map +1 -0
  23. package/dist/codegen/template/android/kotlin-idl-template +119 -0
  24. package/dist/codegen/template/android/kotlin-impl-template +0 -0
  25. package/dist/codegen/template/ios/oc-idl-template +0 -0
  26. package/dist/codegen/template/ios/oc-impl-template +0 -0
  27. package/dist/codegen/template/ios/swift-idl-template +83 -0
  28. package/dist/codegen/template/ios/swift-impl-template +0 -0
  29. package/dist/codegen/template/ts/call-template +0 -0
  30. package/dist/codegen/template/ts/ts-idl-template +66 -0
  31. package/dist/codegen/template/ts/ts-impl-template +78 -0
  32. package/dist/codegen/template/ts/ts-index-template +13 -0
  33. package/dist/codegen/types.d.ts +157 -0
  34. package/dist/codegen/types.d.ts.map +1 -0
  35. package/dist/codegen/types.js +3 -0
  36. package/dist/codegen/types.js.map +1 -0
  37. package/dist/codegen/typescript.d.ts +8 -0
  38. package/dist/codegen/typescript.d.ts.map +1 -0
  39. package/dist/codegen/typescript.js +232 -0
  40. package/dist/codegen/typescript.js.map +1 -0
  41. package/dist/codegen/utils.d.ts +10 -0
  42. package/dist/codegen/utils.d.ts.map +1 -0
  43. package/dist/codegen/utils.js +144 -0
  44. package/dist/codegen/utils.js.map +1 -0
  45. package/dist/create/index.d.ts +3 -0
  46. package/dist/create/index.d.ts.map +1 -0
  47. package/dist/create/index.js +44 -0
  48. package/dist/create/index.js.map +1 -0
  49. package/dist/create/prompts.d.ts +7 -0
  50. package/dist/create/prompts.d.ts.map +1 -0
  51. package/dist/create/prompts.js +61 -0
  52. package/dist/create/prompts.js.map +1 -0
  53. package/dist/create/scaffold.d.ts +9 -0
  54. package/dist/create/scaffold.d.ts.map +1 -0
  55. package/dist/create/scaffold.js +131 -0
  56. package/dist/create/scaffold.js.map +1 -0
  57. package/dist/create/template/README.md +17 -0
  58. package/dist/create/template/android/.gitkeep +1 -0
  59. package/dist/create/template/ios/.gitkeep +1 -0
  60. package/dist/create/template/src/method.d.ts +17 -0
  61. package/dist/create/templates.d.ts +5 -0
  62. package/dist/create/templates.d.ts.map +1 -0
  63. package/dist/create/templates.js +75 -0
  64. package/dist/create/templates.js.map +1 -0
  65. package/dist/create/types.d.ts +12 -0
  66. package/dist/create/types.d.ts.map +1 -0
  67. package/dist/create/types.js +3 -0
  68. package/dist/create/types.js.map +1 -0
  69. package/dist/create/utils.d.ts +3 -0
  70. package/dist/create/utils.d.ts.map +1 -0
  71. package/dist/create/utils.js +19 -0
  72. package/dist/create/utils.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +60 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/ui.d.ts +13 -0
  78. package/dist/ui.d.ts.map +1 -0
  79. package/dist/ui.js +82 -0
  80. package/dist/ui.js.map +1 -0
  81. package/dist/verbose.d.ts +4 -0
  82. package/dist/verbose.d.ts.map +1 -0
  83. package/dist/verbose.js +25 -0
  84. package/dist/verbose.js.map +1 -0
  85. package/package.json +44 -0
  86. package/templates/sparkling-app-template-android-groovy/android/sparkling-method-media/build.gradle +44 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildTypeScriptView = buildTypeScriptView;
7
+ exports.writeTypeScriptFiles = writeTypeScriptFiles;
8
+ // Copyright (c) 2025 TikTok Pte. Ltd.
9
+ // Licensed under the Apache License Version 2.0 that can be found in the
10
+ // LICENSE file in the root directory of this source tree.
11
+ const path_1 = __importDefault(require("path"));
12
+ const fs_extra_1 = __importDefault(require("fs-extra"));
13
+ const mustache_1 = __importDefault(require("mustache"));
14
+ const definition_parser_1 = require("./definition-parser");
15
+ const utils_1 = require("./utils");
16
+ function buildTypeScriptView(method, config) {
17
+ const methodPascal = (0, utils_1.toPascalCase)(method.name);
18
+ const methodCamelCase = (0, utils_1.toCamelCase)(method.name);
19
+ const requestObject = (0, definition_parser_1.ensureObjectDefinition)(method.request, `${methodPascal}Request`, method.interfaces);
20
+ const responseObject = (0, definition_parser_1.ensureObjectDefinition)(method.response, `${methodPascal}Response`, method.interfaces);
21
+ const tsContext = {
22
+ methodPascal,
23
+ interfaces: method.interfaces,
24
+ extras: new Map()
25
+ };
26
+ const requestInterface = toTypeScriptInterfaceView(requestObject, `${methodPascal}Request`, tsContext, [methodPascal, 'Request']);
27
+ const responseInterface = toTypeScriptInterfaceView(responseObject, `${methodPascal}Response`, tsContext, [methodPascal, 'Response']);
28
+ // Build validation rules from request fields
29
+ const validationRules = buildValidationRules(requestObject, methodPascal);
30
+ // Build pipe call parameters
31
+ const pipeParams = buildPipeCallParams(requestObject);
32
+ return {
33
+ moduleName: config.moduleName,
34
+ methodName: method.name,
35
+ methodCamelCase,
36
+ methodPascalCase: methodPascal,
37
+ packageName: config.packageName || 'sparkling-method',
38
+ requestInterface,
39
+ responseInterface,
40
+ extraInterfaces: Array.from(tsContext.extras.values()),
41
+ validationRules,
42
+ pipeCall: {
43
+ methodString: `${config.moduleName}.${method.name}`,
44
+ params: pipeParams
45
+ },
46
+ hasRequestParams: requestInterface.hasFields,
47
+ hasResponseData: responseInterface.fields.some(f => f.name === 'data')
48
+ };
49
+ }
50
+ function toTypeScriptInterfaceView(definition, interfaceName, context, path) {
51
+ const fields = definition.fields.map((field, index, arr) => ({
52
+ name: field.name,
53
+ type: resolveTypeScriptType(field.type, context, [...path, field.name]),
54
+ optional: field.optional,
55
+ description: field.description,
56
+ defaultValue: formatTypeScriptDefaultValue(field.defaultValue),
57
+ jsType: getJSType(field.type),
58
+ isLast: index === arr.length - 1
59
+ }));
60
+ return {
61
+ name: interfaceName,
62
+ fields,
63
+ hasFields: fields.length > 0,
64
+ description: definition.description
65
+ };
66
+ }
67
+ function resolveTypeScriptType(type, context, path) {
68
+ switch (type.kind) {
69
+ case 'primitive':
70
+ if (type.enumValues && type.enumValues.length > 0) {
71
+ // Handle enum types as union types
72
+ return type.enumValues.map(val => typeof val === 'string' ? `'${val}'` : String(val)).join(' | ');
73
+ }
74
+ return (0, utils_1.mapPrimitiveToTypeScript)(type.name);
75
+ case 'array':
76
+ return `${resolveTypeScriptType(type.elementType, context, path)}[]`;
77
+ case 'reference': {
78
+ const definition = context.interfaces[type.name];
79
+ if (definition) {
80
+ ensureTypeScriptHelper(definition, type.name, context, [type.name]);
81
+ }
82
+ return type.name;
83
+ }
84
+ case 'object': {
85
+ const inline = {
86
+ name: path.map((segment) => (0, utils_1.toPascalCase)(segment)).join('') || undefined,
87
+ fields: type.fields
88
+ };
89
+ const helper = ensureTypeScriptHelper(inline, inline.name || 'InlineObject', context, path);
90
+ return helper.name;
91
+ }
92
+ default:
93
+ return 'any';
94
+ }
95
+ }
96
+ function ensureTypeScriptHelper(definition, typeName, context, path) {
97
+ const key = definition.name ?? path.join('.');
98
+ const cached = context.extras.get(key);
99
+ if (cached) {
100
+ return cached;
101
+ }
102
+ const interfaceView = toTypeScriptInterfaceView(definition, typeName, context, path);
103
+ context.extras.set(key, interfaceView);
104
+ return interfaceView;
105
+ }
106
+ function getJSType(type) {
107
+ switch (type.kind) {
108
+ case 'primitive':
109
+ return (0, utils_1.mapPrimitiveToJSType)(type.name);
110
+ case 'array':
111
+ return 'object';
112
+ case 'reference':
113
+ case 'object':
114
+ return 'object';
115
+ default:
116
+ return 'undefined';
117
+ }
118
+ }
119
+ function buildValidationRules(definition, methodPascal) {
120
+ const rules = [];
121
+ // Add field validation rules for required fields only
122
+ definition.fields.forEach(field => {
123
+ if (!field.optional) {
124
+ const jsType = getJSType(field.type);
125
+ // Type check rule for required fields
126
+ if (field.type.kind === 'primitive' && field.type.name === 'string') {
127
+ rules.push({
128
+ field: field.name,
129
+ type: 'type-check',
130
+ jsType: 'string',
131
+ errorMessage: `Invalid params: ${field.name} must be a non-empty string`,
132
+ trimValue: true
133
+ });
134
+ }
135
+ else if (jsType !== 'undefined') {
136
+ rules.push({
137
+ field: field.name,
138
+ type: 'type-check',
139
+ jsType,
140
+ errorMessage: `Invalid params: ${field.name} must be of type ${jsType}`
141
+ });
142
+ }
143
+ }
144
+ });
145
+ return rules;
146
+ }
147
+ function buildPipeCallParams(definition) {
148
+ return definition.fields.map(field => {
149
+ const paramAccess = `params.${field.name}`;
150
+ // Handle string trimming
151
+ if (field.type.kind === 'primitive' && field.type.name === 'string' && !field.optional) {
152
+ return `${field.name}: ${paramAccess}.trim()`;
153
+ }
154
+ // Handle optional fields with default values
155
+ if (field.optional && field.defaultValue) {
156
+ const defaultVal = formatTypeScriptDefaultValue(field.defaultValue);
157
+ return `${field.name}: ${paramAccess} ?? ${defaultVal}`;
158
+ }
159
+ // Handle optional fields without defaults (use nullish coalescing)
160
+ if (field.optional) {
161
+ return `${field.name}: ${paramAccess}`;
162
+ }
163
+ // Required fields
164
+ return `${field.name}: ${paramAccess}`;
165
+ });
166
+ }
167
+ function formatTypeScriptDefaultValue(value) {
168
+ if (!value) {
169
+ return undefined;
170
+ }
171
+ switch (value.kind) {
172
+ case 'boolean':
173
+ return value.value ? 'true' : 'false';
174
+ case 'number':
175
+ return String(value.value);
176
+ case 'string':
177
+ return JSON.stringify(value.value);
178
+ default:
179
+ return undefined;
180
+ }
181
+ }
182
+ async function writeTypeScriptFiles(root, config, method, view, templates) {
183
+ const methodKebab = (0, utils_1.toKebabCase)(method.name);
184
+ const methodDir = path_1.default.join(root, 'src', methodKebab);
185
+ await fs_extra_1.default.ensureDir(methodDir);
186
+ // Write .d.ts file (type definitions)
187
+ const idlPath = path_1.default.join(methodDir, `${methodKebab}.d.ts`);
188
+ const renderedIdl = mustache_1.default.render(templates.idl, view);
189
+ await fs_extra_1.default.writeFile(idlPath, renderedIdl, 'utf8');
190
+ // Write .ts file (implementation)
191
+ const implPath = path_1.default.join(methodDir, `${methodKebab}.ts`);
192
+ const renderedImpl = mustache_1.default.render(templates.impl, view);
193
+ await fs_extra_1.default.writeFile(implPath, renderedImpl, 'utf8');
194
+ // Write or update index.ts (re-exports)
195
+ const indexPath = path_1.default.join(root, 'index.ts');
196
+ await updateIndexFile(indexPath, method, view, templates.index);
197
+ }
198
+ async function updateIndexFile(indexPath, method, view, template) {
199
+ const methodKebab = (0, utils_1.toKebabCase)(method.name);
200
+ const newExports = {
201
+ methodKebab,
202
+ methodCamelCase: view.methodCamelCase,
203
+ requestInterface: view.requestInterface.name,
204
+ responseInterface: view.responseInterface.name,
205
+ extraInterfaces: view.extraInterfaces.map(i => i.name)
206
+ };
207
+ // If index.ts doesn't exist, create it with the template
208
+ if (!await fs_extra_1.default.pathExists(indexPath)) {
209
+ const rendered = mustache_1.default.render(template, { methods: [newExports] });
210
+ await fs_extra_1.default.writeFile(indexPath, rendered, 'utf8');
211
+ return;
212
+ }
213
+ // If it exists, append the new exports
214
+ let content = await fs_extra_1.default.readFile(indexPath, 'utf8');
215
+ // Add implementation export
216
+ const implExport = `export * from './src/${methodKebab}/${methodKebab}';`;
217
+ if (!content.includes(implExport)) {
218
+ content += `\n${implExport}`;
219
+ }
220
+ // Add type exports
221
+ const typeExportParts = [
222
+ view.requestInterface.name,
223
+ view.responseInterface.name,
224
+ ...view.extraInterfaces.map(i => i.name)
225
+ ];
226
+ const typeExport = `export type { ${typeExportParts.join(', ')} } from './src/${methodKebab}/${methodKebab}.d';`;
227
+ if (!content.includes(typeExport)) {
228
+ content += `\n${typeExport}`;
229
+ }
230
+ await fs_extra_1.default.writeFile(indexPath, content, 'utf8');
231
+ }
232
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/codegen/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ModuleConfig } from './types';
2
+ export declare function buildPackageSegments(config: ModuleConfig, methodName: string): string[];
3
+ export declare function sanitizePackageSegment(value: string): string;
4
+ export declare function toPascalCase(value: string): string;
5
+ export declare function splitIntoWords(value: string): string[];
6
+ export declare function toCamelCase(value: string): string;
7
+ export declare function toKebabCase(value: string): string;
8
+ export declare function mapPrimitiveToTypeScript(kind: string): string;
9
+ export declare function mapPrimitiveToJSType(kind: string): string;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/codegen/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAKvF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAsEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBzD"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPackageSegments = buildPackageSegments;
4
+ exports.sanitizePackageSegment = sanitizePackageSegment;
5
+ exports.toPascalCase = toPascalCase;
6
+ exports.splitIntoWords = splitIntoWords;
7
+ exports.toCamelCase = toCamelCase;
8
+ exports.toKebabCase = toKebabCase;
9
+ exports.mapPrimitiveToTypeScript = mapPrimitiveToTypeScript;
10
+ exports.mapPrimitiveToJSType = mapPrimitiveToJSType;
11
+ function buildPackageSegments(config, methodName) {
12
+ const base = config.packageName.split('.').filter(Boolean);
13
+ const moduleSegment = sanitizePackageSegment(config.moduleName);
14
+ const methodSegment = sanitizePackageSegment(methodName);
15
+ return [...base, moduleSegment, methodSegment];
16
+ }
17
+ function sanitizePackageSegment(value) {
18
+ return value.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() || 'method';
19
+ }
20
+ function toPascalCase(value) {
21
+ const parts = splitIntoWords(value);
22
+ if (parts.length === 0) {
23
+ return '';
24
+ }
25
+ return parts.map((chunk) => chunk.charAt(0).toUpperCase() + chunk.slice(1).toLowerCase()).join('');
26
+ }
27
+ function splitIntoWords(value) {
28
+ if (typeof value !== 'string' || !value) {
29
+ return [];
30
+ }
31
+ const chars = Array.from(value);
32
+ const words = [];
33
+ let current = '';
34
+ let currentHasLetter = false;
35
+ let prevInWord = '';
36
+ const isLetter = (char) => /\p{L}/u.test(char);
37
+ const isNumber = (char) => /\p{N}/u.test(char);
38
+ const isUpper = (char) => /\p{Lu}/u.test(char);
39
+ const isLower = (char) => /\p{Ll}/u.test(char);
40
+ const pushCurrent = () => {
41
+ if (current) {
42
+ words.push(current);
43
+ current = '';
44
+ currentHasLetter = false;
45
+ prevInWord = '';
46
+ }
47
+ };
48
+ for (let i = 0; i < chars.length; i += 1) {
49
+ const char = chars[i];
50
+ if (!isLetter(char) && !isNumber(char)) {
51
+ pushCurrent();
52
+ continue;
53
+ }
54
+ if (!current) {
55
+ current = char;
56
+ currentHasLetter = isLetter(char);
57
+ prevInWord = char;
58
+ continue;
59
+ }
60
+ const nextChar = chars[i + 1] ?? '';
61
+ let boundary = false;
62
+ if (isUpper(char)) {
63
+ if (prevInWord && isUpper(prevInWord) && nextChar && isLower(nextChar)) {
64
+ boundary = true;
65
+ }
66
+ else if (prevInWord && isLower(prevInWord)) {
67
+ boundary = true;
68
+ }
69
+ else if (prevInWord && isNumber(prevInWord) && currentHasLetter) {
70
+ boundary = true;
71
+ }
72
+ }
73
+ else if (isLower(char)) {
74
+ if (prevInWord && isNumber(prevInWord) && currentHasLetter) {
75
+ boundary = true;
76
+ }
77
+ }
78
+ if (boundary) {
79
+ pushCurrent();
80
+ current = char;
81
+ currentHasLetter = isLetter(char);
82
+ prevInWord = char;
83
+ continue;
84
+ }
85
+ current += char;
86
+ if (isLetter(char)) {
87
+ currentHasLetter = true;
88
+ }
89
+ prevInWord = char;
90
+ }
91
+ pushCurrent();
92
+ return words;
93
+ }
94
+ function toCamelCase(value) {
95
+ const parts = splitIntoWords(value);
96
+ if (parts.length === 0) {
97
+ return '';
98
+ }
99
+ return parts[0].toLowerCase() + parts.slice(1).map((chunk) => chunk.charAt(0).toUpperCase() + chunk.slice(1).toLowerCase()).join('');
100
+ }
101
+ function toKebabCase(value) {
102
+ const parts = splitIntoWords(value);
103
+ if (parts.length === 0) {
104
+ return '';
105
+ }
106
+ return parts.map(part => part.toLowerCase()).join('-');
107
+ }
108
+ function mapPrimitiveToTypeScript(kind) {
109
+ switch (kind) {
110
+ case 'string':
111
+ return 'string';
112
+ case 'number':
113
+ return 'number';
114
+ case 'boolean':
115
+ return 'boolean';
116
+ case 'void':
117
+ return 'void';
118
+ case 'object':
119
+ return 'object';
120
+ case 'any':
121
+ return 'any';
122
+ default:
123
+ return 'any';
124
+ }
125
+ }
126
+ function mapPrimitiveToJSType(kind) {
127
+ switch (kind) {
128
+ case 'string':
129
+ return 'string';
130
+ case 'number':
131
+ return 'number';
132
+ case 'boolean':
133
+ return 'boolean';
134
+ case 'void':
135
+ return 'undefined';
136
+ case 'object':
137
+ return 'object';
138
+ case 'any':
139
+ return 'undefined';
140
+ default:
141
+ return 'undefined';
142
+ }
143
+ }
144
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/codegen/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { InitOptions } from './types';
2
+ export declare function runInit(projectName: string | undefined, options: InitOptions): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/create/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,SAAS,CAAC;AAKzD,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgClG"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runInit = runInit;
7
+ // Copyright (c) 2025 TikTok Pte. Ltd.
8
+ // Licensed under the Apache License Version 2.0 that can be found in the
9
+ // LICENSE file in the root directory of this source tree.
10
+ const path_1 = __importDefault(require("path"));
11
+ const prompts_1 = require("./prompts");
12
+ const scaffold_1 = require("./scaffold");
13
+ const utils_1 = require("./utils");
14
+ const ui_1 = require("../ui");
15
+ const verbose_1 = require("../verbose");
16
+ async function runInit(projectName, options) {
17
+ const normalizedProjectName = projectName?.trim() || await (0, prompts_1.promptProjectName)();
18
+ const templateDir = await (0, scaffold_1.resolveTemplateDir)(options.template);
19
+ const targetDir = path_1.default.resolve(process.cwd(), normalizedProjectName);
20
+ if ((0, verbose_1.isVerboseEnabled)()) {
21
+ (0, verbose_1.verboseLog)(`init -> project: ${normalizedProjectName}, targetDir: ${targetDir}`);
22
+ (0, verbose_1.verboseLog)(`init -> templateDir: ${templateDir}, force: ${options.force === true}`);
23
+ }
24
+ const moduleDefaults = {
25
+ packageName: 'org.sparkling',
26
+ moduleName: (0, utils_1.toPascalCase)(normalizedProjectName),
27
+ };
28
+ const moduleConfig = await (0, prompts_1.promptModuleInfo)(moduleDefaults);
29
+ if ((0, verbose_1.isVerboseEnabled)()) {
30
+ (0, verbose_1.verboseLog)(`init -> module config: package=${moduleConfig.packageName}, name=${moduleConfig.moduleName}, dsl=${moduleConfig.androidDsl}`);
31
+ }
32
+ console.log(ui_1.ui.headline(`\n✨ Initializing sparkling method project in ${targetDir}`));
33
+ await (0, scaffold_1.copyTemplateDirectory)(templateDir, targetDir, options.force);
34
+ await (0, scaffold_1.createPackageJson)(normalizedProjectName, targetDir);
35
+ const persisted = await (0, scaffold_1.writeModuleConfig)(normalizedProjectName, moduleConfig, targetDir);
36
+ await (0, scaffold_1.ensurePlatformScaffolds)(persisted, targetDir);
37
+ await (0, scaffold_1.writeAndroidConfigs)(persisted, targetDir);
38
+ await (0, scaffold_1.writeIosConfigs)(persisted, targetDir);
39
+ console.log(ui_1.ui.success('\n✅ Project created successfully.'));
40
+ console.log(ui_1.ui.tip(`cd ${normalizedProjectName}`));
41
+ console.log(ui_1.ui.tip('Edit and rename src/method.d.ts to describe your APIs.'));
42
+ console.log(ui_1.ui.tip('Run `npm run codegen` to generate native stubs.'));
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/create/index.ts"],"names":[],"mappings":";;;;;AAoBA,0BAgCC;AApDD,sCAAsC;AACtC,yEAAyE;AACzE,0DAA0D;AAC1D,gDAAwB;AAExB,uCAAgE;AAChE,yCAQoB;AAEpB,mCAAuC;AACvC,8BAA2B;AAC3B,wCAA0D;AAEnD,KAAK,UAAU,OAAO,CAAC,WAA+B,EAAE,OAAoB;IACjF,MAAM,qBAAqB,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,MAAM,IAAA,2BAAiB,GAAE,CAAC;IAC/E,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAkB,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAErE,IAAI,IAAA,0BAAgB,GAAE,EAAE,CAAC;QACvB,IAAA,oBAAU,EAAC,oBAAoB,qBAAqB,gBAAgB,SAAS,EAAE,CAAC,CAAC;QACjF,IAAA,oBAAU,EAAC,wBAAwB,WAAW,YAAY,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,cAAc,GAAG;QACrB,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,IAAA,oBAAY,EAAC,qBAAqB,CAAC;KAChD,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAgB,EAAC,cAAc,CAAC,CAAC;IAC5D,IAAI,IAAA,0BAAgB,GAAE,EAAE,CAAC;QACvB,IAAA,oBAAU,EAAC,kCAAkC,YAAY,CAAC,WAAW,UAAU,YAAY,CAAC,UAAU,SAAS,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5I,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,QAAQ,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,IAAA,gCAAqB,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,IAAA,4BAAiB,EAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAiB,MAAM,IAAA,4BAAiB,EAAC,qBAAqB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACxG,MAAM,IAAA,kCAAuB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,IAAA,8BAAmB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,IAAA,0BAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,GAAG,CAAC,MAAM,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ModuleConfig } from './types';
2
+ export declare function promptProjectName(): Promise<string>;
3
+ export declare function promptModuleInfo(defaults: {
4
+ packageName: string;
5
+ moduleName: string;
6
+ }): Promise<Omit<ModuleConfig, 'projectName'>>;
7
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/create/prompts.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAazD;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAoC5C"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.promptProjectName = promptProjectName;
7
+ exports.promptModuleInfo = promptModuleInfo;
8
+ // Copyright (c) 2025 TikTok Pte. Ltd.
9
+ // Licensed under the Apache License Version 2.0 that can be found in the
10
+ // LICENSE file in the root directory of this source tree.
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const ui_1 = require("../ui");
13
+ const utils_1 = require("./utils");
14
+ async function promptProjectName() {
15
+ const answers = await inquirer_1.default.prompt([
16
+ {
17
+ type: 'input',
18
+ name: 'projectName',
19
+ message: ui_1.ui.prompt('Project name (directory / package name):'),
20
+ default: 'sparkling-method-module',
21
+ validate: (input) => !!input.trim() || 'Project name is required.',
22
+ filter: (input) => input.trim(),
23
+ },
24
+ ]);
25
+ return (0, utils_1.normalizePackageName)(answers.projectName);
26
+ }
27
+ async function promptModuleInfo(defaults) {
28
+ const questions = [
29
+ {
30
+ type: 'input',
31
+ name: 'packageName',
32
+ message: ui_1.ui.prompt('Namespace / bundle identifier (e.g. com.example):'),
33
+ default: defaults.packageName,
34
+ validate: (input) => !!input.trim() || 'Package name is required.',
35
+ },
36
+ {
37
+ type: 'input',
38
+ name: 'moduleName',
39
+ message: ui_1.ui.prompt('Module name (PascalCase, e.g. Storage):'),
40
+ default: defaults.moduleName,
41
+ validate: (input) => /[A-Za-z]/.test(input) || 'Module name must contain letters.',
42
+ },
43
+ ];
44
+ questions.push({
45
+ type: 'list',
46
+ name: 'androidDsl',
47
+ message: ui_1.ui.prompt('Android Gradle DSL:'),
48
+ default: 'kts',
49
+ choices: [
50
+ { name: 'Kotlin (.gradle.kts)', value: 'kts' },
51
+ { name: 'Groovy (.gradle)', value: 'groovy' },
52
+ ],
53
+ });
54
+ const answers = await inquirer_1.default.prompt(questions);
55
+ return {
56
+ packageName: answers.packageName.trim(),
57
+ moduleName: answers.moduleName.trim(),
58
+ androidDsl: answers.androidDsl ?? 'kts',
59
+ };
60
+ }
61
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/create/prompts.ts"],"names":[],"mappings":";;;;;AASA,8CAaC;AAED,4CAsCC;AA9DD,sCAAsC;AACtC,yEAAyE;AACzE,0DAA0D;AAC1D,wDAA6D;AAC7D,8BAA2B;AAG3B,mCAA+C;AAExC,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAA0B;QAC7D;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,OAAE,CAAC,MAAM,CAAC,0CAA0C,CAAC;YAC9D,OAAO,EAAE,yBAAyB;YAClC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,2BAA2B;YAC1E,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;SACxC;KACoB,CAAC,CAAC;IAEzB,OAAO,IAAA,4BAAoB,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,QAAqD;IAErD,MAAM,SAAS,GAAyB;QACtC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,OAAE,CAAC,MAAM,CAAC,mDAAmD,CAAC;YACvE,OAAO,EAAE,QAAQ,CAAC,WAAW;YAC7B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,2BAA2B;SAC3E;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,OAAE,CAAC,MAAM,CAAC,yCAAyC,CAAC;YAC7D,OAAO,EAAE,QAAQ,CAAC,UAAU;YAC5B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAmC;SAC3F;KACF,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACzC,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE;YAC9C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;SAC9C;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAA4E,SAA+B,CAAC,CAAC;IAElJ,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;QACvC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE;QACrC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ModuleConfig } from './types';
2
+ export declare function resolveTemplateDir(customTemplate?: string): Promise<string>;
3
+ export declare function copyTemplateDirectory(templateDir: string, targetDir: string, force?: boolean): Promise<void>;
4
+ export declare function createPackageJson(projectName: string, targetDir: string): Promise<void>;
5
+ export declare function ensurePlatformScaffolds(config: ModuleConfig, projectDir: string): Promise<void>;
6
+ export declare function writeAndroidConfigs(config: ModuleConfig, projectDir: string): Promise<void>;
7
+ export declare function writeIosConfigs(config: ModuleConfig, projectDir: string): Promise<void>;
8
+ export declare function writeModuleConfig(projectName: string, config: Omit<ModuleConfig, 'projectName'>, dir: string): Promise<ModuleConfig>;
9
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/create/scaffold.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,wBAAsB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAajF;AAED,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBlH;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7F;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrG;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BjG;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7F;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAW1I"}