@effect-app/eslint-codegen-model 0.7.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.
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // codegen:start {preset: barrel, include: ./*/, nodir: false }
18
+ __exportStar(require("./presets"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtEQUErRDtBQUMvRCw0Q0FBMEIifQ==
@@ -0,0 +1,39 @@
1
+ import type { Preset } from 'eslint-plugin-codegen';
2
+ /**
3
+ * Bundle several modules into a single convenient one.
4
+ *
5
+ * @example
6
+ * // codegen:start {preset: barrel, include: some/path/*.ts, exclude: some/path/*util.ts}
7
+ * export * from './some/path/module-a'
8
+ * export * from './some/path/module-b'
9
+ * export * from './some/path/module-c'
10
+ * // codegen:end
11
+ *
12
+ * @param include
13
+ * [optional] If specified, the barrel will only include file paths that match this glob pattern
14
+ * @param exclude
15
+ * [optional] If specified, the barrel will exclude file paths that match these glob patterns
16
+ * @param import
17
+ * [optional] If specified, matching files will be imported and re-exported rather than directly exported
18
+ * with `export * from './xyz'`. Use `import: star` for `import * as xyz from './xyz'` style imports.
19
+ * Use `import: default` for `import xyz from './xyz'` style imports.
20
+ * @param export
21
+ * [optional] Only valid if the import style has been specified (either `import: star` or `import: default`).
22
+ * If specified, matching modules will be bundled into a const or default export based on this name. If set
23
+ * to `{name: someName, keys: path}` the relative file paths will be used as keys. Otherwise the file paths
24
+ * will be camel-cased to make them valid js identifiers.
25
+ */
26
+ export declare const barrel: Preset<{
27
+ include?: string;
28
+ exclude?: string | string[];
29
+ import?: 'default' | 'star';
30
+ export?: string | {
31
+ name: string;
32
+ keys: 'path' | 'camelCase';
33
+ } | {
34
+ as: 'PascalCase';
35
+ postfix?: string;
36
+ };
37
+ nodir?: boolean;
38
+ }>;
39
+ //# sourceMappingURL=barrel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barrel.d.ts","sourceRoot":"","sources":["../../src/presets/barrel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAMpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EACH,MAAM,GACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,GAC5C;QAAE,EAAE,EAAE,YAAY,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CA4GA,CAAC"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.barrel = void 0;
30
+ const generator_1 = __importDefault(require("@babel/generator"));
31
+ const parser_1 = require("@babel/parser");
32
+ const glob = __importStar(require("glob"));
33
+ const io_ts_extra_1 = require("io-ts-extra");
34
+ const lodash = __importStar(require("lodash"));
35
+ const path = __importStar(require("path"));
36
+ /**
37
+ * Bundle several modules into a single convenient one.
38
+ *
39
+ * @example
40
+ * // codegen:start {preset: barrel, include: some/path/*.ts, exclude: some/path/*util.ts}
41
+ * export * from './some/path/module-a'
42
+ * export * from './some/path/module-b'
43
+ * export * from './some/path/module-c'
44
+ * // codegen:end
45
+ *
46
+ * @param include
47
+ * [optional] If specified, the barrel will only include file paths that match this glob pattern
48
+ * @param exclude
49
+ * [optional] If specified, the barrel will exclude file paths that match these glob patterns
50
+ * @param import
51
+ * [optional] If specified, matching files will be imported and re-exported rather than directly exported
52
+ * with `export * from './xyz'`. Use `import: star` for `import * as xyz from './xyz'` style imports.
53
+ * Use `import: default` for `import xyz from './xyz'` style imports.
54
+ * @param export
55
+ * [optional] Only valid if the import style has been specified (either `import: star` or `import: default`).
56
+ * If specified, matching modules will be bundled into a const or default export based on this name. If set
57
+ * to `{name: someName, keys: path}` the relative file paths will be used as keys. Otherwise the file paths
58
+ * will be camel-cased to make them valid js identifiers.
59
+ */
60
+ const barrel = ({ meta, options: opts }) => {
61
+ var _a;
62
+ const cwd = path.dirname(meta.filename);
63
+ const nodir = (_a = opts.nodir) !== null && _a !== void 0 ? _a : true;
64
+ const ext = meta.filename.split('.').slice(-1)[0];
65
+ const pattern = opts.include || `*.${ext}`;
66
+ const relativeFiles = glob
67
+ .sync(pattern, { cwd, ignore: opts.exclude, nodir })
68
+ .filter((f) => path.resolve(cwd, f) !== path.resolve(meta.filename))
69
+ .map((f) => `./${f}`.replace(/(\.\/)+\./g, '.'))
70
+ .filter((file) => nodir
71
+ ? ['.js', '.mjs', '.ts', '.tsx'].includes(path.extname(file))
72
+ : true)
73
+ .map((f) => f.replace(/\.\w+$/, '').replace(/\/$/, ''));
74
+ function last(list) {
75
+ return list[list.length - 1];
76
+ }
77
+ const expectedContent = (0, io_ts_extra_1.match)(opts.import)
78
+ .case(undefined, () => (0, io_ts_extra_1.match)(opts.export)
79
+ .case({ as: 'PascalCase' }, (v) => lodash
80
+ .chain(relativeFiles)
81
+ .map((f) => `export * as ${lodash
82
+ .startCase(lodash.camelCase(last(f.split("/"))))
83
+ .replace(/ /g, "") // why?
84
+ .replace(/\//, '')}${"postfix" in v ? v.postfix : ''} from '${f}.js'`)
85
+ .value()
86
+ .join('\n'))
87
+ .default(() => {
88
+ return relativeFiles.map((f) => `export * from '${f}.js'`).join('\n');
89
+ })
90
+ .get())
91
+ .case(String, (s) => {
92
+ const importPrefix = s === 'default' ? '' : '* as ';
93
+ const withIdentifiers = lodash
94
+ .chain(relativeFiles)
95
+ .map((f) => ({
96
+ file: f,
97
+ identifier: lodash
98
+ .camelCase(f)
99
+ .replace(/^([^a-z])/, '_$1')
100
+ .replace(/Index$/, ''),
101
+ }))
102
+ .groupBy((info) => info.identifier)
103
+ .values()
104
+ .flatMap((group) => group.length === 1
105
+ ? group
106
+ : group.map((info, i) => ({
107
+ ...info,
108
+ identifier: `${info.identifier}_${i + 1}`,
109
+ })))
110
+ .value();
111
+ const imports = withIdentifiers
112
+ .map((i) => `import ${importPrefix}${i.identifier} from '${i.file}.js'`)
113
+ .join('\n');
114
+ const exportProps = (0, io_ts_extra_1.match)(opts.export)
115
+ .case({ name: String, keys: 'path' }, () => withIdentifiers.map((i) => `${JSON.stringify(i.file)}: ${i.identifier}`))
116
+ .default(() => withIdentifiers.map((i) => i.identifier))
117
+ .get();
118
+ const exportPrefix = (0, io_ts_extra_1.match)(opts.export)
119
+ .case(undefined, () => 'export')
120
+ .case('default', () => 'export default')
121
+ .case({ name: 'default' }, () => 'export default')
122
+ .case(String, (name) => `export const ${name} =`)
123
+ .case({ name: String }, ({ name }) => `export const ${name} =`)
124
+ .default(() => '')
125
+ .get();
126
+ const exports = exportProps.join(',\n ');
127
+ return `${imports}\n\n${exportPrefix} {\n ${exports}\n}\n`;
128
+ })
129
+ .get();
130
+ // ignore stylistic differences. babel generate deals with most
131
+ const normalise = (str) => (0, generator_1.default)((0, parser_1.parse)(str, { sourceType: 'module', plugins: ['typescript'] }))
132
+ .code.replace(/'/g, `"`)
133
+ .replace(/\/index/g, '');
134
+ try {
135
+ if (normalise(expectedContent) === normalise(meta.existingContent)) {
136
+ return meta.existingContent;
137
+ }
138
+ }
139
+ catch (_b) { }
140
+ return expectedContent;
141
+ };
142
+ exports.barrel = barrel;
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFycmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByZXNldHMvYmFycmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQXdDO0FBQ3hDLDBDQUFzQztBQUV0QywyQ0FBNkI7QUFDN0IsNkNBQW9DO0FBQ3BDLCtDQUFpQztBQUNqQywyQ0FBNkI7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0ksTUFBTSxNQUFNLEdBU2QsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTs7SUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUM7SUFFakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLElBQUk7U0FDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNuRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9DLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2YsS0FBSztRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxJQUFJLENBQ1Q7U0FDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUxRCxTQUFTLElBQUksQ0FBSSxJQUFrQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFBLG1CQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUNwQixJQUFBLG1CQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNmLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN6QyxNQUFNO1NBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNwQixHQUFHLENBQ0YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLGVBQWUsTUFBTTtTQUNsQixTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0MsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPO1NBQ3pCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUMxRTtTQUNBLEtBQUssRUFBRTtTQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDZDtTQUNBLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDWixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDLENBQUM7U0FDRCxHQUFHLEVBQUUsQ0FDVDtTQUNBLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNsQixNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNwRCxNQUFNLGVBQWUsR0FBRyxNQUFNO2FBQzNCLEtBQUssQ0FBQyxhQUFhLENBQUM7YUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxFQUFFLENBQUM7WUFDUCxVQUFVLEVBQUUsTUFBTTtpQkFDZixTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUNaLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2lCQUMzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztTQUN6QixDQUFDLENBQUM7YUFDRixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDbEMsTUFBTSxFQUFFO2FBQ1IsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLElBQUk7Z0JBQ1AsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2FBQzFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsS0FBSyxFQUFFLENBQUM7UUFFWCxNQUFNLE9BQU8sR0FBRyxlQUFlO2FBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxZQUFZLEdBQUcsQ0FBQyxDQUFDLFVBQVUsVUFBVSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7YUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQkFBSyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDbkMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQ3pDLGVBQWUsQ0FBQyxHQUFHLENBQ2pCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEQsQ0FDRjthQUNBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdkQsR0FBRyxFQUFFLENBQUM7UUFFVCxNQUFNLFlBQVksR0FBRyxJQUFBLG1CQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNwQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUMvQixJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7YUFDaEQsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2FBQzlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDakIsR0FBRyxFQUFFLENBQUM7UUFFVCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLE9BQU8sR0FBRyxPQUFPLE9BQU8sWUFBWSxRQUFRLE9BQU8sT0FBTyxDQUFDO0lBQzdELENBQUMsQ0FBQztTQUNELEdBQUcsRUFBRSxDQUFDO0lBRVQsK0RBQStEO0lBQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDaEMsSUFBQSxtQkFBUSxFQUNOLElBQUEsY0FBSyxFQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBUSxDQUNyRTtTQUNFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztTQUN2QixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLElBQUk7UUFDRixJQUFJLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUM3QjtLQUNGO0lBQUMsV0FBTSxHQUFFO0lBRVYsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBckhXLFFBQUEsTUFBTSxVQXFIakIifQ==
@@ -0,0 +1,3 @@
1
+ export * from './barrel';
2
+ export * from './model';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // codegen:start {preset: barrel, include: ./*.ts}
18
+ __exportStar(require("./barrel"), exports);
19
+ __exportStar(require("./model"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJlc2V0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQWtEO0FBQ2xELDJDQUF5QjtBQUN6QiwwQ0FBd0IifQ==
@@ -0,0 +1,5 @@
1
+ import type { Preset } from "eslint-plugin-codegen";
2
+ export declare const model: Preset<{
3
+ exclude?: string;
4
+ }>;
5
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/presets/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAsBnD,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAuFA,CAAA"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.model = void 0;
30
+ const generator_1 = __importDefault(require("@babel/generator"));
31
+ const parser_1 = require("@babel/parser");
32
+ const fs = __importStar(require("fs"));
33
+ const compiler_1 = require("../compiler");
34
+ function normalise(str) {
35
+ try {
36
+ return (0, generator_1.default)((0, parser_1.parse)(str, { sourceType: "module", plugins: ["typescript"] }))
37
+ .code;
38
+ // .replace(/'/g, `"`)
39
+ // .replace(/\/index/g, "")
40
+ //.replace(/([\n\s]+ \|)/g, " |").replaceAll(": |", ":")
41
+ //.replaceAll(/[\s\n]+\|/g, " |")
42
+ //.replaceAll("\n", ";")
43
+ //.replaceAll(" ", "")
44
+ // TODO: remove all \n and whitespace?
45
+ }
46
+ catch (e) {
47
+ return str;
48
+ }
49
+ }
50
+ // TODO: get shared compiler host...
51
+ const utils_1 = require("@typescript-eslint/utils");
52
+ const model = ({ meta }, context) => {
53
+ if (!context.parserOptions.project) {
54
+ console.warn(`${meta.filename}: Cannot run ESLint Model plugin, because no TS Compiler is enabled`);
55
+ return meta.existingContent;
56
+ }
57
+ try {
58
+ // option to exclude some methods
59
+ //const exclude = (options.exclude || "").split(",")
60
+ // checks and reads the file
61
+ const sourcePath = meta.filename;
62
+ if (!fs.existsSync(sourcePath) || !fs.statSync(sourcePath).isFile()) {
63
+ throw Error(`Source path is not a file: ${sourcePath}`);
64
+ }
65
+ // const cfgFile = ts.findConfigFile(sourcePath, (fn) => fs.existsSync(fn))
66
+ // if (!cfgFile) {
67
+ // throw new Error("No TS config file found")
68
+ // }
69
+ // const cfg = ts.readConfigFile(cfgFile, (fn) => fs.readFileSync(fn, "utf-8"))
70
+ // const basePath = path.dirname(cfgFile); // equal to "getDirectoryPath" from ts, at least in our case.
71
+ // const parsedConfig = ts.parseJsonConfigFileContent(cfg.config, ts.sys, basePath);
72
+ // const program = ts.createProgram([sourcePath], parsedConfig.options)
73
+ const { program } = utils_1.ESLintUtils.getParserServices(context);
74
+ //console.log("$$ processing", sourcePath)
75
+ // create and parse the AST
76
+ const sourceFile = program.getSourceFile(sourcePath);
77
+ // collect data-first declarations
78
+ // const dataFirstDeclarations = sourceFile.statements
79
+ // .filter(ts.isFunctionDeclaration)
80
+ // // .filter(
81
+ // // (node) =>
82
+ // // node.modifiers &&
83
+ // // node.modifiers.filter(
84
+ // // (modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword
85
+ // // ).length > 0
86
+ // // )
87
+ // // .filter((node) => !!node.name)
88
+ // // .filter((node) => node.parameters.length >= 2)
89
+ // // .filter((node) => node.name!.getText(sourceFile).endsWith("_"))
90
+ // // .map((node) => ({
91
+ // // functionName: node.name!.getText(sourceFile),
92
+ // // typeParameters: node.typeParameters || ts.factory.createNodeArray(),
93
+ // // parameters: node.parameters || ts.factory.createNodeArray(),
94
+ // // type: node.type!,
95
+ // // implemented: !!node.body,
96
+ // // jsDoc: getJSDoc(node)
97
+ // // }))
98
+ // // .filter((decl) => exclude.indexOf(decl.functionName) === -1)
99
+ // // create the actual AST nodes
100
+ // const nodes = dataFirstDeclarations.map(createPipeableFunctionDeclaration)
101
+ // const expectedContent = nodes.map((node) => printNode(node, sourceFile)).join("\n")
102
+ const pn = (0, compiler_1.processNode)(program.getTypeChecker(), sourceFile);
103
+ let abc = [];
104
+ // TODO: must return void, cannot use getChildren() etc, or it wont work, no idea why!
105
+ sourceFile.forEachChild(c => { abc = abc.concat(pn(c)); });
106
+ const expectedContent = [
107
+ "//",
108
+ `/* eslint-disable */`,
109
+ ...abc.filter((x) => !!x),
110
+ `/* eslint-enable */`,
111
+ "//"
112
+ ].join("\n");
113
+ // do not re-emit in a different style, or a loop will occur
114
+ if (normalise(meta.existingContent) === normalise(expectedContent))
115
+ return meta.existingContent;
116
+ return expectedContent;
117
+ }
118
+ catch (e) {
119
+ return ("/** Got exception: " +
120
+ ("stack" in e ? e.stack : "") +
121
+ JSON.stringify(e) +
122
+ "*/");
123
+ }
124
+ };
125
+ exports.model = model;
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJlc2V0cy9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlFQUF1QztBQUN2QywwQ0FBcUM7QUFFckMsdUNBQXdCO0FBQ3hCLDBDQUF5QztBQUN6QyxTQUFTLFNBQVMsQ0FBQyxHQUFXO0lBQzVCLElBQUk7UUFDRixPQUFPLElBQUEsbUJBQVEsRUFDYixJQUFBLGNBQUssRUFBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQVEsQ0FDckU7YUFDRSxJQUFJLENBQUE7UUFDTCxzQkFBc0I7UUFDdEIsMkJBQTJCO1FBQzNCLHdEQUF3RDtRQUN4RCxpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QixzQ0FBc0M7S0FDekM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sR0FBRyxDQUFBO0tBQ1g7QUFDSCxDQUFDO0FBQ0Qsb0NBQW9DO0FBQ3BDLG9EQUFzRDtBQUMvQyxNQUFNLEtBQUssR0FFYixDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxxRUFBcUUsQ0FBQyxDQUFBO1FBQ25HLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQTtLQUM1QjtJQUVELElBQUk7UUFDRixpQ0FBaUM7UUFDakMsb0RBQW9EO1FBRXBELDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuRSxNQUFNLEtBQUssQ0FBQyw4QkFBOEIsVUFBVSxFQUFFLENBQUMsQ0FBQTtTQUN4RDtRQUNELDJFQUEyRTtRQUMzRSxrQkFBa0I7UUFDbEIsK0NBQStDO1FBQy9DLElBQUk7UUFFSiwrRUFBK0U7UUFDL0Usd0dBQXdHO1FBQ3hHLG9GQUFvRjtRQUVwRix1RUFBdUU7UUFHdkUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0QsMENBQTBDO1FBRTFDLDJCQUEyQjtRQUMzQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUN0QyxVQUFVLENBQ1YsQ0FBQTtRQUVGLGtDQUFrQztRQUNsQyxzREFBc0Q7UUFDdEQsc0NBQXNDO1FBQ3RDLGdCQUFnQjtRQUNoQixtQkFBbUI7UUFDbkIsNkJBQTZCO1FBQzdCLGtDQUFrQztRQUNsQyx5RUFBeUU7UUFDekUsd0JBQXdCO1FBQ3hCLFNBQVM7UUFDVCxzQ0FBc0M7UUFDdEMsc0RBQXNEO1FBQ3RELHVFQUF1RTtRQUN2RSx5QkFBeUI7UUFDekIsdURBQXVEO1FBQ3ZELDhFQUE4RTtRQUM5RSxzRUFBc0U7UUFDdEUsMkJBQTJCO1FBQzNCLG1DQUFtQztRQUNuQywrQkFBK0I7UUFDL0IsV0FBVztRQUNYLG9FQUFvRTtRQUVwRSxpQ0FBaUM7UUFDakMsNkVBQTZFO1FBQzdFLHNGQUFzRjtRQUV0RixNQUFNLEVBQUUsR0FBRyxJQUFBLHNCQUFXLEVBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQzVELElBQUksR0FBRyxHQUE2QixFQUFFLENBQUE7UUFDdEMsd0ZBQXdGO1FBQ3hGLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sZUFBZSxHQUFHO1lBQ3RCLElBQUk7WUFDSixzQkFBc0I7WUFDdEIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxxQkFBcUI7WUFDckIsSUFBSTtTQUNMLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRVosNERBQTREO1FBQzVELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxTQUFTLENBQUMsZUFBZSxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQTtRQUM3QixPQUFPLGVBQWUsQ0FBQTtLQUN2QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUNMLHFCQUFxQjtZQUNyQixDQUFDLE9BQU8sSUFBSyxDQUFTLENBQUMsQ0FBQyxDQUFFLENBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQ0wsQ0FBQTtLQUNGO0FBQ0gsQ0FBQyxDQUFBO0FBekZZLFFBQUEsS0FBSyxTQXlGakIifQ==
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ exports.barrel = require('./dist/presets/barrel').barrel;
2
+ exports.model = require('./dist/presets/model').model;
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@effect-app/eslint-codegen-model",
3
+ "description": "Contains eslint helpers",
4
+ "sideEffects": false,
5
+ "version": "0.7.0",
6
+ "dependencies": {
7
+ "@babel/generator": "7.20.7",
8
+ "@babel/parser": "7.20.7",
9
+ "eslint-plugin-codegen": "0.17.0",
10
+ "glob": "8.1.0",
11
+ "io-ts": "2.2.20",
12
+ "io-ts-extra": "0.11.6",
13
+ "js-yaml": "4.1.0",
14
+ "lodash": "4.17.21"
15
+ },
16
+ "devDependencies": {
17
+ "@babel/types": "7.20.7",
18
+ "@types/babel__generator": "7.6.4",
19
+ "@types/babel__traverse": "7.18.3",
20
+ "@types/glob": "8.0.0",
21
+ "@types/lodash": "4.14.191",
22
+ "madge": "5.0.1",
23
+ "ts-node": "10.9.1",
24
+ "typescript": "https://cdn.jsdelivr.net/npm/@tsplus/installer@0.0.164/compiler/typescript.tgz"
25
+ },
26
+ "main": "index.js",
27
+ "author": "Wessel van der Veen & Scott vanBommel",
28
+ "license": "ISC",
29
+ "scripts": {
30
+ "watch": "pnpm build:tsc -w",
31
+ "build:tsc": "pnpm clean-dist && node ../../scripts/package.js && NODE_OPTIONS=--max-old-space-size=6144 tsc --build",
32
+ "build": "tsc",
33
+ "circular": "madge --circular --ts-config ./tsconfig.json --extensions ts ./src",
34
+ "ncu": "ncu",
35
+ "pub": "pnpm prepublish && npm publish --access public",
36
+ "prepublish": "pnpm build && cp -f ./tsconfig.json ./tsconfig.json.bak && node ../../scripts/mergeTsConfig.cjs ./tsconfig.json"
37
+ }
38
+ }