# NAME
JavaScript::Const::Exporter - Convert exported Perl constants to JavaScript
# VERSION
version v0.1.4
# SYNOPSIS
Support a project has a module that defines constants for export:
```perl
package MyApp::Const;
use Exporter qw/ import /;
our @EXPORT_OK = qw/ A B /;
use constant A => 123;
use constant B => "Hello";
```
Then you can export these constants to JavaScript for use with a
web-application's front-end:
```perl
use JavaScript::Const::Exporter;
my $exporter = JavaScript::Const::Exporter->new(
module => 'MyApp::Const',
constants => [qw/ A B /],
);
my $js = $exporter->process
```
This will return a string with the JavaScript code:
```
const A = 123;
const B = "Hello";
```
# DESCRIPTION
This module allows you to extract a list of exported constants from a
Perl module and generate JavaScript that can be included in a web
application, thus allowing you to share constants between Perl and
JavaScript.
# ATTRIBUTES
## use\_var
When true, these will be defined as "var" variables instead of "const"
values.
## module
This is the (required) name of the Perl module to include.
## constants
This is an array reference of symbols or export tags in the
["module"](#module)'s namespace to export.
If it is omitted (not recommened), then it will look at the modules
`@EXPORT_OK` list an export all modules.
Any subroutine can be included, however if the subroutine is not not a
coderef constant, e.g. created by [constant](
https://metacpan.org/pod/constant), then it will emit a
warning.
You must include sigils of constants. However, the exported JavaScript
will omit them, e.g. `$NAME` will export JavaScript that specifies a
constant called `NAME`.
## has\_constants
True if there are ["constants"](#constants).
## include
This is an array reference of paths to add to your `@INC`, when the
["module"](#module) is not in the default path.
## has\_include
True if there are included paths.
## pretty
When true, pretty-print any arrays or objects.
## stash
This is a [Package::Stash](
https://metacpan.org/pod/Package::Stash) for the namespace. This is intended for
internal use.
## tags
This is the content of the module's `%EXPORT_TAGS`. This is intended
for internal use.
## json
This is the JSON encoder. This is intended for internal use.
# METHODS
## process
This method attempts to retrieve the symbols from the module and
generate the JavaScript.
On success, it will return a string containing the JavaScript.
# KNOWN ISSUES
When using with [Const::Fast::Exporter](
https://metacpan.org/pod/Const::Fast::Exporter)-based modules, you must
explicitly list all of the constants to be exported, as that doesn't
provide an `@EXPORT_OK` variable that can be queried.
# SEE ALSO
[Const::Exporter](
https://metacpan.org/pod/Const::Exporter)
# SOURCE
The development version is on github at [
https://github.com/robrwo/JavaScript-Const-Exporter](
https://github.com/robrwo/JavaScript-Const-Exporter)
and may be cloned from [git://github.com/robrwo/JavaScript-Const-Exporter.git](git://github.com/robrwo/JavaScript-Const-Exporter.git)
# BUGS
Please report any bugs or feature requests on the bugtracker website
[
https://github.com/robrwo/JavaScript-Const-Exporter/issues](
https://github.com/robrwo/JavaScript-Const-Exporter/issues)
When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.
# AUTHOR
Robert Rothenberg <
[email protected]>
# COPYRIGHT AND LICENSE
This software is Copyright (c) 2020 by Robert Rothenberg.
This is free software, licensed under:
```
The Artistic License 2.0 (GPL Compatible)
```