@ciderjs/gasnuki 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.cjs +29 -9
- package/dist/index.mjs +29 -9
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
package/dist/cli.mjs
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -23,6 +23,8 @@ const chokidar__namespace = /*#__PURE__*/_interopNamespaceCompat(chokidar);
|
|
|
23
23
|
const fs__namespace = /*#__PURE__*/_interopNamespaceCompat(fs);
|
|
24
24
|
|
|
25
25
|
const getInterfaceMethodDefinition_ = (name, node) => {
|
|
26
|
+
const typeParameters = node.getTypeParameters?.() ?? [];
|
|
27
|
+
const typeParamsString = typeParameters.length > 0 ? `<${typeParameters.map((tp) => tp.getText()).join(", ")}>` : "";
|
|
26
28
|
const parameters = node.getParameters().map((param) => {
|
|
27
29
|
const paramName = param.getName();
|
|
28
30
|
const type = param.getTypeNode()?.getText() ?? param.getType().getText(node) ?? "any";
|
|
@@ -67,7 +69,7 @@ const getInterfaceMethodDefinition_ = (name, node) => {
|
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
|
-
return `${jsDocString}${name}(${parameters}): ${returnType};`;
|
|
72
|
+
return `${jsDocString}${name}${typeParamsString}(${parameters}): ${returnType};`;
|
|
71
73
|
};
|
|
72
74
|
const generateAppsScriptTypes = async ({
|
|
73
75
|
project: projectPath,
|
|
@@ -82,29 +84,42 @@ const generateAppsScriptTypes = async ({
|
|
|
82
84
|
consola.consola.info(` AppsScript Source Directory: ${absoluteSrcDir}`);
|
|
83
85
|
consola.consola.info(` Output File: ${absoluteOutputFile}`);
|
|
84
86
|
const project = new tsMorph.Project({
|
|
85
|
-
tsConfigFilePath: path__namespace.resolve(projectPath, "tsconfig.json")
|
|
87
|
+
tsConfigFilePath: path__namespace.resolve(projectPath, "tsconfig.json"),
|
|
88
|
+
skipAddingFilesFromTsConfig: true
|
|
86
89
|
});
|
|
87
90
|
project.addSourceFilesAtPaths(
|
|
88
91
|
path__namespace.join(absoluteSrcDir, "**/*.ts").replace(/\\/g, "/")
|
|
89
92
|
);
|
|
90
93
|
const methodDefinitions = [];
|
|
94
|
+
const globalTypeDefinitions = [];
|
|
91
95
|
const sourceFiles = project.getSourceFiles();
|
|
92
96
|
consola.consola.info(`Found ${sourceFiles.length} source file(s).`);
|
|
93
97
|
for (const sourceFile of sourceFiles) {
|
|
98
|
+
for (const iface of sourceFile.getInterfaces()) {
|
|
99
|
+
globalTypeDefinitions.push(iface.getText());
|
|
100
|
+
}
|
|
101
|
+
for (const typeAlias of sourceFile.getTypeAliases()) {
|
|
102
|
+
globalTypeDefinitions.push(typeAlias.getText());
|
|
103
|
+
}
|
|
104
|
+
for (const statement of sourceFile.getStatements()) {
|
|
105
|
+
if (statement.getKind() === tsMorph.SyntaxKind.ModuleDeclaration) {
|
|
106
|
+
globalTypeDefinitions.push(statement.getText());
|
|
107
|
+
}
|
|
108
|
+
}
|
|
94
109
|
for (const funcDecl of sourceFile.getFunctions()) {
|
|
95
|
-
if (!funcDecl.
|
|
110
|
+
if (!funcDecl.isAmbient()) {
|
|
96
111
|
const name = funcDecl.getName();
|
|
97
|
-
if (name != null) {
|
|
112
|
+
if (name != null && !name.endsWith("_")) {
|
|
98
113
|
methodDefinitions.push(getInterfaceMethodDefinition_(name, funcDecl));
|
|
99
114
|
}
|
|
100
115
|
}
|
|
101
116
|
}
|
|
102
117
|
for (const varStmt of sourceFile.getVariableStatements()) {
|
|
103
|
-
if (!varStmt.
|
|
118
|
+
if (!varStmt.isAmbient()) {
|
|
104
119
|
for (const varDecl of varStmt.getDeclarations()) {
|
|
105
120
|
const initializer = varDecl.getInitializer();
|
|
106
121
|
const varName = varDecl.getName();
|
|
107
|
-
if (initializer != null && (initializer.getKind() === tsMorph.SyntaxKind.ArrowFunction || initializer.getKind() === tsMorph.SyntaxKind.FunctionExpression)) {
|
|
122
|
+
if (initializer != null && (initializer.getKind() === tsMorph.SyntaxKind.ArrowFunction || initializer.getKind() === tsMorph.SyntaxKind.FunctionExpression) && !varName.endsWith("_")) {
|
|
108
123
|
methodDefinitions.push(
|
|
109
124
|
getInterfaceMethodDefinition_(
|
|
110
125
|
varName,
|
|
@@ -124,19 +139,24 @@ const generateAppsScriptTypes = async ({
|
|
|
124
139
|
let outputContent = `// Auto-generated by ${generatorName}
|
|
125
140
|
// Do NOT edit this file manually.
|
|
126
141
|
`;
|
|
142
|
+
if (globalTypeDefinitions.length > 0) {
|
|
143
|
+
outputContent += `${globalTypeDefinitions.join("\n\n")}
|
|
144
|
+
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
127
147
|
if (methodDefinitions.length > 0) {
|
|
128
148
|
const formattedMethods = methodDefinitions.map(
|
|
129
149
|
(method) => method.split("\n").map((line) => ` ${line}`).join("\n")
|
|
130
150
|
).join("\n\n");
|
|
131
|
-
outputContent += `export
|
|
151
|
+
outputContent += `export type ServerScripts = {
|
|
132
152
|
${formattedMethods}
|
|
133
153
|
}
|
|
134
154
|
`;
|
|
135
155
|
consola.consola.info(
|
|
136
|
-
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (${methodDefinitions.length} function(s)).`
|
|
156
|
+
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (${methodDefinitions.length} function(s), ${globalTypeDefinitions.length} type(s)).`
|
|
137
157
|
);
|
|
138
158
|
} else {
|
|
139
|
-
outputContent = "export
|
|
159
|
+
outputContent = "export type ServerScripts = {}\n";
|
|
140
160
|
consola.consola.info(
|
|
141
161
|
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (no functions found).`
|
|
142
162
|
);
|
package/dist/index.mjs
CHANGED
|
@@ -5,6 +5,8 @@ import * as fs from 'node:fs';
|
|
|
5
5
|
import { Project, SyntaxKind } from 'ts-morph';
|
|
6
6
|
|
|
7
7
|
const getInterfaceMethodDefinition_ = (name, node) => {
|
|
8
|
+
const typeParameters = node.getTypeParameters?.() ?? [];
|
|
9
|
+
const typeParamsString = typeParameters.length > 0 ? `<${typeParameters.map((tp) => tp.getText()).join(", ")}>` : "";
|
|
8
10
|
const parameters = node.getParameters().map((param) => {
|
|
9
11
|
const paramName = param.getName();
|
|
10
12
|
const type = param.getTypeNode()?.getText() ?? param.getType().getText(node) ?? "any";
|
|
@@ -49,7 +51,7 @@ const getInterfaceMethodDefinition_ = (name, node) => {
|
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
|
-
return `${jsDocString}${name}(${parameters}): ${returnType};`;
|
|
54
|
+
return `${jsDocString}${name}${typeParamsString}(${parameters}): ${returnType};`;
|
|
53
55
|
};
|
|
54
56
|
const generateAppsScriptTypes = async ({
|
|
55
57
|
project: projectPath,
|
|
@@ -64,29 +66,42 @@ const generateAppsScriptTypes = async ({
|
|
|
64
66
|
consola.info(` AppsScript Source Directory: ${absoluteSrcDir}`);
|
|
65
67
|
consola.info(` Output File: ${absoluteOutputFile}`);
|
|
66
68
|
const project = new Project({
|
|
67
|
-
tsConfigFilePath: path.resolve(projectPath, "tsconfig.json")
|
|
69
|
+
tsConfigFilePath: path.resolve(projectPath, "tsconfig.json"),
|
|
70
|
+
skipAddingFilesFromTsConfig: true
|
|
68
71
|
});
|
|
69
72
|
project.addSourceFilesAtPaths(
|
|
70
73
|
path.join(absoluteSrcDir, "**/*.ts").replace(/\\/g, "/")
|
|
71
74
|
);
|
|
72
75
|
const methodDefinitions = [];
|
|
76
|
+
const globalTypeDefinitions = [];
|
|
73
77
|
const sourceFiles = project.getSourceFiles();
|
|
74
78
|
consola.info(`Found ${sourceFiles.length} source file(s).`);
|
|
75
79
|
for (const sourceFile of sourceFiles) {
|
|
80
|
+
for (const iface of sourceFile.getInterfaces()) {
|
|
81
|
+
globalTypeDefinitions.push(iface.getText());
|
|
82
|
+
}
|
|
83
|
+
for (const typeAlias of sourceFile.getTypeAliases()) {
|
|
84
|
+
globalTypeDefinitions.push(typeAlias.getText());
|
|
85
|
+
}
|
|
86
|
+
for (const statement of sourceFile.getStatements()) {
|
|
87
|
+
if (statement.getKind() === SyntaxKind.ModuleDeclaration) {
|
|
88
|
+
globalTypeDefinitions.push(statement.getText());
|
|
89
|
+
}
|
|
90
|
+
}
|
|
76
91
|
for (const funcDecl of sourceFile.getFunctions()) {
|
|
77
|
-
if (!funcDecl.
|
|
92
|
+
if (!funcDecl.isAmbient()) {
|
|
78
93
|
const name = funcDecl.getName();
|
|
79
|
-
if (name != null) {
|
|
94
|
+
if (name != null && !name.endsWith("_")) {
|
|
80
95
|
methodDefinitions.push(getInterfaceMethodDefinition_(name, funcDecl));
|
|
81
96
|
}
|
|
82
97
|
}
|
|
83
98
|
}
|
|
84
99
|
for (const varStmt of sourceFile.getVariableStatements()) {
|
|
85
|
-
if (!varStmt.
|
|
100
|
+
if (!varStmt.isAmbient()) {
|
|
86
101
|
for (const varDecl of varStmt.getDeclarations()) {
|
|
87
102
|
const initializer = varDecl.getInitializer();
|
|
88
103
|
const varName = varDecl.getName();
|
|
89
|
-
if (initializer != null && (initializer.getKind() === SyntaxKind.ArrowFunction || initializer.getKind() === SyntaxKind.FunctionExpression)) {
|
|
104
|
+
if (initializer != null && (initializer.getKind() === SyntaxKind.ArrowFunction || initializer.getKind() === SyntaxKind.FunctionExpression) && !varName.endsWith("_")) {
|
|
90
105
|
methodDefinitions.push(
|
|
91
106
|
getInterfaceMethodDefinition_(
|
|
92
107
|
varName,
|
|
@@ -106,19 +121,24 @@ const generateAppsScriptTypes = async ({
|
|
|
106
121
|
let outputContent = `// Auto-generated by ${generatorName}
|
|
107
122
|
// Do NOT edit this file manually.
|
|
108
123
|
`;
|
|
124
|
+
if (globalTypeDefinitions.length > 0) {
|
|
125
|
+
outputContent += `${globalTypeDefinitions.join("\n\n")}
|
|
126
|
+
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
109
129
|
if (methodDefinitions.length > 0) {
|
|
110
130
|
const formattedMethods = methodDefinitions.map(
|
|
111
131
|
(method) => method.split("\n").map((line) => ` ${line}`).join("\n")
|
|
112
132
|
).join("\n\n");
|
|
113
|
-
outputContent += `export
|
|
133
|
+
outputContent += `export type ServerScripts = {
|
|
114
134
|
${formattedMethods}
|
|
115
135
|
}
|
|
116
136
|
`;
|
|
117
137
|
consola.info(
|
|
118
|
-
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (${methodDefinitions.length} function(s)).`
|
|
138
|
+
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (${methodDefinitions.length} function(s), ${globalTypeDefinitions.length} type(s)).`
|
|
119
139
|
);
|
|
120
140
|
} else {
|
|
121
|
-
outputContent = "export
|
|
141
|
+
outputContent = "export type ServerScripts = {}\n";
|
|
122
142
|
consola.info(
|
|
123
143
|
`Interface 'ServerScript' type definitions written to ${absoluteOutputFile} (no functions found).`
|
|
124
144
|
);
|