Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F85233072
Generator.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Sep 27, 16:49
Size
4 KB
Mime Type
text/x-c++
Expires
Sun, Sep 29, 16:49 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21146074
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
Generator.js
View Options
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict"
;
/** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("./ChunkGraph")} ChunkGraph */
/** @typedef {import("./Compilation")} Compilation */
/** @typedef {import("./ConcatenationScope")} ConcatenationScope */
/** @typedef {import("./DependencyTemplate")} DependencyTemplate */
/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
/** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
/** @typedef {import("./ModuleGraph")} ModuleGraph */
/** @typedef {import("./NormalModule")} NormalModule */
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
/** @typedef {import("./util/Hash")} Hash */
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
/**
* @typedef {Object} GenerateContext
* @property {DependencyTemplates} dependencyTemplates mapping from dependencies to templates
* @property {RuntimeTemplate} runtimeTemplate the runtime template
* @property {ModuleGraph} moduleGraph the module graph
* @property {ChunkGraph} chunkGraph the chunk graph
* @property {Set<string>} runtimeRequirements the requirements for runtime
* @property {RuntimeSpec} runtime the runtime
* @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
* @property {string} type which kind of code should be generated
*/
/**
* @typedef {Object} UpdateHashContext
* @property {NormalModule} module the module
* @property {ChunkGraph} chunkGraph
* @property {RuntimeSpec} runtime
*/
/**
*
*/
class
Generator
{
static
byType
(
map
)
{
return
new
ByTypeGenerator
(
map
);
}
/* istanbul ignore next */
/**
* @abstract
* @param {NormalModule} module fresh module
* @returns {Set<string>} available types (do not mutate)
*/
getTypes
(
module
)
{
const
AbstractMethodError
=
require
(
"./AbstractMethodError"
);
throw
new
AbstractMethodError
();
}
/* istanbul ignore next */
/**
* @abstract
* @param {NormalModule} module the module
* @param {string=} type source type
* @returns {number} estimate size of the module
*/
getSize
(
module
,
type
)
{
const
AbstractMethodError
=
require
(
"./AbstractMethodError"
);
throw
new
AbstractMethodError
();
}
/* istanbul ignore next */
/**
* @abstract
* @param {NormalModule} module module for which the code should be generated
* @param {GenerateContext} generateContext context for generate
* @returns {Source} generated code
*/
generate
(
module
,
{
dependencyTemplates
,
runtimeTemplate
,
moduleGraph
,
type
}
)
{
const
AbstractMethodError
=
require
(
"./AbstractMethodError"
);
throw
new
AbstractMethodError
();
}
/**
* @param {NormalModule} module module for which the bailout reason should be determined
* @param {ConcatenationBailoutReasonContext} context context
* @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
*/
getConcatenationBailoutReason
(
module
,
context
)
{
return
`
Module
Concatenation
is
not
implemented
for
$
{
this
.
constructor
.
name
}
`
;
}
/**
* @param {Hash} hash hash that will be modified
* @param {UpdateHashContext} updateHashContext context for updating hash
*/
updateHash
(
hash
,
{
module
,
runtime
})
{
// no nothing
}
}
class
ByTypeGenerator
extends
Generator
{
constructor
(
map
)
{
super
();
this
.
map
=
map
;
this
.
_types
=
new
Set
(
Object
.
keys
(
map
));
}
/**
* @param {NormalModule} module fresh module
* @returns {Set<string>} available types (do not mutate)
*/
getTypes
(
module
)
{
return
this
.
_types
;
}
/**
* @param {NormalModule} module the module
* @param {string=} type source type
* @returns {number} estimate size of the module
*/
getSize
(
module
,
type
)
{
const
t
=
type
||
"javascript"
;
const
generator
=
this
.
map
[
t
];
return
generator
?
generator
.
getSize
(
module
,
t
)
:
0
;
}
/**
* @param {NormalModule} module module for which the code should be generated
* @param {GenerateContext} generateContext context for generate
* @returns {Source} generated code
*/
generate
(
module
,
generateContext
)
{
const
type
=
generateContext
.
type
;
const
generator
=
this
.
map
[
type
];
if
(
!
generator
)
{
throw
new
Error
(
`
Generator
.
byType
:
no
generator
specified
for
$
{
type
}
`
);
}
return
generator
.
generate
(
module
,
generateContext
);
}
}
module
.
exports
=
Generator
;
Event Timeline
Log In to Comment