mirror of
https://github.com/actions/configure-pages.git
synced 2026-03-31 02:24:52 +00:00
Add support for indirect default export declarations
This commit is contained in:
@@ -56,14 +56,32 @@ class ConfigParser {
|
|||||||
// Return the configuration object or null.
|
// Return the configuration object or null.
|
||||||
findConfigurationObject(ast) {
|
findConfigurationObject(ast) {
|
||||||
// Try to find a default export
|
// Try to find a default export
|
||||||
var defaultExport = ast.body.find(
|
var defaultExport = ast.body.find(node => node.type === 'ExportDefaultDeclaration')
|
||||||
node => node.type === 'ExportDefaultDeclaration' && node.declaration.type === 'ObjectExpression'
|
|
||||||
)
|
// Direct default export
|
||||||
if (defaultExport) {
|
if (defaultExport && defaultExport.declaration.type === 'ObjectExpression') {
|
||||||
core.info('Found configuration object in default export declaration')
|
core.info('Found configuration object in direct default export declaration')
|
||||||
return defaultExport.declaration
|
return defaultExport.declaration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Indirect default export
|
||||||
|
else if (defaultExport && defaultExport.declaration.type === 'Identifier') {
|
||||||
|
const identifierName = defaultExport && defaultExport.declaration.name
|
||||||
|
const identifierDefinition = ast.body.find(
|
||||||
|
node =>
|
||||||
|
node.type === 'VariableDeclaration' &&
|
||||||
|
node.declarations.length == 1 &&
|
||||||
|
node.declarations[0].type === 'VariableDeclarator' &&
|
||||||
|
node.declarations[0].id.type === 'Identifier' &&
|
||||||
|
node.declarations[0].id.name === identifierName &&
|
||||||
|
node.declarations[0].init.type === 'ObjectExpression'
|
||||||
|
)
|
||||||
|
if (identifierDefinition) {
|
||||||
|
core.info('Found configuration object in indirect default export declaration')
|
||||||
|
return identifierDefinition.declarations[0].init
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Try to find a module export
|
// Try to find a module export
|
||||||
var moduleExport = ast.body.find(
|
var moduleExport = ast.body.find(
|
||||||
node =>
|
node =>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ const cases = [
|
|||||||
//
|
//
|
||||||
// Default export
|
// Default export
|
||||||
//
|
//
|
||||||
|
|
||||||
{
|
{
|
||||||
property: 'property',
|
property: 'property',
|
||||||
source: `export default {}`,
|
source: `export default {}`,
|
||||||
@@ -90,6 +89,30 @@ const cases = [
|
|||||||
expected: `export default { a2: false, a1: { a2: "value", a3: [12]}}`
|
expected: `export default { a2: false, a1: { a2: "value", a3: [12]}}`
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// Indirect default export
|
||||||
|
//
|
||||||
|
{
|
||||||
|
property: 'property',
|
||||||
|
source: `const config = {}; export default config`,
|
||||||
|
expected: `const config = { property: "value"}; export default config`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: 'property',
|
||||||
|
source: `var config = {}; export default config`,
|
||||||
|
expected: `var config = { property: "value"}; export default config`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: 'a.b.c',
|
||||||
|
source: `var config = {}; export default config`,
|
||||||
|
expected: `var config = { a: { b: { c: "value"}}}; export default config`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: 'a.b.c',
|
||||||
|
source: `var config = { a: { b: [], c: "hello"}}; export default config`,
|
||||||
|
expected: `var config = { a: { b: { c: "value"}, c: "hello"}}; export default config`
|
||||||
|
},
|
||||||
|
|
||||||
//
|
//
|
||||||
// Direct module exports
|
// Direct module exports
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user