requirejs-esm 1.1.0 → 2.1.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/README.md +4 -0
- package/bin/esm2requirejs.js +10 -6
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/plugin.js +1 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +23 -27
- package/src/api.d.ts +14 -0
- package/src/api.js +2 -0
- package/src/fetch-text.js +35 -0
- package/src/plugin.js +147 -0
- package/src/resolve-path.js +80 -0
- package/src/skip-module.js +18 -0
- package/src/transform.js +47 -0
- package/src/transformer/amd.js +98 -0
- package/src/transformer/converters.js +102 -0
- package/src/transformer/esm.js +295 -0
- package/src/transformer/factories.js +55 -0
- package/src/transformer/generate-id.js +96 -0
- package/src/transformer/identifier.js +75 -0
- package/src/transformer/index.js +18 -0
- package/src/transformer/keywords.js +74 -0
- package/src/transformer/validators.js +29 -0
- package/src/write-text.js +16 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { isAnonymousImport, isImportDefault, isImportAllAs } from './validators'
|
|
2
|
+
import {
|
|
3
|
+
identifier, memberExpression, objectExpression, arrayExpression, blockStatement,
|
|
4
|
+
variableDeclaration, variableDeclarator, returnStatement, expressionStatement,
|
|
5
|
+
forInStatement, assignmentExpression, callExpression, functionExpression
|
|
6
|
+
} from './factories'
|
|
7
|
+
import { toExpression, replaceLiteral, exportStatement } from './converters'
|
|
8
|
+
import { generateUid, generateUidIdentifier } from './generate-id'
|
|
9
|
+
|
|
10
|
+
// Transforms the module format from ESM to AMD.
|
|
11
|
+
export function transformEsmToAmd(program, options) {
|
|
12
|
+
const { body } = program
|
|
13
|
+
let { length } = body
|
|
14
|
+
|
|
15
|
+
const importPaths = []
|
|
16
|
+
const importVars = []
|
|
17
|
+
const namedImports = []
|
|
18
|
+
const localImports = new Set()
|
|
19
|
+
|
|
20
|
+
const exportsVar = generateUidIdentifier('exports', program, program)
|
|
21
|
+
let hasExport = false
|
|
22
|
+
let needReturnExport = false
|
|
23
|
+
let isOnlyDefaultExport = true
|
|
24
|
+
|
|
25
|
+
for (let i = 0; i < length; ++i) {
|
|
26
|
+
const statement = body[i]
|
|
27
|
+
|
|
28
|
+
// import
|
|
29
|
+
if (statement.type === 'ImportDeclaration') {
|
|
30
|
+
// save import path
|
|
31
|
+
const exportSource = statement.source
|
|
32
|
+
importPaths.push(exportSource)
|
|
33
|
+
|
|
34
|
+
const importNode = statement
|
|
35
|
+
// import "some"
|
|
36
|
+
if (isAnonymousImport(importNode)) {
|
|
37
|
+
// importVars.length should be equal importPaths.length
|
|
38
|
+
const importVar = generateUidIdentifier(exportSource.value, program)
|
|
39
|
+
importVars.push(importVar)
|
|
40
|
+
}
|
|
41
|
+
// import some from "some"
|
|
42
|
+
// import * as some from "some"
|
|
43
|
+
else if (isImportDefault(importNode) || isImportAllAs(importNode)) {
|
|
44
|
+
const asName = importNode.specifiers[0].local
|
|
45
|
+
importVars.push(asName)
|
|
46
|
+
}
|
|
47
|
+
// import {x, y, z} from "xyz"
|
|
48
|
+
else {
|
|
49
|
+
// convert "/path/to/a" to _pathToA
|
|
50
|
+
const asName = generateUidIdentifier(exportSource.value, program)
|
|
51
|
+
importVars.push(asName)
|
|
52
|
+
|
|
53
|
+
for (const { imported, local } of importNode.specifiers) {
|
|
54
|
+
const { name } = local
|
|
55
|
+
localImports.add(name)
|
|
56
|
+
namedImports.push(declareImport(name, asName.name, imported.name))
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
body.splice(i--, 1)
|
|
61
|
+
--length
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// export default
|
|
65
|
+
if (statement.type === 'ExportDefaultDeclaration') {
|
|
66
|
+
// need return at end file
|
|
67
|
+
hasExport = true
|
|
68
|
+
needReturnExport = true
|
|
69
|
+
|
|
70
|
+
// expression after keyword default
|
|
71
|
+
const { declaration } = statement
|
|
72
|
+
let exportValue = declaration
|
|
73
|
+
let needExportExpression = true
|
|
74
|
+
|
|
75
|
+
if (declaration.type === 'FunctionDeclaration') {
|
|
76
|
+
exportValue = toExpression(exportValue)
|
|
77
|
+
}
|
|
78
|
+
if (declaration.type === 'ClassDeclaration') {
|
|
79
|
+
exportValue = toExpression(exportValue)
|
|
80
|
+
// const classNode = exportValue
|
|
81
|
+
|
|
82
|
+
// if (classNode.id) {
|
|
83
|
+
// body[i] = classNode
|
|
84
|
+
|
|
85
|
+
// const className = identifier(classNode.id.name)
|
|
86
|
+
// let exportStat
|
|
87
|
+
// if (i + 1 === length && isOnlyDefaultExport) {
|
|
88
|
+
// exportStat = returnStatement(identifier(className))
|
|
89
|
+
// needReturnExport = false
|
|
90
|
+
// } else {
|
|
91
|
+
// exportStat = exportStatement(exportsVar, 'default', className)
|
|
92
|
+
// }
|
|
93
|
+
|
|
94
|
+
// program.pushContainer('body', [exportStat])
|
|
95
|
+
// needExportExpression = false
|
|
96
|
+
// } else {
|
|
97
|
+
// exportValue = toExpression(classNode)
|
|
98
|
+
// }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (needExportExpression) {
|
|
102
|
+
let exportStat
|
|
103
|
+
|
|
104
|
+
if (i + 1 === length && isOnlyDefaultExport) {
|
|
105
|
+
exportStat = returnStatement(exportValue)
|
|
106
|
+
needReturnExport = false
|
|
107
|
+
} else {
|
|
108
|
+
exportStat = exportStatement(exportsVar, 'default', exportValue)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
body[i] = exportStat
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// export {x as y}
|
|
116
|
+
// export var a = 1
|
|
117
|
+
// export function test() {}
|
|
118
|
+
// export class Test {}
|
|
119
|
+
if (statement.type === 'ExportNamedDeclaration') {
|
|
120
|
+
hasExport = true
|
|
121
|
+
needReturnExport = true
|
|
122
|
+
|
|
123
|
+
const { specifiers, declaration } = statement
|
|
124
|
+
|
|
125
|
+
// export var a = 1
|
|
126
|
+
if (!specifiers.length) {
|
|
127
|
+
isOnlyDefaultExport = false
|
|
128
|
+
|
|
129
|
+
// replace "export <expression>"
|
|
130
|
+
// to "<expression>"
|
|
131
|
+
body[i] = declaration
|
|
132
|
+
|
|
133
|
+
// export var a = 1, b = 2
|
|
134
|
+
if (declaration.type === 'VariableDeclaration') {
|
|
135
|
+
for (const { id } of declaration.declarations) {
|
|
136
|
+
const { name } = id
|
|
137
|
+
const exportStat = exportStatement(exportsVar, name, identifier(name))
|
|
138
|
+
body.push(exportStat)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// export function x() {}
|
|
143
|
+
if (declaration.type === 'FunctionDeclaration') {
|
|
144
|
+
const asName = declaration.id.name
|
|
145
|
+
|
|
146
|
+
const exportStat = exportStatement(exportsVar, asName, identifier(asName))
|
|
147
|
+
body.push(exportStat)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// export class Test {}
|
|
151
|
+
if (declaration.type === 'ClassDeclaration') {
|
|
152
|
+
const asName = declaration.id.name
|
|
153
|
+
|
|
154
|
+
const exportStat = exportStatement(exportsVar, asName, identifier(asName))
|
|
155
|
+
body.push(exportStat)
|
|
156
|
+
}
|
|
157
|
+
} else { // export {x as y}
|
|
158
|
+
// export { ... } from "module"
|
|
159
|
+
const exportSource = statement.source
|
|
160
|
+
if (exportSource) {
|
|
161
|
+
// save import path
|
|
162
|
+
importPaths.push(exportSource)
|
|
163
|
+
// importVars.length should be equal importPaths.length
|
|
164
|
+
const importVar = generateUidIdentifier(exportSource.value, program)
|
|
165
|
+
importVars.push(importVar)
|
|
166
|
+
|
|
167
|
+
for (let specifier of specifiers) {
|
|
168
|
+
const { exported, local } = specifier
|
|
169
|
+
const { name } = local
|
|
170
|
+
let localName
|
|
171
|
+
// newly re-exporting earlier imported identifier
|
|
172
|
+
if (localImports.has(name)) {
|
|
173
|
+
localName = generateUid(name, program)
|
|
174
|
+
addExportStatement({ exported, local: identifier(localName) })
|
|
175
|
+
} else {
|
|
176
|
+
localName = name
|
|
177
|
+
addExportStatement(specifier)
|
|
178
|
+
}
|
|
179
|
+
namedImports.push(declareImport(localName, importVar.name, name))
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
for (const specifier of specifiers) {
|
|
183
|
+
addExportStatement(specifier)
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
body.splice(i--, 1)
|
|
188
|
+
--length
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// export * from "module"
|
|
193
|
+
if (statement.type === 'ExportAllDeclaration') {
|
|
194
|
+
isOnlyDefaultExport = false
|
|
195
|
+
hasExport = true
|
|
196
|
+
needReturnExport = true
|
|
197
|
+
|
|
198
|
+
// save import path
|
|
199
|
+
const exportSource = statement.source
|
|
200
|
+
importPaths.push(exportSource)
|
|
201
|
+
// importVars.length should be equal importPaths.length
|
|
202
|
+
const importVar = generateUidIdentifier(exportSource.value, program)
|
|
203
|
+
importVars.push(importVar)
|
|
204
|
+
|
|
205
|
+
body[i] = exportCopyLoop(exportsVar, importVar)
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// adding define wrapper
|
|
210
|
+
if (hasExport && needReturnExport) {
|
|
211
|
+
// var _exports = {}
|
|
212
|
+
body.unshift(
|
|
213
|
+
variableDeclaration('let', [
|
|
214
|
+
variableDeclarator(exportsVar, objectExpression([]))
|
|
215
|
+
])
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
// return <expression>
|
|
219
|
+
let returnStat
|
|
220
|
+
if (isOnlyDefaultExport) {
|
|
221
|
+
// return _exports.default
|
|
222
|
+
returnStat = returnStatement(memberExpression(exportsVar, identifier('default')))
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// return _exports
|
|
226
|
+
returnStat = returnStatement(exportsVar)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
body.push(returnStat)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
buildAmdModule(program, options, importPaths, importVars, namedImports)
|
|
233
|
+
|
|
234
|
+
function addExportStatement({ exported, local }) {
|
|
235
|
+
const asName = exported.name
|
|
236
|
+
if (asName !== 'default') {
|
|
237
|
+
isOnlyDefaultExport = false
|
|
238
|
+
}
|
|
239
|
+
const exportStat = exportStatement(exportsVar, asName, local)
|
|
240
|
+
body.push(exportStat)
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function declareImport(varName, object, property) {
|
|
245
|
+
return variableDeclaration('let', [
|
|
246
|
+
variableDeclarator(
|
|
247
|
+
identifier(varName),
|
|
248
|
+
memberExpression(identifier(object), identifier(property))
|
|
249
|
+
)
|
|
250
|
+
])
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function exportCopyLoop(exportsVar, importVar) {
|
|
254
|
+
const key = identifier('_key')
|
|
255
|
+
return forInStatement(
|
|
256
|
+
variableDeclaration('const', [variableDeclarator(key)]),
|
|
257
|
+
importVar,
|
|
258
|
+
blockStatement([
|
|
259
|
+
expressionStatement(
|
|
260
|
+
assignmentExpression('=',
|
|
261
|
+
memberExpression(exportsVar, key, true), memberExpression(importVar, key, true)))
|
|
262
|
+
])
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Wraps a program body of statements into an AMD module.
|
|
267
|
+
function buildAmdModule(program, options, importPaths, importVars, namedImports) {
|
|
268
|
+
program.body = [
|
|
269
|
+
expressionStatement(callExpression(
|
|
270
|
+
identifier('define'), importPaths.length ? [
|
|
271
|
+
prepareImportPaths(importPaths, options),
|
|
272
|
+
functionExpression(importVars, blockStatement(namedImports.concat(program.body)))
|
|
273
|
+
] : [
|
|
274
|
+
functionExpression([], blockStatement(program.body))
|
|
275
|
+
]))
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Update dependency paths to be prefixed by `esm!` or otherwise updated.
|
|
280
|
+
function prepareImportPaths(importPaths, options ) {
|
|
281
|
+
const { resolvePath } = options
|
|
282
|
+
if (resolvePath) {
|
|
283
|
+
const { sourceFileName: parentName } = options
|
|
284
|
+
for (const importPath of importPaths) {
|
|
285
|
+
if (importPath.type === 'Literal') {
|
|
286
|
+
const moduleName = importPath.value
|
|
287
|
+
const newModuleName = resolvePath(moduleName, parentName, options)
|
|
288
|
+
if (newModuleName && newModuleName !== moduleName) {
|
|
289
|
+
replaceLiteral(importPath, newModuleName)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return arrayExpression(importPaths)
|
|
295
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function literal(value) {
|
|
2
|
+
return { type: 'Literal', value }
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function identifier(name) {
|
|
6
|
+
return { type: 'Identifier', name }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function memberExpression(object, property, computed) {
|
|
10
|
+
return { type: 'MemberExpression', object, property, computed }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function objectExpression(properties) {
|
|
14
|
+
return { type: 'ObjectExpression', properties }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function arrayExpression(elements) {
|
|
18
|
+
return { type: 'ArrayExpression', elements }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function assignmentExpression(operator, left, right) {
|
|
22
|
+
return { type: 'AssignmentExpression', operator, left, right }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function variableDeclaration(kind, declarations) {
|
|
26
|
+
return { type: 'VariableDeclaration', kind, declarations }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function variableDeclarator(id, init) {
|
|
30
|
+
return { type: 'VariableDeclarator', id, init }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function expressionStatement(expression) {
|
|
34
|
+
return { type: 'ExpressionStatement', expression }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function returnStatement(argument) {
|
|
38
|
+
return { type: 'ReturnStatement', argument }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function forInStatement(left, right, body) {
|
|
42
|
+
return { type: 'ForInStatement', left, right, body }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function blockStatement(body) {
|
|
46
|
+
return { type: 'BlockStatement', body }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function callExpression(callee, args) {
|
|
50
|
+
return { type: 'CallExpression', callee, arguments: args }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function functionExpression(params, body) {
|
|
54
|
+
return { type: 'FunctionExpression', params, body }
|
|
55
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { isAnonymousImport, isImportDefault, isImportAllAs } from './validators'
|
|
2
|
+
import { identifier } from './factories'
|
|
3
|
+
import { toIdentifier } from './converters'
|
|
4
|
+
|
|
5
|
+
function _generateUid(name, i) {
|
|
6
|
+
let id = name
|
|
7
|
+
if (i > 1) id += i
|
|
8
|
+
return `_${id}`
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function getUids(program) {
|
|
12
|
+
const uids = new Set()
|
|
13
|
+
for (const statement of program.body) {
|
|
14
|
+
const { type } = statement
|
|
15
|
+
if (type === 'LabeledStatement') {
|
|
16
|
+
const { label } = statement
|
|
17
|
+
if (label) {
|
|
18
|
+
uids.add(label.name)
|
|
19
|
+
}
|
|
20
|
+
} else if (type === 'ImportDeclaration') {
|
|
21
|
+
// import some from "some"
|
|
22
|
+
// import * as some from "some"
|
|
23
|
+
if (isImportDefault(statement) || isImportAllAs(statement)) {
|
|
24
|
+
uids.add(statement.specifiers[0].local.name)
|
|
25
|
+
}
|
|
26
|
+
// import {x, y, z} from "xyz"
|
|
27
|
+
else if (!isAnonymousImport(statement)) {
|
|
28
|
+
for (const { local } of statement.specifiers) {
|
|
29
|
+
uids.add(local.name)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
} else if (type === 'ExportNamedDeclaration') {
|
|
33
|
+
const { declaration } = statement
|
|
34
|
+
if (declaration) {
|
|
35
|
+
const { type } = declaration
|
|
36
|
+
// export var a = 1
|
|
37
|
+
if (type === 'VariableDeclaration') {
|
|
38
|
+
for (const { id } of declaration.declarations) {
|
|
39
|
+
uids.add(id.name)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// export function test() {}
|
|
43
|
+
// export class Test {}
|
|
44
|
+
else if (type === 'FunctionDeclaration' || type === 'ClassDeclaration') {
|
|
45
|
+
uids.add(declaration.id.name)
|
|
46
|
+
}
|
|
47
|
+
// export {x as y}
|
|
48
|
+
else {
|
|
49
|
+
for (const { local } of statement.specifiers) {
|
|
50
|
+
uids.add(local.name)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} else if (type === 'VariableDeclaration') {
|
|
55
|
+
for (const { id } of statement.declarations) {
|
|
56
|
+
if (id.type === 'Identifier') {
|
|
57
|
+
uids.add(id.name)
|
|
58
|
+
} else {
|
|
59
|
+
for (const { value } of id.properties) {
|
|
60
|
+
uids.add(value.name)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
} else if (type === 'FunctionDeclaration' || type === 'ClassDeclaration') {
|
|
65
|
+
uids.add(statement.id.name)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return uids
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function tryAddUid(uid, program) {
|
|
72
|
+
let { _uids } = program
|
|
73
|
+
if (!_uids) {
|
|
74
|
+
_uids = program._uids = getUids(program)
|
|
75
|
+
}
|
|
76
|
+
if (_uids.has(uid)) return true
|
|
77
|
+
_uids.add(uid)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function generateUid(name, program) {
|
|
81
|
+
name = toIdentifier(name)
|
|
82
|
+
.replace(/^_+/, '')
|
|
83
|
+
.replace(/[0-9]+$/g, '')
|
|
84
|
+
|
|
85
|
+
let uid
|
|
86
|
+
let i = 1
|
|
87
|
+
do {
|
|
88
|
+
uid = _generateUid(name, i++)
|
|
89
|
+
} while (tryAddUid(uid, program))
|
|
90
|
+
|
|
91
|
+
return uid
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function generateUidIdentifier(name, program) {
|
|
95
|
+
return identifier(generateUid(name, program))
|
|
96
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as charCodes from 'charcodes'
|
|
2
|
+
|
|
3
|
+
let nonASCIIidentifierStartChars = '\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc'
|
|
4
|
+
let nonASCIIidentifierChars = '\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f'
|
|
5
|
+
|
|
6
|
+
const nonASCIIidentifierStart = new RegExp(`[${nonASCIIidentifierStartChars}]`)
|
|
7
|
+
const nonASCIIidentifier = new RegExp(`[${nonASCIIidentifierStartChars}${nonASCIIidentifierChars}]`)
|
|
8
|
+
|
|
9
|
+
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null
|
|
10
|
+
|
|
11
|
+
const astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2637,96,16,1070,4050,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,46,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,482,44,11,6,17,0,322,29,19,43,1269,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4152,8,221,3,5761,15,7472,3104,541,1507,4938]
|
|
12
|
+
const astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,357,0,62,13,1495,6,110,6,6,9,4759,9,787719,239]
|
|
13
|
+
|
|
14
|
+
function isInAstralSet(code, set) {
|
|
15
|
+
let pos = 0x10000
|
|
16
|
+
for (let i = 0, length = set.length; i < length; i += 2) {
|
|
17
|
+
pos += set[i]
|
|
18
|
+
if (pos > code) return false
|
|
19
|
+
|
|
20
|
+
pos += set[i + 1]
|
|
21
|
+
if (pos >= code) return true
|
|
22
|
+
}
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function isIdentifierStart(code) {
|
|
27
|
+
if (code < charCodes.uppercaseA) return code === charCodes.dollarSign
|
|
28
|
+
if (code <= charCodes.uppercaseZ) return true
|
|
29
|
+
if (code < charCodes.lowercaseA) return code === charCodes.underscore
|
|
30
|
+
if (code <= charCodes.lowercaseZ) return true
|
|
31
|
+
if (code <= 0xffff) {
|
|
32
|
+
return (
|
|
33
|
+
code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
return isInAstralSet(code, astralIdentifierStartCodes)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function isIdentifierChar(code) {
|
|
40
|
+
if (code < charCodes.digit0) return code === charCodes.dollarSign
|
|
41
|
+
if (code < charCodes.colon) return true
|
|
42
|
+
if (code < charCodes.uppercaseA) return false
|
|
43
|
+
if (code <= charCodes.uppercaseZ) return true
|
|
44
|
+
if (code < charCodes.lowercaseA) return code === charCodes.underscore
|
|
45
|
+
if (code <= charCodes.lowercaseZ) return true
|
|
46
|
+
if (code <= 0xffff) {
|
|
47
|
+
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code))
|
|
48
|
+
}
|
|
49
|
+
return (
|
|
50
|
+
isInAstralSet(code, astralIdentifierStartCodes) ||
|
|
51
|
+
isInAstralSet(code, astralIdentifierCodes)
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function isIdentifierName(name) {
|
|
56
|
+
let isFirst = true
|
|
57
|
+
for (let i = 0, len = name.length; i < len; ++i) {
|
|
58
|
+
let cp = name.charCodeAt(i)
|
|
59
|
+
if ((cp & 0xfc00) === 0xd800 && i + 1 < len) {
|
|
60
|
+
const trail = name.charCodeAt(++i)
|
|
61
|
+
if ((trail & 0xfc00) === 0xdc00) {
|
|
62
|
+
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (isFirst) {
|
|
66
|
+
isFirst = false
|
|
67
|
+
if (!isIdentifierStart(cp)) {
|
|
68
|
+
return false
|
|
69
|
+
}
|
|
70
|
+
} else if (!isIdentifierChar(cp)) {
|
|
71
|
+
return false
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return !isFirst
|
|
75
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { detectDefinesOrRequires, updateAmdDeps } from './amd'
|
|
2
|
+
import { transformEsmToAmd } from './esm'
|
|
3
|
+
|
|
4
|
+
export default function transformModules(program, options) {
|
|
5
|
+
const amds = detectDefinesOrRequires(program)
|
|
6
|
+
const { length } = amds
|
|
7
|
+
if (length) {
|
|
8
|
+
options.amd = true
|
|
9
|
+
if (options.resolvePath) {
|
|
10
|
+
for (const amd of amds) {
|
|
11
|
+
options.updated |= updateAmdDeps(amd, options)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
} else {
|
|
15
|
+
transformEsmToAmd(program, options)
|
|
16
|
+
options.updated = true
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const reservedWords = {
|
|
2
|
+
keyword: [
|
|
3
|
+
'break',
|
|
4
|
+
'case',
|
|
5
|
+
'catch',
|
|
6
|
+
'continue',
|
|
7
|
+
'debugger',
|
|
8
|
+
'default',
|
|
9
|
+
'do',
|
|
10
|
+
'else',
|
|
11
|
+
'finally',
|
|
12
|
+
'for',
|
|
13
|
+
'function',
|
|
14
|
+
'if',
|
|
15
|
+
'return',
|
|
16
|
+
'switch',
|
|
17
|
+
'throw',
|
|
18
|
+
'try',
|
|
19
|
+
'var',
|
|
20
|
+
'const',
|
|
21
|
+
'while',
|
|
22
|
+
'with',
|
|
23
|
+
'new',
|
|
24
|
+
'this',
|
|
25
|
+
'super',
|
|
26
|
+
'class',
|
|
27
|
+
'extends',
|
|
28
|
+
'export',
|
|
29
|
+
'import',
|
|
30
|
+
'null',
|
|
31
|
+
'true',
|
|
32
|
+
'false',
|
|
33
|
+
'in',
|
|
34
|
+
'instanceof',
|
|
35
|
+
'typeof',
|
|
36
|
+
'void',
|
|
37
|
+
'delete'
|
|
38
|
+
],
|
|
39
|
+
strict: [
|
|
40
|
+
'implements',
|
|
41
|
+
'interface',
|
|
42
|
+
'let',
|
|
43
|
+
'package',
|
|
44
|
+
'private',
|
|
45
|
+
'protected',
|
|
46
|
+
'public',
|
|
47
|
+
'static',
|
|
48
|
+
'yield'
|
|
49
|
+
],
|
|
50
|
+
strictBind: ['eval', 'arguments']
|
|
51
|
+
}
|
|
52
|
+
const keywords = new Set(reservedWords.keyword)
|
|
53
|
+
const reservedWordsStrictSet = new Set(reservedWords.strict)
|
|
54
|
+
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind)
|
|
55
|
+
|
|
56
|
+
export function isReservedWord(word, inModule) {
|
|
57
|
+
return inModule && word === 'await' || word === 'enum';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function isStrictReservedWord(word, inModule) {
|
|
61
|
+
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function isStrictBindOnlyReservedWord(word) {
|
|
65
|
+
return reservedWordsStrictBindSet.has(word)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function isStrictBindReservedWord(word, inModule) {
|
|
69
|
+
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function isKeyword(word) {
|
|
73
|
+
return keywords.has(word)
|
|
74
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isIdentifierName } from './identifier'
|
|
2
|
+
import { isKeyword, isStrictReservedWord } from './keywords'
|
|
3
|
+
|
|
4
|
+
export function isValidIdentifier(name, reserved = true) {
|
|
5
|
+
if (typeof name !== 'string') return false
|
|
6
|
+
if (reserved && (isKeyword(name) || isStrictReservedWord(name, true))) return false
|
|
7
|
+
return isIdentifierName(name)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Checks an anonymous import.
|
|
11
|
+
export function isAnonymousImport(importNode) {
|
|
12
|
+
// import "some"
|
|
13
|
+
return importNode.specifiers.length === 0
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Checks a default import.
|
|
17
|
+
export function isImportDefault(importNode) {
|
|
18
|
+
// import some from "some"
|
|
19
|
+
return importNode.specifiers.length === 1 &&
|
|
20
|
+
importNode.specifiers[0].type === 'ImportDefaultSpecifier'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Checks importing all named exports to an object.
|
|
24
|
+
export function isImportAllAs(importNode) {
|
|
25
|
+
// import * as some from "some"
|
|
26
|
+
return importNode.specifiers.length === 1 &&
|
|
27
|
+
importNode.specifiers[0].type !== 'ImportDefaultSpecifier' &&
|
|
28
|
+
!importNode.specifiers[0].imported
|
|
29
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* global require */
|
|
2
|
+
|
|
3
|
+
let writeText
|
|
4
|
+
|
|
5
|
+
// Initialise the writeText variable with a function to write to a file.
|
|
6
|
+
/* istanbul ignore if */
|
|
7
|
+
if (!(typeof window !== 'undefined' && window.navigator && window.document)) {
|
|
8
|
+
const { writeFileSync, mkdirSync } = require.nodeRequire ? require.nodeRequire('fs') : require('fs')
|
|
9
|
+
const { dirname } = require.nodeRequire ? require.nodeRequire('path') : require('path')
|
|
10
|
+
writeText = (path, content) => {
|
|
11
|
+
mkdirSync(dirname(path), { recursive: true })
|
|
12
|
+
writeFileSync(path, content)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default writeText
|