@effect-app/eslint-codegen-model 1.7.3 → 1.8.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/CHANGELOG.md +12 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/presets/barrel.d.ts +5 -4
- package/dist/presets/barrel.d.ts.map +1 -1
- package/dist/presets/barrel.js +38 -28
- package/package.json +3 -3
- package/src/presets/barrel.ts +72 -61
package/dist/presets/barrel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Preset } from
|
|
1
|
+
import type { Preset } from "eslint-plugin-codegen";
|
|
2
2
|
/**
|
|
3
3
|
* Bundle several modules into a single convenient one.
|
|
4
4
|
*
|
|
@@ -26,14 +26,15 @@ import type { Preset } from 'eslint-plugin-codegen';
|
|
|
26
26
|
export declare const barrel: Preset<{
|
|
27
27
|
include?: string;
|
|
28
28
|
exclude?: string | string[];
|
|
29
|
-
import?:
|
|
29
|
+
import?: "default" | "star";
|
|
30
30
|
export?: string | {
|
|
31
31
|
name: string;
|
|
32
|
-
keys:
|
|
32
|
+
keys: "path" | "camelCase";
|
|
33
33
|
} | {
|
|
34
|
-
as:
|
|
34
|
+
as: "PascalCase";
|
|
35
35
|
postfix?: string;
|
|
36
36
|
};
|
|
37
37
|
nodir?: boolean;
|
|
38
|
+
modulegen?: boolean;
|
|
38
39
|
}>;
|
|
39
40
|
//# sourceMappingURL=barrel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barrel.d.ts","sourceRoot":"","sources":["../../src/presets/barrel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"barrel.d.ts","sourceRoot":"","sources":["../../src/presets/barrel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAMnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC3B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,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,CAAA;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAsHA,CAAA"}
|
package/dist/presets/barrel.js
CHANGED
|
@@ -58,46 +58,47 @@ const path = __importStar(require("path"));
|
|
|
58
58
|
* will be camel-cased to make them valid js identifiers.
|
|
59
59
|
*/
|
|
60
60
|
const barrel = ({ meta, options: opts }) => {
|
|
61
|
-
var _a;
|
|
61
|
+
var _a, _b;
|
|
62
62
|
const cwd = path.dirname(meta.filename);
|
|
63
63
|
const nodir = (_a = opts.nodir) !== null && _a !== void 0 ? _a : true;
|
|
64
|
-
const
|
|
64
|
+
const modulegen = (_b = opts.modulegen) !== null && _b !== void 0 ? _b : true;
|
|
65
|
+
const ext = meta.filename.split(".").slice(-1)[0];
|
|
65
66
|
const pattern = opts.include || `*.${ext}`;
|
|
66
67
|
const relativeFiles = glob
|
|
67
68
|
.sync(pattern, { cwd, ignore: opts.exclude, nodir })
|
|
68
69
|
.filter((f) => path.resolve(cwd, f) !== path.resolve(meta.filename))
|
|
69
|
-
.map((f) => `./${f}`.replace(/(\.\/)+\./g,
|
|
70
|
+
.map((f) => `./${f}`.replace(/(\.\/)+\./g, "."))
|
|
70
71
|
.filter((file) => nodir
|
|
71
|
-
? [
|
|
72
|
+
? [".js", ".mjs", ".ts", ".tsx"].includes(path.extname(file))
|
|
72
73
|
: true)
|
|
73
|
-
.map((f) => f.replace(/\.\w+$/,
|
|
74
|
+
.map((f) => f.replace(/\.\w+$/, "").replace(/\/$/, ""));
|
|
74
75
|
function last(list) {
|
|
75
76
|
return list[list.length - 1];
|
|
76
77
|
}
|
|
77
78
|
const expectedContent = (0, io_ts_extra_1.match)(opts.import)
|
|
78
79
|
.case(undefined, () => (0, io_ts_extra_1.match)(opts.export)
|
|
79
|
-
.case({ as:
|
|
80
|
+
.case({ as: "PascalCase" }, (v) => lodash
|
|
80
81
|
.chain(relativeFiles)
|
|
81
82
|
.map((f) => `export * as ${lodash
|
|
82
83
|
.startCase(lodash.camelCase(last(f.split("/"))))
|
|
83
84
|
.replace(/ /g, "") // why?
|
|
84
|
-
.replace(/\//,
|
|
85
|
+
.replace(/\//, "")}${"postfix" in v ? v.postfix : ""} from "${f}.js"`)
|
|
85
86
|
.value()
|
|
86
|
-
.join(
|
|
87
|
+
.join("\n"))
|
|
87
88
|
.default(() => {
|
|
88
|
-
return relativeFiles.map((f) => `export * from "${f}.js"`).join(
|
|
89
|
+
return relativeFiles.map((f) => `export * from "${f}.js"`).join("\n");
|
|
89
90
|
})
|
|
90
91
|
.get())
|
|
91
92
|
.case(String, (s) => {
|
|
92
|
-
const importPrefix = s ===
|
|
93
|
+
const importPrefix = s === "default" ? "" : "* as ";
|
|
93
94
|
const withIdentifiers = lodash
|
|
94
95
|
.chain(relativeFiles)
|
|
95
96
|
.map((f) => ({
|
|
96
97
|
file: f,
|
|
97
98
|
identifier: lodash
|
|
98
|
-
.camelCase(f)
|
|
99
|
-
.replace(/^([^a-z])/,
|
|
100
|
-
.replace(/Index$/,
|
|
99
|
+
.camelCase(modulegen ? last(f.split("/")) : f)
|
|
100
|
+
.replace(/^([^a-z])/, "_$1")
|
|
101
|
+
.replace(/([\^/])Index$/, "$1")
|
|
101
102
|
}))
|
|
102
103
|
.groupBy((info) => info.identifier)
|
|
103
104
|
.values()
|
|
@@ -105,39 +106,48 @@ const barrel = ({ meta, options: opts }) => {
|
|
|
105
106
|
? group
|
|
106
107
|
: group.map((info, i) => ({
|
|
107
108
|
...info,
|
|
108
|
-
identifier: `${info.identifier}_${i + 1}
|
|
109
|
+
identifier: `${info.identifier}_${i + 1}`
|
|
109
110
|
})))
|
|
110
111
|
.value();
|
|
111
112
|
const imports = withIdentifiers
|
|
112
113
|
.map((i) => `import ${importPrefix}${i.identifier} from "${i.file}.js"`)
|
|
113
|
-
.join(
|
|
114
|
-
const exportProps = (0, io_ts_extra_1.match)(opts.export)
|
|
115
|
-
.case({ name: String, keys:
|
|
114
|
+
.join("\n");
|
|
115
|
+
const exportProps = modulegen ? [] : (0, io_ts_extra_1.match)(opts.export)
|
|
116
|
+
.case({ name: String, keys: "path" }, () => withIdentifiers.map((i) => `${JSON.stringify(i.file)}: ${i.identifier}`))
|
|
116
117
|
.default(() => withIdentifiers.map((i) => i.identifier))
|
|
117
118
|
.get();
|
|
118
119
|
const exportPrefix = (0, io_ts_extra_1.match)(opts.export)
|
|
119
|
-
.case(undefined, () =>
|
|
120
|
-
.case(
|
|
121
|
-
.case({ name:
|
|
120
|
+
.case(undefined, () => "export")
|
|
121
|
+
.case("default", () => "export default")
|
|
122
|
+
.case({ name: "default" }, () => "export default")
|
|
122
123
|
.case(String, (name) => `export const ${name} =`)
|
|
123
124
|
.case({ name: String }, ({ name }) => `export const ${name} =`)
|
|
124
|
-
.default(() =>
|
|
125
|
+
.default(() => "")
|
|
125
126
|
.get();
|
|
126
|
-
const exports = exportProps.join(
|
|
127
|
-
|
|
127
|
+
const exports = exportProps.join(",\n ");
|
|
128
|
+
const moduleGen = withIdentifiers
|
|
129
|
+
.map((i) => {
|
|
130
|
+
const up = `${i.identifier[0].toUpperCase()}${i.identifier.slice(1)}`;
|
|
131
|
+
return `export interface ${up} extends Id<typeof ${i.identifier}> {}
|
|
132
|
+
export const ${up}: ${up} = ${i.identifier}`;
|
|
133
|
+
})
|
|
134
|
+
.join("\n");
|
|
135
|
+
const exportss = modulegen ? "" : `\n${exportPrefix} {\n ${exports}\n}`;
|
|
136
|
+
return `${imports}\n${exportss}\n${modulegen && moduleGen ? "type Id<T> = T\n\n" + moduleGen : ""}`;
|
|
128
137
|
})
|
|
129
138
|
.get();
|
|
130
139
|
// ignore stylistic differences. babel generate deals with most
|
|
131
|
-
const normalise = (str) => (0, generator_1.default)((0, parser_1.parse)(str, { sourceType:
|
|
132
|
-
.code
|
|
133
|
-
.replace(
|
|
140
|
+
const normalise = (str) => (0, generator_1.default)((0, parser_1.parse)(str, { sourceType: "module", plugins: ["typescript"] }))
|
|
141
|
+
.code
|
|
142
|
+
.replace(/'/g, `"`)
|
|
143
|
+
.replace(/\/index/g, "");
|
|
134
144
|
try {
|
|
135
145
|
if (normalise(expectedContent) === normalise(meta.existingContent)) {
|
|
136
146
|
return meta.existingContent;
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
|
-
catch (
|
|
149
|
+
catch (_c) { }
|
|
140
150
|
return expectedContent;
|
|
141
151
|
};
|
|
142
152
|
exports.barrel = barrel;
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFycmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByZXNldHMvYmFycmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQXVDO0FBQ3ZDLDBDQUFxQztBQUVyQywyQ0FBNEI7QUFDNUIsNkNBQW1DO0FBQ25DLCtDQUFnQztBQUNoQywyQ0FBNEI7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0ksTUFBTSxNQUFNLEdBVWQsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTs7SUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUE7SUFDaEMsTUFBTSxTQUFTLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUyxtQ0FBSSxJQUFJLENBQUE7SUFFeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBRTFDLE1BQU0sYUFBYSxHQUFHLElBQUk7U0FDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNuRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxD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
|
package/package.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"name": "@effect-app/eslint-codegen-model",
|
|
3
3
|
"description": "Contains eslint helpers",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.8.0",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@babel/generator": "7.25.6",
|
|
8
8
|
"@babel/parser": "7.25.6",
|
|
9
|
-
"@typescript-eslint/utils": "8.
|
|
9
|
+
"@typescript-eslint/utils": "8.5.0",
|
|
10
10
|
"eslint-plugin-codegen": "0.17.0",
|
|
11
11
|
"glob": "8.1.0",
|
|
12
12
|
"io-ts": "2.2.21",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"effect": "^3.7.2",
|
|
27
27
|
"madge": "8.0.0",
|
|
28
28
|
"ts-node": "10.9.2",
|
|
29
|
-
"typescript": "^5.
|
|
29
|
+
"typescript": "^5.6.2"
|
|
30
30
|
},
|
|
31
31
|
"main": "index.js",
|
|
32
32
|
"author": "Wessel van der Veen & Scott vanBommel",
|
package/src/presets/barrel.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import generate from
|
|
2
|
-
import { parse } from
|
|
3
|
-
import type { Preset } from
|
|
4
|
-
import * as glob from
|
|
5
|
-
import { match } from
|
|
6
|
-
import * as lodash from
|
|
7
|
-
import * as path from
|
|
1
|
+
import generate from "@babel/generator"
|
|
2
|
+
import { parse } from "@babel/parser"
|
|
3
|
+
import type { Preset } from "eslint-plugin-codegen"
|
|
4
|
+
import * as glob from "glob"
|
|
5
|
+
import { match } from "io-ts-extra"
|
|
6
|
+
import * as lodash from "lodash"
|
|
7
|
+
import * as path from "path"
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Bundle several modules into a single convenient one.
|
|
@@ -31,32 +31,34 @@ import * as path from 'path';
|
|
|
31
31
|
* will be camel-cased to make them valid js identifiers.
|
|
32
32
|
*/
|
|
33
33
|
export const barrel: Preset<{
|
|
34
|
-
include?: string
|
|
35
|
-
exclude?: string | string[]
|
|
36
|
-
import?:
|
|
34
|
+
include?: string
|
|
35
|
+
exclude?: string | string[]
|
|
36
|
+
import?: "default" | "star"
|
|
37
37
|
export?:
|
|
38
38
|
| string
|
|
39
|
-
| { name: string; keys:
|
|
40
|
-
| { as:
|
|
41
|
-
nodir?: boolean
|
|
39
|
+
| { name: string; keys: "path" | "camelCase" }
|
|
40
|
+
| { as: "PascalCase"; postfix?: string }
|
|
41
|
+
nodir?: boolean
|
|
42
|
+
modulegen?: boolean
|
|
42
43
|
}> = ({ meta, options: opts }) => {
|
|
43
|
-
const cwd = path.dirname(meta.filename)
|
|
44
|
-
const nodir = opts.nodir ?? true
|
|
44
|
+
const cwd = path.dirname(meta.filename)
|
|
45
|
+
const nodir = opts.nodir ?? true
|
|
46
|
+
const modulegen = opts.modulegen ?? true
|
|
45
47
|
|
|
46
|
-
const ext = meta.filename.split(
|
|
47
|
-
const pattern = opts.include || `*.${ext}
|
|
48
|
+
const ext = meta.filename.split(".").slice(-1)[0]
|
|
49
|
+
const pattern = opts.include || `*.${ext}`
|
|
48
50
|
|
|
49
51
|
const relativeFiles = glob
|
|
50
52
|
.sync(pattern, { cwd, ignore: opts.exclude, nodir })
|
|
51
53
|
.filter((f) => path.resolve(cwd, f) !== path.resolve(meta.filename))
|
|
52
|
-
.map((f) => `./${f}`.replace(/(\.\/)+\./g,
|
|
54
|
+
.map((f) => `./${f}`.replace(/(\.\/)+\./g, "."))
|
|
53
55
|
.filter((file) =>
|
|
54
56
|
nodir
|
|
55
|
-
? [
|
|
56
|
-
: true
|
|
57
|
+
? [".js", ".mjs", ".ts", ".tsx"].includes(path.extname(file))
|
|
58
|
+
: true
|
|
57
59
|
)
|
|
58
|
-
.map((f) => f.replace(/\.\w+$/,
|
|
59
|
-
|
|
60
|
+
.map((f) => f.replace(/\.\w+$/, "").replace(/\/$/, ""))
|
|
61
|
+
|
|
60
62
|
function last<T>(list: readonly T[]) {
|
|
61
63
|
return list[list.length - 1]
|
|
62
64
|
}
|
|
@@ -64,34 +66,34 @@ export const barrel: Preset<{
|
|
|
64
66
|
const expectedContent = match(opts.import)
|
|
65
67
|
.case(undefined, () =>
|
|
66
68
|
match(opts.export)
|
|
67
|
-
.case({ as:
|
|
69
|
+
.case({ as: "PascalCase" as const }, (v) =>
|
|
68
70
|
lodash
|
|
69
71
|
.chain(relativeFiles)
|
|
70
72
|
.map(
|
|
71
73
|
(f) =>
|
|
72
|
-
`export * as ${
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
`export * as ${
|
|
75
|
+
lodash
|
|
76
|
+
.startCase(lodash.camelCase(last(f.split("/"))))
|
|
77
|
+
.replace(/ /g, "") // why?
|
|
78
|
+
.replace(/\//, "")
|
|
79
|
+
}${"postfix" in v ? v.postfix : ""} from "${f}.js"`
|
|
76
80
|
)
|
|
77
81
|
.value()
|
|
78
|
-
.join(
|
|
79
|
-
)
|
|
82
|
+
.join("\n"))
|
|
80
83
|
.default(() => {
|
|
81
|
-
return relativeFiles.map((f) => `export * from "${f}.js"`).join(
|
|
84
|
+
return relativeFiles.map((f) => `export * from "${f}.js"`).join("\n")
|
|
82
85
|
})
|
|
83
|
-
.get()
|
|
84
|
-
)
|
|
86
|
+
.get())
|
|
85
87
|
.case(String, (s) => {
|
|
86
|
-
const importPrefix = s ===
|
|
88
|
+
const importPrefix = s === "default" ? "" : "* as "
|
|
87
89
|
const withIdentifiers = lodash
|
|
88
90
|
.chain(relativeFiles)
|
|
89
91
|
.map((f) => ({
|
|
90
92
|
file: f,
|
|
91
93
|
identifier: lodash
|
|
92
|
-
.camelCase(f)
|
|
93
|
-
.replace(/^([^a-z])/,
|
|
94
|
-
.replace(/Index$/,
|
|
94
|
+
.camelCase(modulegen ? last(f.split("/")) : f)
|
|
95
|
+
.replace(/^([^a-z])/, "_$1")
|
|
96
|
+
.replace(/([\^/])Index$/, "$1")
|
|
95
97
|
}))
|
|
96
98
|
.groupBy((info) => info.identifier)
|
|
97
99
|
.values()
|
|
@@ -99,52 +101,61 @@ export const barrel: Preset<{
|
|
|
99
101
|
group.length === 1
|
|
100
102
|
? group
|
|
101
103
|
: group.map((info, i) => ({
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
...info,
|
|
105
|
+
identifier: `${info.identifier}_${i + 1}`
|
|
106
|
+
}))
|
|
105
107
|
)
|
|
106
|
-
.value()
|
|
108
|
+
.value()
|
|
107
109
|
|
|
108
110
|
const imports = withIdentifiers
|
|
109
111
|
.map((i) => `import ${importPrefix}${i.identifier} from "${i.file}.js"`)
|
|
110
|
-
.join(
|
|
111
|
-
const exportProps = match(opts.export)
|
|
112
|
-
.case({ name: String, keys:
|
|
112
|
+
.join("\n")
|
|
113
|
+
const exportProps = modulegen ? [] : match(opts.export)
|
|
114
|
+
.case({ name: String, keys: "path" }, () =>
|
|
113
115
|
withIdentifiers.map(
|
|
114
|
-
(i) => `${JSON.stringify(i.file)}: ${i.identifier}
|
|
115
|
-
)
|
|
116
|
-
)
|
|
116
|
+
(i) => `${JSON.stringify(i.file)}: ${i.identifier}`
|
|
117
|
+
))
|
|
117
118
|
.default(() => withIdentifiers.map((i) => i.identifier))
|
|
118
|
-
.get()
|
|
119
|
+
.get()
|
|
119
120
|
|
|
120
121
|
const exportPrefix = match(opts.export)
|
|
121
|
-
.case(undefined, () =>
|
|
122
|
-
.case(
|
|
123
|
-
.case({ name:
|
|
122
|
+
.case(undefined, () => "export")
|
|
123
|
+
.case("default", () => "export default")
|
|
124
|
+
.case({ name: "default" }, () => "export default")
|
|
124
125
|
.case(String, (name) => `export const ${name} =`)
|
|
125
126
|
.case({ name: String }, ({ name }) => `export const ${name} =`)
|
|
126
|
-
.default(() =>
|
|
127
|
-
.get()
|
|
127
|
+
.default(() => "")
|
|
128
|
+
.get()
|
|
129
|
+
|
|
130
|
+
const exports = exportProps.join(",\n ")
|
|
128
131
|
|
|
129
|
-
const
|
|
132
|
+
const moduleGen = withIdentifiers
|
|
133
|
+
.map((i) => {
|
|
134
|
+
const up = `${i.identifier[0]!.toUpperCase()}${i.identifier.slice(1)}`
|
|
135
|
+
return `export interface ${up} extends Id<typeof ${i.identifier}> {}
|
|
136
|
+
export const ${up}: ${up} = ${i.identifier}`
|
|
137
|
+
})
|
|
138
|
+
.join("\n")
|
|
130
139
|
|
|
131
|
-
|
|
140
|
+
const exportss = modulegen ? "" : `\n${exportPrefix} {\n ${exports}\n}`
|
|
141
|
+
return `${imports}\n${exportss}\n${modulegen && moduleGen ? "type Id<T> = T\n\n" + moduleGen : ""}`
|
|
132
142
|
})
|
|
133
|
-
.get()
|
|
143
|
+
.get()
|
|
134
144
|
|
|
135
145
|
// ignore stylistic differences. babel generate deals with most
|
|
136
146
|
const normalise = (str: string) =>
|
|
137
147
|
generate(
|
|
138
|
-
parse(str, { sourceType:
|
|
148
|
+
parse(str, { sourceType: "module", plugins: ["typescript"] }) as any
|
|
139
149
|
)
|
|
140
|
-
.code
|
|
141
|
-
.replace(
|
|
150
|
+
.code
|
|
151
|
+
.replace(/'/g, `"`)
|
|
152
|
+
.replace(/\/index/g, "")
|
|
142
153
|
|
|
143
154
|
try {
|
|
144
155
|
if (normalise(expectedContent) === normalise(meta.existingContent)) {
|
|
145
|
-
return meta.existingContent
|
|
156
|
+
return meta.existingContent
|
|
146
157
|
}
|
|
147
158
|
} catch {}
|
|
148
159
|
|
|
149
|
-
return expectedContent
|
|
150
|
-
}
|
|
160
|
+
return expectedContent
|
|
161
|
+
}
|