@snowtop/ent 0.1.0-alpha16 → 0.1.0-alpha24

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.
@@ -1,141 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- const glob_1 = require("glob");
26
- const path = __importStar(require("path"));
27
- const fs = __importStar(require("fs"));
28
- const compilerOptions_1 = require("../tsc/compilerOptions");
29
- const typescript_1 = __importDefault(require("typescript"));
30
- const ast_1 = require("../tsc/ast");
31
- const child_process_1 = require("child_process");
32
- // src/ent/generated and src/graphql/generated
33
- function transformPath(old) {
34
- const parts = old.split(path.sep);
35
- if (parts.length < 3) {
36
- return;
37
- }
38
- const changedParts = parts
39
- .slice(0, 2)
40
- .concat("generated")
41
- .concat(parts.slice(2).filter((v) => v !== "generated"));
42
- const newFile = changedParts.join(path.sep);
43
- return { changedParts, newFile };
44
- }
45
- function moveFiles(files) {
46
- files.forEach((file) => {
47
- const conv = transformPath(file);
48
- if (!conv) {
49
- return;
50
- }
51
- const { changedParts, newFile } = conv;
52
- if (file === newFile) {
53
- return;
54
- }
55
- // check if directory exists, if not, create recursive dir
56
- const p = changedParts.slice(0, changedParts.length - 1).join(path.sep);
57
- const statInfo = fs.statSync(p, { throwIfNoEntry: false });
58
- if (!statInfo) {
59
- fs.mkdirSync(p, {
60
- recursive: true,
61
- });
62
- }
63
- // move file to new location
64
- fs.renameSync(file, newFile);
65
- });
66
- }
67
- function updateImports(files, target, cwd) {
68
- files.forEach((file) => {
69
- let { contents, sourceFile } = (0, compilerOptions_1.createSourceFile)(target, file);
70
- let nodes = [];
71
- let updated = false;
72
- typescript_1.default.forEachChild(sourceFile, function (node) {
73
- let dirPath = path.join(cwd, file, "..");
74
- if (typescript_1.default.isImportDeclaration(node)) {
75
- const conv = isGeneratedPath(node, sourceFile, dirPath);
76
- if (!conv) {
77
- nodes.push({ node });
78
- return;
79
- }
80
- updated = true;
81
- const newImportPath = path.relative(dirPath, conv.newFile);
82
- const v = (0, ast_1.updateImportPath)(contents, node, sourceFile, newImportPath);
83
- nodes.push({ rawString: v });
84
- }
85
- else {
86
- nodes.push({ node });
87
- }
88
- });
89
- let newContents = "";
90
- for (const node of nodes) {
91
- if (node.node) {
92
- newContents += node.node.getFullText(sourceFile);
93
- }
94
- else if (node.rawString) {
95
- newContents += node.rawString;
96
- }
97
- else {
98
- throw new Error(`malformed node with no node or rawString`);
99
- }
100
- }
101
- if (updated) {
102
- fs.writeFileSync(file, newContents);
103
- }
104
- });
105
- }
106
- function main() {
107
- const entFiles = glob_1.glob.sync("src/ent/**/generated/**/**.ts");
108
- const graphqlFiles = glob_1.glob.sync("src/graphql/**/generated/**/**.ts");
109
- moveFiles(entFiles);
110
- moveFiles(graphqlFiles);
111
- const target = (0, compilerOptions_1.getTargetFromCurrentDir)();
112
- const entImportFiles = glob_1.glob.sync("src/ent/**/*.ts", {
113
- ignore: ["**/generated/**", "node_modules/**"],
114
- });
115
- const graphqlImportFiles = glob_1.glob.sync("src/graphql/**/*.ts", {
116
- ignore: ["**/generated/**", "node_modules/**"],
117
- });
118
- const cwd = process.cwd();
119
- updateImports(entImportFiles, target, cwd);
120
- updateImports(graphqlImportFiles, target, cwd);
121
- (0, child_process_1.execSync)("prettier src/ent/*.ts --write");
122
- (0, child_process_1.execSync)("prettier src/graphql/*.ts --write");
123
- }
124
- function isGeneratedPath(node, sourceFile, dirPath) {
125
- // it's relative and has generated in there, continue
126
- if (!(0, ast_1.isRelativeGeneratedImport)(node, sourceFile)) {
127
- return;
128
- }
129
- const text = node.moduleSpecifier.getText(sourceFile).slice(1, -1);
130
- const oldPath = path.join(dirPath, text);
131
- const relFromRoot = path.relative(".", oldPath);
132
- const conv = transformPath(relFromRoot);
133
- if (!conv) {
134
- return;
135
- }
136
- if (relFromRoot === conv.newFile) {
137
- return;
138
- }
139
- return conv;
140
- }
141
- main();
@@ -1 +0,0 @@
1
- export {};
@@ -1,266 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- const glob_1 = require("glob");
26
- const typescript_1 = __importDefault(require("typescript"));
27
- const compilerOptions_1 = require("../tsc/compilerOptions");
28
- const ast_1 = require("../tsc/ast");
29
- const child_process_1 = require("child_process");
30
- const fs = __importStar(require("fs"));
31
- const action_1 = require("../action");
32
- const viewer_1 = require("../core/viewer");
33
- const path = __importStar(require("path"));
34
- const js_yaml_1 = require("js-yaml");
35
- function transformRelative(file, importPath, relative) {
36
- if (!relative || !importPath.startsWith("src")) {
37
- return importPath;
38
- }
39
- const fileFullPath = path.join(process.cwd(), file);
40
- const impFullPath = path.join(process.cwd(), importPath);
41
- // relative path is from directory
42
- return normalizePath(path.relative(path.dirname(fileFullPath), impFullPath));
43
- }
44
- function normalizePath(p) {
45
- if (p.endsWith("..")) {
46
- return p + "/";
47
- }
48
- return p;
49
- }
50
- function findInput(file, sourceFile) {
51
- // @ts-ignore
52
- const importStatements = sourceFile.statements.filter((stmt) => typescript_1.default.isImportDeclaration(stmt));
53
- for (const imp of importStatements) {
54
- const text = imp.moduleSpecifier.getText(sourceFile).slice(1, -1);
55
- if ((0, ast_1.isRelativeGeneratedImport)(imp, sourceFile)) {
56
- // base file and we're importing from it
57
- // e.g. in create_user_action, we're importing from create_user_action_base
58
- if (path.basename(file).slice(0, -3) + "_base" !== path.basename(text)) {
59
- continue;
60
- }
61
- const impInfo = (0, ast_1.getImportInfo)(imp, sourceFile);
62
- if (!impInfo) {
63
- continue;
64
- }
65
- const inputs = impInfo.imports
66
- .filter((imp) => imp.trim() && imp.endsWith("Input"))
67
- .map((v) => v.trim());
68
- if (inputs.length === 1) {
69
- return inputs[0];
70
- }
71
- }
72
- }
73
- return null;
74
- }
75
- function getCustomInfo() {
76
- let yaml = {};
77
- let relativeImports = false;
78
- try {
79
- yaml = (0, js_yaml_1.load)(fs.readFileSync(path.join(process.cwd(), "ent.yml"), {
80
- encoding: "utf8",
81
- }));
82
- relativeImports = yaml?.codegen?.relativeImports || false;
83
- if (yaml?.codegen?.templatizedViewer) {
84
- return {
85
- viewerInfo: yaml.codegen.templatizedViewer,
86
- relativeImports,
87
- };
88
- }
89
- }
90
- catch (e) { }
91
- return {
92
- viewerInfo: {
93
- path: "@snowtop/ent",
94
- name: "Viewer",
95
- },
96
- relativeImports,
97
- };
98
- }
99
- async function main() {
100
- let files = glob_1.glob.sync("src/ent/**/actions/**/*_action.ts");
101
- const target = (0, compilerOptions_1.getTargetFromCurrentDir)();
102
- const customInfo = getCustomInfo();
103
- const viewerInfo = customInfo.viewerInfo;
104
- files.forEach((file) => {
105
- let { contents, sourceFile } = (0, compilerOptions_1.createSourceFile)(target, file);
106
- let traversed = false;
107
- let nodes = [];
108
- // require action
109
- const p = require(path.join(process.cwd(), "./" + file.slice(0, -3)));
110
- const action = new p.default(new viewer_1.LoggedOutViewer(), {});
111
- const builder = action.builder.constructor.name;
112
- const nodeName = action.builder.ent.name;
113
- const existingEnt = action.builder.operation === action_1.WriteOperation.Insert
114
- ? `${nodeName} | null`
115
- : nodeName;
116
- const viewer = customInfo.viewerInfo.name;
117
- const input = findInput(file, sourceFile);
118
- if (!input) {
119
- return;
120
- }
121
- let newImports = [];
122
- typescript_1.default.forEachChild(sourceFile, function (node) {
123
- if (!typescript_1.default.isClassDeclaration(node) || !node.heritageClauses) {
124
- nodes.push({ node });
125
- return;
126
- }
127
- let classInfo = (0, ast_1.getClassInfo)(contents, sourceFile, node);
128
- // only do classes
129
- if (!classInfo) {
130
- return;
131
- }
132
- let klassContents = "";
133
- for (const mm of node.members) {
134
- const conv = getConversionInfo(mm);
135
- if (conv !== null) {
136
- const property = mm;
137
- // if invalid, bounce
138
- if (!property.initializer) {
139
- traversed = false;
140
- return;
141
- }
142
- traversed = true;
143
- const pp = property.initializer.getFullText(sourceFile).trim();
144
- const code = `${conv.method}(): ${conv.interface}<${nodeName}, ${builder}<${input}, ${existingEnt}>, ${viewer}, ${input}, ${existingEnt}>[] {
145
- return ${pp}
146
- }`;
147
- newImports.push(conv.interface);
148
- klassContents += (0, ast_1.getPreText)(contents, mm, sourceFile) + code;
149
- }
150
- else {
151
- klassContents += mm.getFullText(sourceFile);
152
- }
153
- }
154
- // wrap comments and transform to export class Foo extends Bar { ${inner} }
155
- nodes.push({ rawString: classInfo.wrapClassContents(klassContents) });
156
- });
157
- // if traversed, overwrite.
158
- if (!traversed) {
159
- return;
160
- }
161
- let newContents = "";
162
- let afterProcessed = false;
163
- let imports = new Map([
164
- [
165
- transformRelative(file, viewerInfo.path, customInfo.relativeImports),
166
- [viewer],
167
- ],
168
- [
169
- transformRelative(file, "src/ent", customInfo.relativeImports),
170
- [nodeName],
171
- ],
172
- ["@snowtop/ent/action", newImports],
173
- ]);
174
- let seen = new Map();
175
- const processAfterImport = () => {
176
- // do this for the first non-import node we see
177
- // we want to add new imports to end of imports and there's an assumption that imports are ordered
178
- // at top of file
179
- if (!afterProcessed) {
180
- for (const [imp, list] of imports) {
181
- if (seen.has(imp)) {
182
- continue;
183
- }
184
- newContents += `\nimport { ${list.join(", ")} } from "${imp}"`;
185
- }
186
- afterProcessed = true;
187
- }
188
- };
189
- for (const node of nodes) {
190
- if (node.node) {
191
- if (typescript_1.default.isImportDeclaration(node.node)) {
192
- const impInfo = (0, ast_1.getImportInfo)(node.node, sourceFile);
193
- if (impInfo) {
194
- const impPath = normalizePath(impInfo.importPath);
195
- // normalize paths...
196
- const list = imports.get(impPath);
197
- if (list) {
198
- let transformed = (0, ast_1.transformImport)(contents, node.node, sourceFile, {
199
- newImports: list,
200
- // don't use normalized path here, we wanna use the path that's in code...
201
- transformPath: impInfo.importPath,
202
- });
203
- if (transformed) {
204
- newContents += transformed;
205
- seen.set(impPath, true);
206
- continue;
207
- }
208
- }
209
- }
210
- }
211
- else {
212
- if (!typescript_1.default.isExportDeclaration(node.node)) {
213
- processAfterImport();
214
- }
215
- }
216
- newContents += node.node.getFullText(sourceFile);
217
- }
218
- else if (node.rawString) {
219
- processAfterImport();
220
- newContents += node.rawString;
221
- }
222
- else {
223
- throw new Error(`malformed node with no node or rawString`);
224
- }
225
- fs.writeFileSync(file, newContents);
226
- }
227
- });
228
- (0, child_process_1.execSync)("prettier src/ent/**/actions/**/*.ts --write");
229
- }
230
- let m = {
231
- triggers: {
232
- m: "getTriggers",
233
- i: "Trigger",
234
- },
235
- observers: {
236
- m: "getObservers",
237
- i: "Observer",
238
- },
239
- validators: {
240
- m: "getValidators",
241
- i: "Validator",
242
- },
243
- };
244
- function getConversionInfo(mm) {
245
- if (mm.kind !== typescript_1.default.SyntaxKind.PropertyDeclaration) {
246
- return null;
247
- }
248
- const text = mm.name.escapedText;
249
- const v = m[text];
250
- if (v === undefined) {
251
- return null;
252
- }
253
- return {
254
- text,
255
- method: v.m,
256
- interface: v.i,
257
- };
258
- }
259
- main()
260
- .then(() => {
261
- process.exit(0);
262
- })
263
- .catch((err) => {
264
- console.error(err);
265
- process.exit(1);
266
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- const glob_1 = require("glob");
26
- const typescript_1 = __importDefault(require("typescript"));
27
- const compilerOptions_1 = require("../tsc/compilerOptions");
28
- const ast_1 = require("../tsc/ast");
29
- const child_process_1 = require("child_process");
30
- const fs = __importStar(require("fs"));
31
- async function main() {
32
- let files = glob_1.glob.sync("src/ent/*.ts");
33
- const target = (0, compilerOptions_1.getTargetFromCurrentDir)();
34
- files.forEach((file) => {
35
- let { contents, sourceFile } = (0, compilerOptions_1.createSourceFile)(target, file);
36
- let traversed = false;
37
- let nodes = [];
38
- typescript_1.default.forEachChild(sourceFile, function (node) {
39
- if (!typescript_1.default.isClassDeclaration(node) || !node.heritageClauses) {
40
- nodes.push({ node });
41
- return;
42
- }
43
- let classInfo = (0, ast_1.getClassInfo)(contents, sourceFile, node);
44
- // only do classes which extend a base class e.g. User extends UserBase
45
- if (!classInfo || classInfo.extends !== classInfo.name + "Base") {
46
- return;
47
- }
48
- traversed = true;
49
- let klassContents = "";
50
- for (const mm of node.members) {
51
- if (isPrivacyPolicy(mm)) {
52
- const property = mm;
53
- // if invalid privacy policy, bounce
54
- if (!property.initializer) {
55
- traversed = false;
56
- return;
57
- }
58
- const pp = property.initializer.getFullText(sourceFile);
59
- const code = `getPrivacyPolicy(): PrivacyPolicy<this> {
60
- return ${pp}
61
- }`;
62
- klassContents += (0, ast_1.getPreText)(contents, mm, sourceFile) + code;
63
- }
64
- else {
65
- klassContents += mm.getFullText(sourceFile);
66
- }
67
- }
68
- // wrap comments and transform to export class Foo extends Bar { ${inner} }
69
- nodes.push({ rawString: classInfo.wrapClassContents(klassContents) });
70
- });
71
- // if traversed, overwrite.
72
- if (!traversed) {
73
- return;
74
- }
75
- let newContents = "";
76
- for (const node of nodes) {
77
- if (node.node) {
78
- if (typescript_1.default.isImportDeclaration(node.node)) {
79
- let transformed = (0, ast_1.transformImport)(contents, node.node, sourceFile, {
80
- newImports: ["PrivacyPolicy"],
81
- });
82
- if (transformed) {
83
- newContents += transformed;
84
- continue;
85
- }
86
- }
87
- newContents += node.node.getFullText(sourceFile);
88
- }
89
- else if (node.rawString) {
90
- newContents += node.rawString;
91
- }
92
- else {
93
- throw new Error(`malformed node with no node or rawString`);
94
- }
95
- fs.writeFileSync(file, newContents);
96
- }
97
- });
98
- (0, child_process_1.execSync)("prettier src/ent/*.ts --write");
99
- }
100
- function isPrivacyPolicy(mm) {
101
- return (mm.kind === typescript_1.default.SyntaxKind.PropertyDeclaration &&
102
- mm.name.escapedText === "privacyPolicy");
103
- }
104
- main()
105
- .then(() => {
106
- process.exit(0);
107
- })
108
- .catch((err) => {
109
- console.error(err);
110
- process.exit(1);
111
- });
@@ -1 +0,0 @@
1
- export {};