Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion build/generateExterns.js
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,50 @@ function generateExterns(names, inputPath) {
};
}

/**
* Generate a typedef for the root shaka namespace based on exported symbols.
*
* @param {!Set<string>} names
* @return {string}
*/
function generateShakaNamespaceTypedef(names) {
// Collect first-level members under shaka.*
const members = new Map();

for (const name of names) {
if (!name.startsWith('shaka.')) {
continue;
}

const parts = name.split('.');
if (parts.length < 2) {
continue;
}

const member = parts[1];
if (!members.has(member)) {
members.set(member, `shaka.${member}`);
}
}

if (!members.size) {
return '';
}

const lines = Array.from(members.entries())
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, value]) => ` * ${key}: typeof ${value},`);

return (
'/**\n' +
' * @typedef {{\n' +
lines.join('\n') + '\n' +
' * }}\n' +
' * @suppress {duplicate}\n' +
' */\n' +
'var shaka;\n\n'
);
}

/**
* Generate externs from exported code.
Expand Down Expand Up @@ -930,6 +974,9 @@ function main(args) {
// Get license header.
const licenseHeader = fs.readFileSync(__dirname + '/license-header', 'utf-8');

// Shaka type definition
const shakaTypedef = generateShakaNamespaceTypedef(names);

// Output generated externs, with an appropriate header.
fs.writeFileSync(outputPath,
licenseHeader +
Expand All @@ -940,7 +987,7 @@ function main(args) {
' * errors with the namespace being declared both here and by\n' +
' * goog.provide in the library.\n' +
' */\n\n' +
namespaceDeclarations.join('') + '\n' + externs);
namespaceDeclarations.join('') + '\n' + shakaTypedef + externs);
}


Expand Down
26 changes: 15 additions & 11 deletions demo/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -1099,15 +1099,17 @@ shakaDemo.Main = class {
uncompiledLink.title = 'requires a newer browser';
}

if (shaka.log) {
// shaka.log only exists in debug/uncompiled builds.
const log = shaka['log'];
if (log) {
if (params.has('vv')) {
shaka.log.setLevel(shaka.log.Level.V2);
log.setLevel(log.Level.V2);
} else if (params.has('v')) {
shaka.log.setLevel(shaka.log.Level.V1);
log.setLevel(log.Level.V1);
} else if (params.has('debug')) {
shaka.log.setLevel(shaka.log.Level.DEBUG);
log.setLevel(log.Level.DEBUG);
} else if (params.has('info')) {
shaka.log.setLevel(shaka.log.Level.INFO);
log.setLevel(log.Level.INFO);
}
}
}
Expand Down Expand Up @@ -1649,18 +1651,20 @@ shakaDemo.Main = class {

// MAX_LOG_LEVEL is the default starting log level. Only save the log level
// if it's different from this default.
if (shaka.log && shaka.log.currentLevel != shaka.log.MAX_LOG_LEVEL) {
switch (shaka.log.currentLevel) {
case shaka.log.Level.INFO:
// shaka.log only exists in debug/uncompiled builds.
const log = shaka['log'];
if (log && log.currentLevel != log.MAX_LOG_LEVEL) {
switch (log.currentLevel) {
case log.Level.INFO:
params.push('info');
break;
case shaka.log.Level.DEBUG:
case log.Level.DEBUG:
params.push('debug');
break;
case shaka.log.Level.V2:
case log.Level.V2:
params.push('vv');
break;
case shaka.log.Level.V1:
case log.Level.V1:
params.push('v');
break;
}
Expand Down
Loading