conjur-asset-ui 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.git-hooks/pre_commit/ensure_livescript_compiled.rb +31 -0
- data/.git-hooks/pre_commit/trailing_whitespace.rb +26 -0
- data/.gitignore +20 -0
- data/.overcommit.yml +5 -0
- data/.project +18 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +41 -0
- data/Rakefile +3 -0
- data/compile_ls +6 -0
- data/conjur-asset-ui.gemspec +37 -0
- data/lib/conjur/command/ui.rb +46 -0
- data/lib/conjur/webserver/api_proxy.rb +94 -0
- data/lib/conjur/webserver/authorize.rb +28 -0
- data/lib/conjur/webserver/conjur_info.rb +33 -0
- data/lib/conjur/webserver/home.rb +42 -0
- data/lib/conjur/webserver/login.rb +57 -0
- data/lib/conjur/webserver/renderer.rb +34 -0
- data/lib/conjur/webserver/server.rb +113 -0
- data/lib/conjur-asset-ui-version.rb +7 -0
- data/lib/conjur-asset-ui.rb +7 -0
- data/livescript/views/audit.ls +136 -0
- data/public/_client_code.html +42 -0
- data/public/_client_libs.html +24 -0
- data/public/css/bootstrap.css +7 -0
- data/public/css/styles.less +461 -0
- data/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/fonts/glyphicons-halflings-regular.svg +229 -0
- data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/images/conjur-logo.svg +26 -0
- data/public/images/icon-client-pc.svg +12 -0
- data/public/images/icon-environment.png +0 -0
- data/public/images/icon-person.svg +12 -0
- data/public/images/icon-policy.png +0 -0
- data/public/images/icon-resource.png +0 -0
- data/public/images/icon-service-dots.svg +13 -0
- data/public/images/icon-variable.png +0 -0
- data/public/index.html.erb +62 -0
- data/public/js/init.js +107 -0
- data/public/js/lib/JSXTransformer.js +10862 -0
- data/public/js/lib/async.js +958 -0
- data/public/js/lib/backbone.js +2 -0
- data/public/js/lib/bootstrap.js +6 -0
- data/public/js/lib/date.extensions.js +141 -0
- data/public/js/lib/less.js +16 -0
- data/public/js/lib/moment.js +7768 -0
- data/public/js/lib/pace.js +2 -0
- data/public/js/lib/prelude-browser-min.js +1 -0
- data/public/js/lib/react-bootstrap.js +5346 -0
- data/public/js/lib/react-bootstrap.min.js +4 -0
- data/public/js/lib/sorted-set.no-require.js +1170 -0
- data/public/js/lib/sorted-set.no-require.js.txt +6 -0
- data/public/js/lib/underscore-min.js +6 -0
- data/public/js/lib/underscore.string.min.js +1 -0
- data/public/js/main.js +57 -0
- data/public/js/models/groupRecord.js +70 -0
- data/public/js/models/hostRecord.js +55 -0
- data/public/js/models/layerRecord.js +77 -0
- data/public/js/models/namespace.js +10 -0
- data/public/js/models/policyList.js +14 -0
- data/public/js/models/policyRecord.js +54 -0
- data/public/js/models/record.js +85 -0
- data/public/js/models/resourceList.js +69 -0
- data/public/js/models/userList.js +20 -0
- data/public/js/models/userRecord.js +70 -0
- data/public/js/models/variableList.js +16 -0
- data/public/js/models/variableRecord.js +73 -0
- data/public/js/routers.js +205 -0
- data/public/js/views/annotations.js +36 -0
- data/public/js/views/audit.js +363 -0
- data/public/js/views/dashboard.js +67 -0
- data/public/js/views/generic.js +115 -0
- data/public/js/views/group.js +61 -0
- data/public/js/views/groups.js +30 -0
- data/public/js/views/host.js +64 -0
- data/public/js/views/hosts.js +30 -0
- data/public/js/views/layer.js +92 -0
- data/public/js/views/layers.js +30 -0
- data/public/js/views/mixins/search.js +15 -0
- data/public/js/views/mixins/tabs.js +114 -0
- data/public/js/views/namespaces.js +40 -0
- data/public/js/views/navSearch.js +25 -0
- data/public/js/views/owned.js +178 -0
- data/public/js/views/permissions.js +188 -0
- data/public/js/views/policies.js +28 -0
- data/public/js/views/policy.js +43 -0
- data/public/js/views/resource.js +39 -0
- data/public/js/views/role.js +41 -0
- data/public/js/views/searchResults.js +145 -0
- data/public/js/views/time.js +14 -0
- data/public/js/views/user.js +68 -0
- data/public/js/views/users.js +31 -0
- data/public/js/views/variable.js +70 -0
- data/public/js/views/variables.js +30 -0
- data/spec/javascripts/helpers/.gitkeep +0 -0
- data/spec/javascripts/support/jasmine.yml +112 -0
- data/spec/javascripts/support/jasmine_helper.rb +22 -0
- data/spec/javascripts/support/run.html.erb +23 -0
- data/spec/javascripts/views/AuditSpec.js +22 -0
- data/spec/javascripts/views/AuditSpec.ls +18 -0
- data/vendor/prelude-ls/.gitignore +2 -0
- data/vendor/prelude-ls/.travis.yml +3 -0
- data/vendor/prelude-ls/CHANGELOG.md +81 -0
- data/vendor/prelude-ls/LICENSE +22 -0
- data/vendor/prelude-ls/Makefile +50 -0
- data/vendor/prelude-ls/README.md +15 -0
- data/vendor/prelude-ls/browser/prelude-browser-min.js +1 -0
- data/vendor/prelude-ls/browser/prelude-browser.js +1172 -0
- data/vendor/prelude-ls/lib/Func.js +40 -0
- data/vendor/prelude-ls/lib/List.js +602 -0
- data/vendor/prelude-ls/lib/Num.js +129 -0
- data/vendor/prelude-ls/lib/Obj.js +153 -0
- data/vendor/prelude-ls/lib/Str.js +68 -0
- data/vendor/prelude-ls/lib/index.js +164 -0
- data/vendor/prelude-ls/package.json +50 -0
- data/vendor/prelude-ls/package.ls +46 -0
- data/vendor/prelude-ls/src/Func.ls +17 -0
- data/vendor/prelude-ls/src/List.ls +299 -0
- data/vendor/prelude-ls/src/Num.ls +83 -0
- data/vendor/prelude-ls/src/Obj.ls +61 -0
- data/vendor/prelude-ls/src/Str.ls +32 -0
- data/vendor/prelude-ls/src/index.ls +56 -0
- data/vendor/prelude-ls/test/Func.ls +36 -0
- data/vendor/prelude-ls/test/List.ls +751 -0
- data/vendor/prelude-ls/test/Num.ls +258 -0
- data/vendor/prelude-ls/test/Obj.ls +145 -0
- data/vendor/prelude-ls/test/Prelude.ls +49 -0
- data/vendor/prelude-ls/test/Str.ls +208 -0
- data/vendor/prelude-ls/test/browser.html +5 -0
- metadata +369 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
/** @jsx React.DOM */
|
2
|
+
|
3
|
+
//var ReactBootstrap=root.ReactBootstrap;
|
4
|
+
var TabbedArea = ReactBootstrap.TabbedArea;
|
5
|
+
var TabPane = ReactBootstrap.TabPane;
|
6
|
+
|
7
|
+
var User = React.createClass({
|
8
|
+
mixins: [conjur.views.mixins.Tab],
|
9
|
+
render: function(){
|
10
|
+
var user = this.props.data.user;
|
11
|
+
|
12
|
+
// TODO: refactor
|
13
|
+
// TODO: show public keys
|
14
|
+
// TODO: actions menu (e.g. 'upload public key', 'add annotation')
|
15
|
+
// TODO: memberships panel
|
16
|
+
var overview_tab =
|
17
|
+
<TabPane key="overview" tab="Overview">
|
18
|
+
<dl className="dl-horizontal">
|
19
|
+
<dt>Created by</dt>
|
20
|
+
<dd><RoleLink id={user.userid}/></dd>
|
21
|
+
<dt>Owner</dt>
|
22
|
+
<dd><RoleLink id={user.ownerid}/></dd>
|
23
|
+
<dt>Uidnumber</dt>
|
24
|
+
<dd>{user.uidnumber}</dd>
|
25
|
+
</dl>
|
26
|
+
</TabPane>;
|
27
|
+
|
28
|
+
var audit_tab=
|
29
|
+
<TabPane key="audit" tab="Recent Activity">
|
30
|
+
<div className="audit auditUser">
|
31
|
+
<AuditBox roles={[user.roleid]} resources={[user.resource_identifier]} tabview={true}/>
|
32
|
+
</div>
|
33
|
+
</TabPane>;
|
34
|
+
|
35
|
+
var pubkeys_list = this.props.data.pubkeys.map(function(k) {
|
36
|
+
var tokens = k.split(" ");
|
37
|
+
return <li className="list-group-item list-group-item-noborder">
|
38
|
+
<span className="badge">{tokens[0]}</span>
|
39
|
+
{tokens[tokens.length-1]}
|
40
|
+
</li>
|
41
|
+
});
|
42
|
+
var pubkeys_tab = <TabPane key="pubkeys" tab={get_tabname("Public Keys", this.props.data.pubkeys)}>
|
43
|
+
<div className="pubkeys pubkeysUser">
|
44
|
+
<ul className="list-group">
|
45
|
+
{pubkeys_list}
|
46
|
+
</ul>
|
47
|
+
</div>
|
48
|
+
</TabPane>;
|
49
|
+
|
50
|
+
var permissions_tab = this.permissions_tab(user.roleid);
|
51
|
+
var memberships_tab = this.memberships_tab(user.roleid);
|
52
|
+
var annotations_tab = this.annotations_tab();
|
53
|
+
var owned_tab = this.owned_tab();
|
54
|
+
|
55
|
+
var tabs=_.compact([overview_tab, owned_tab, memberships_tab,
|
56
|
+
permissions_tab, annotations_tab, pubkeys_tab, audit_tab]);
|
57
|
+
|
58
|
+
|
59
|
+
return (
|
60
|
+
<div className="user">
|
61
|
+
<h2> User {user.login} </h2>
|
62
|
+
<TabbedArea defaultActiveKey="overview">
|
63
|
+
{tabs}
|
64
|
+
</TabbedArea>
|
65
|
+
</div>
|
66
|
+
);
|
67
|
+
}
|
68
|
+
});
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/** @jsx React.DOM */
|
2
|
+
|
3
|
+
(function(conjur, React) {
|
4
|
+
'use strict';
|
5
|
+
|
6
|
+
var GenericList = conjur.views.GenericList;
|
7
|
+
|
8
|
+
var UserBox = this.UserBox = React.createClass({
|
9
|
+
// no more external manipulation of state
|
10
|
+
//getInitialState: function() {
|
11
|
+
// return { currentNamespace: "", members: [] };
|
12
|
+
//},
|
13
|
+
render: function() {
|
14
|
+
// <NamespaceFilter currentNamespace={this.props.currentNamespace}
|
15
|
+
// namespaces={this.props.data.namespaces} />
|
16
|
+
return (
|
17
|
+
<div className="userBox">
|
18
|
+
<div className="userList">
|
19
|
+
<h2>Users</h2>
|
20
|
+
<GenericList data={{kind: 'users', members: this.props.data.members}} />
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
);
|
24
|
+
}
|
25
|
+
});
|
26
|
+
|
27
|
+
}).bind(conjur.views)
|
28
|
+
(
|
29
|
+
conjur,
|
30
|
+
React
|
31
|
+
);
|
@@ -0,0 +1,70 @@
|
|
1
|
+
/** @jsx React.DOM */
|
2
|
+
|
3
|
+
var Variable = React.createClass({
|
4
|
+
mixins: [conjur.views.mixins.Tab],
|
5
|
+
render: function() {
|
6
|
+
var updaters = this.props.data.updaters.map(function (member) {
|
7
|
+
return <li className="list-group-item list-group-item-noborder">
|
8
|
+
<RoleLink id={member} />
|
9
|
+
</li>
|
10
|
+
}.bind(this));
|
11
|
+
var fetchers = this.props.data.fetchers.map(function (member) {
|
12
|
+
return <li className="list-group-item list-group-item-noborder">
|
13
|
+
<RoleLink id={member} />
|
14
|
+
</li>
|
15
|
+
}.bind(this));
|
16
|
+
var resourceId = [ conjur.app.configuration.account, 'variable', this.props.data.variable.id ].join(':');
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
var overview_tab =
|
22
|
+
<TabPane key="overview" tab="Overview">
|
23
|
+
<dl className="dl-horizontal">
|
24
|
+
<dt>Owner</dt>
|
25
|
+
<dd><RoleLink id={this.props.data.variable.ownerid}/></dd>
|
26
|
+
<dt>Created by</dt>
|
27
|
+
<dd><RoleLink id={this.props.data.variable.userid}/></dd>
|
28
|
+
<dt>MIME type</dt>
|
29
|
+
<dd>{this.props.data.variable.mime_type}</dd>
|
30
|
+
<dt>Kind</dt>
|
31
|
+
<dd>{this.props.data.variable.kind}</dd>
|
32
|
+
<dt>Versions</dt>
|
33
|
+
<dd>{this.props.data.variable.version_count}</dd>
|
34
|
+
</dl>
|
35
|
+
</TabPane>;
|
36
|
+
var updaters_tab =
|
37
|
+
<TabPane key="updaters" tab={get_tabname("Updaters",updaters)}>
|
38
|
+
<ul className="list-group">
|
39
|
+
{updaters}
|
40
|
+
</ul>
|
41
|
+
</TabPane>;
|
42
|
+
var fetchers_tab =
|
43
|
+
<TabPane key="fetchers" tab={get_tabname("Fetchers",fetchers)}>
|
44
|
+
<ul className="list-group">
|
45
|
+
{fetchers}
|
46
|
+
</ul>
|
47
|
+
</TabPane>;
|
48
|
+
var annotations_tab = this.annotations_tab();
|
49
|
+
|
50
|
+
var audit_tab =
|
51
|
+
<TabPane key="audit" tab="Recent Activity">
|
52
|
+
<div className="audit auditHost">
|
53
|
+
<AuditBox resources={[resourceId]} tabview={true}/>
|
54
|
+
</div>
|
55
|
+
</TabPane>;
|
56
|
+
|
57
|
+
|
58
|
+
var tabs = _.compact([ overview_tab, updaters_tab, fetchers_tab,
|
59
|
+
annotations_tab, audit_tab ]);
|
60
|
+
|
61
|
+
return (
|
62
|
+
<div className="variable">
|
63
|
+
<h2>Variable {this.props.data.variable.id}</h2>
|
64
|
+
<TabbedArea defaultActiveKey="overview">
|
65
|
+
{tabs}
|
66
|
+
</TabbedArea>
|
67
|
+
</div>
|
68
|
+
);
|
69
|
+
}
|
70
|
+
});
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/** @jsx React.DOM */
|
2
|
+
|
3
|
+
(function(conjur, React) {
|
4
|
+
'use strict';
|
5
|
+
|
6
|
+
var GenericList = conjur.views.GenericList;
|
7
|
+
|
8
|
+
var VariableBox = this.VariableBox = React.createClass({
|
9
|
+
// getInitialState: function() {
|
10
|
+
// return { currentNamespace: "", members: [] };
|
11
|
+
// },
|
12
|
+
render: function() {
|
13
|
+
// <NamespaceFilter currentNamespace={this.props.currentNamespace}
|
14
|
+
// namespaces={this.props.data.namespaces} />
|
15
|
+
return (
|
16
|
+
<div className="groupBox">
|
17
|
+
<div className="groupList">
|
18
|
+
<h2>Variables</h2>
|
19
|
+
<GenericList data={{kind: 'variables', members: this.props.data.members}} />
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
}).bind(conjur.views)
|
27
|
+
(
|
28
|
+
conjur,
|
29
|
+
React
|
30
|
+
);
|
File without changes
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# src_files
|
2
|
+
#
|
3
|
+
# Return an array of filepaths relative to src_dir to include before jasmine specs.
|
4
|
+
# Default: []
|
5
|
+
#
|
6
|
+
# EXAMPLE:
|
7
|
+
#
|
8
|
+
# src_files:
|
9
|
+
# - lib/source1.js
|
10
|
+
# - lib/source2.js
|
11
|
+
# - dist/**/*.js
|
12
|
+
#
|
13
|
+
src_files:
|
14
|
+
- public/js/**/*.js
|
15
|
+
|
16
|
+
# stylesheets
|
17
|
+
#
|
18
|
+
# Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
|
19
|
+
# Default: []
|
20
|
+
#
|
21
|
+
# EXAMPLE:
|
22
|
+
#
|
23
|
+
# stylesheets:
|
24
|
+
# - css/style.css
|
25
|
+
# - stylesheets/*.css
|
26
|
+
#
|
27
|
+
stylesheets:
|
28
|
+
- stylesheets/**/*.css
|
29
|
+
|
30
|
+
# helpers
|
31
|
+
#
|
32
|
+
# Return an array of filepaths relative to spec_dir to include before jasmine specs.
|
33
|
+
# Default: ["helpers/**/*.js"]
|
34
|
+
#
|
35
|
+
# EXAMPLE:
|
36
|
+
#
|
37
|
+
# helpers:
|
38
|
+
# - helpers/**/*.js
|
39
|
+
#
|
40
|
+
helpers:
|
41
|
+
- 'helpers/**/*.js'
|
42
|
+
|
43
|
+
# spec_files
|
44
|
+
#
|
45
|
+
# Return an array of filepaths relative to spec_dir to include.
|
46
|
+
# Default: ["**/*[sS]pec.js"]
|
47
|
+
#
|
48
|
+
# EXAMPLE:
|
49
|
+
#
|
50
|
+
# spec_files:
|
51
|
+
# - **/*[sS]pec.js
|
52
|
+
#
|
53
|
+
spec_files:
|
54
|
+
- '**/*[sS]pec.js'
|
55
|
+
|
56
|
+
# src_dir
|
57
|
+
#
|
58
|
+
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
|
59
|
+
# Default: project root
|
60
|
+
#
|
61
|
+
# EXAMPLE:
|
62
|
+
#
|
63
|
+
# src_dir: public
|
64
|
+
#
|
65
|
+
src_dir: public
|
66
|
+
|
67
|
+
# spec_dir
|
68
|
+
#
|
69
|
+
# Spec directory path. Your spec_files must be returned relative to this path.
|
70
|
+
# Default: spec/javascripts
|
71
|
+
#
|
72
|
+
# EXAMPLE:
|
73
|
+
#
|
74
|
+
# spec_dir: spec/javascripts
|
75
|
+
#
|
76
|
+
spec_dir:
|
77
|
+
|
78
|
+
# spec_helper
|
79
|
+
#
|
80
|
+
# Ruby file that Jasmine server will require before starting.
|
81
|
+
# Returned relative to your root path
|
82
|
+
# Default spec/javascripts/support/jasmine_helper.rb
|
83
|
+
#
|
84
|
+
# EXAMPLE:
|
85
|
+
#
|
86
|
+
# spec_helper: spec/javascripts/support/jasmine_helper.rb
|
87
|
+
#
|
88
|
+
spec_helper: spec/javascripts/support/jasmine_helper.rb
|
89
|
+
|
90
|
+
# boot_dir
|
91
|
+
#
|
92
|
+
# Boot directory path. Your boot_files must be returned relative to this path.
|
93
|
+
# Default: Built in boot file
|
94
|
+
#
|
95
|
+
# EXAMPLE:
|
96
|
+
#
|
97
|
+
# boot_dir: spec/javascripts/support/boot
|
98
|
+
#
|
99
|
+
boot_dir:
|
100
|
+
|
101
|
+
# boot_files
|
102
|
+
#
|
103
|
+
# Return an array of filepaths relative to boot_dir to include in order to boot Jasmine
|
104
|
+
# Default: Built in boot file
|
105
|
+
#
|
106
|
+
# EXAMPLE
|
107
|
+
#
|
108
|
+
# boot_files:
|
109
|
+
# - '**/*.js'
|
110
|
+
#
|
111
|
+
boot_files:
|
112
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'conjur/webserver/renderer'
|
2
|
+
|
3
|
+
# use our own runner template
|
4
|
+
module Jasmine
|
5
|
+
def self.runner_template
|
6
|
+
File.read(File.join(File.dirname(__FILE__), "run.html.erb"))
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
Jasmine.configure do |config|
|
11
|
+
class << config
|
12
|
+
def renderer
|
13
|
+
@renderer ||= Conjur::WebServer::Renderer.new src_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing *a, &b
|
17
|
+
renderer.send(*a, &b)
|
18
|
+
rescue NoMethodError
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
2
|
+
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
3
|
+
<head>
|
4
|
+
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type"/>
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
6
|
+
<title>Jasmine suite</title>
|
7
|
+
<link rel="shortcut icon" type="image/png" href="/__images__/jasmine_favicon.png">
|
8
|
+
<% css_files.each do |css_file| %>
|
9
|
+
<link rel="stylesheet" href="<%= css_file %>" type="text/css" media="screen"/>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= client_libs %>
|
13
|
+
<%= client_code %>
|
14
|
+
|
15
|
+
</head>
|
16
|
+
<!-- TODO: turbolinks breaks spec filter links -->
|
17
|
+
<body data-no-turbolink>
|
18
|
+
<div id="jasmine_content"></div>
|
19
|
+
<% js_files.each do |js_file| %>
|
20
|
+
<script src="<%= js_file %>" type="text/javascript"></script>
|
21
|
+
<% end %>
|
22
|
+
</body>
|
23
|
+
</html>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// Generated by LiveScript 1.2.0
|
2
|
+
(function(){
|
3
|
+
var renderComponent;
|
4
|
+
renderComponent = React.renderComponent;
|
5
|
+
describe('AuditEntry', function(_){
|
6
|
+
return it('shows both role and resource on role checks', function(){
|
7
|
+
var role, resource, table, x$;
|
8
|
+
role = 'the-role';
|
9
|
+
resource = 'the-resource';
|
10
|
+
renderComponent(AuditEntry({
|
11
|
+
kind: 'role',
|
12
|
+
action: 'check',
|
13
|
+
role: "acct:rolkind:" + role,
|
14
|
+
resource: "acct:reskind:" + resource
|
15
|
+
}), table = document.createElement('table'));
|
16
|
+
x$ = expect(table.innerText);
|
17
|
+
x$.toContain(role);
|
18
|
+
x$.toContain(resource);
|
19
|
+
return x$;
|
20
|
+
});
|
21
|
+
});
|
22
|
+
}).call(this);
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{render-component} = React
|
2
|
+
|
3
|
+
describe \AuditEntry, (_)->
|
4
|
+
it 'shows both role and resource on role checks', ->
|
5
|
+
role = 'the-role'
|
6
|
+
resource = 'the-resource'
|
7
|
+
|
8
|
+
render-component do
|
9
|
+
AuditEntry do
|
10
|
+
kind: \role
|
11
|
+
action: \check
|
12
|
+
role: "acct:rolkind:#role"
|
13
|
+
resource: "acct:reskind:#resource"
|
14
|
+
table = document.create-element \table
|
15
|
+
|
16
|
+
expect table.inner-text
|
17
|
+
..to-contain role
|
18
|
+
..to-contain resource
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# 1.0.3
|
2
|
+
- build browser versions
|
3
|
+
|
4
|
+
# 1.0.2
|
5
|
+
- bug fix for `flatten` - slight change with bug fix, flattens arrays only, not array-like objects
|
6
|
+
|
7
|
+
# 1.0.1
|
8
|
+
- bug fixes for `drop-while` and `take-while`
|
9
|
+
|
10
|
+
# 1.0.0
|
11
|
+
* massive update - separated functions into separate modules
|
12
|
+
* functions do not accept multiple types anymore - use different versions in their respective modules in some cases (eg. `Obj.map`), or use `chars` or `values` in other cases to transform into a list
|
13
|
+
* objects are no longer transformed into functions, simply use `(obj.)` in LiveScript to do that
|
14
|
+
* browser version now using browserify - use `prelude = require('prelude-ls')`
|
15
|
+
* added `compact`, `split`, `flatten`, `difference`, `intersection`, `union`, `count-by`, `group-by`, `chars`, `unchars`, `apply`
|
16
|
+
* added `lists-to-obj` which takes a list of keys and list of values and zips them up into an object, and the converse `obj-to-lists`
|
17
|
+
* added `pairs-to-obj` which takes a list of pairs (2 element lists) and creates an object, and the converse `obj-to-pairs`
|
18
|
+
* removed `cons`, `append` - use the concat operator
|
19
|
+
* removed `compose` - use the compose operator
|
20
|
+
* removed `obj-to-func` - use partially applied access (eg. `(obj.)`)
|
21
|
+
* removed `length` - use `(.length)`
|
22
|
+
* `sort-by` renamed to `sort-with`
|
23
|
+
* added new `sort-by`
|
24
|
+
* removed `compare` - just use the new `sort-by`
|
25
|
+
* `break-it` renamed `break-list`, (`Str.break-str` for the string version)
|
26
|
+
* added `Str.repeat` which creates a new string by repeating the input n times
|
27
|
+
* `unfold` as alias to `unfoldr` is no longer used
|
28
|
+
* fixed up style and compiled with LiveScript 1.1.1
|
29
|
+
* use Make instead of Slake
|
30
|
+
* greatly improved tests
|
31
|
+
|
32
|
+
# 0.6.0
|
33
|
+
* fixed various bugs
|
34
|
+
* added `fix`, a fixpoint (Y combinator) for anonymous recursive functions
|
35
|
+
* added `unfoldr` (alias `unfold`)
|
36
|
+
* calling `replicate` with a string now returns a list of strings
|
37
|
+
* removed `partial`, just use native partial application in LiveScript using the `_` placeholder, or currying
|
38
|
+
* added `sort`, `sortBy`, and `compare`
|
39
|
+
|
40
|
+
# 0.5.0
|
41
|
+
* removed `lookup` - use (.prop)
|
42
|
+
* removed `call` - use (.func arg1, arg2)
|
43
|
+
* removed `pluck` - use map (.prop), xs
|
44
|
+
* fixed buys wtih `head` and `last`
|
45
|
+
* added non-minifed browser version, as `prelude-browser.js`
|
46
|
+
* renamed `prelude-min.js` to `prelude-browser-min.js`
|
47
|
+
* renamed `zip` to `zipAll`
|
48
|
+
* renamed `zipWith` to `zipAllWith`
|
49
|
+
* added `zip`, a curried zip that takes only two arguments
|
50
|
+
* added `zipWith`, a curried zipWith that takes only two arguments
|
51
|
+
|
52
|
+
# 0.4.0
|
53
|
+
* added `parition` function
|
54
|
+
* added `curry` function
|
55
|
+
* removed `elem` function (use `in`)
|
56
|
+
* removed `notElem` function (use `not in`)
|
57
|
+
|
58
|
+
# 0.3.0
|
59
|
+
* added `listToObject`
|
60
|
+
* added `unique`
|
61
|
+
* added `objToFunc`
|
62
|
+
* added support for using strings in map and the like
|
63
|
+
* added support for using objects in map and the like
|
64
|
+
* added ability to use objects instead of functions in certain cases
|
65
|
+
* removed `error` (just use throw)
|
66
|
+
* added `tau` constant
|
67
|
+
* added `join`
|
68
|
+
* added `values`
|
69
|
+
* added `keys`
|
70
|
+
* added `partial`
|
71
|
+
* renamed `log` to `ln`
|
72
|
+
* added alias to `head`: `first`
|
73
|
+
* added `installPrelude` helper
|
74
|
+
|
75
|
+
# 0.2.0
|
76
|
+
* removed functions that simply warp operators as you can now use operators as functions in LiveScript
|
77
|
+
* `min/max` are now curried and take only 2 arguments
|
78
|
+
* added `call`
|
79
|
+
|
80
|
+
# 0.1.0
|
81
|
+
* initial public release
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 George Zahariev
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,50 @@
|
|
1
|
+
default: all
|
2
|
+
|
3
|
+
SRC = $(shell find src -name "*.ls" -type f | sort)
|
4
|
+
LIB = $(SRC:src/%.ls=lib/%.js)
|
5
|
+
LS = node_modules/LiveScript
|
6
|
+
LSC = node_modules/.bin/lsc
|
7
|
+
BROWSERIFY = node_modules/.bin/browserify
|
8
|
+
UGLIFYJS = node_modules/.bin/uglifyjs
|
9
|
+
MOCHA = node_modules/.bin/mocha
|
10
|
+
|
11
|
+
lib:
|
12
|
+
mkdir lib/
|
13
|
+
|
14
|
+
lib/%.js: src/%.ls lib
|
15
|
+
$(LSC) --compile --bare --print "$<" > "$@"
|
16
|
+
|
17
|
+
browser:
|
18
|
+
mkdir browser/
|
19
|
+
|
20
|
+
prelude-browser.js: $(LIB) browser
|
21
|
+
$(BROWSERIFY) -r ./lib/index.js:prelude-ls > browser/prelude-browser.js
|
22
|
+
|
23
|
+
prelude-browser-min.js: browser/prelude-browser.js
|
24
|
+
$(UGLIFYJS) browser/prelude-browser.js --mangle --comments "all" > browser/prelude-browser-min.js
|
25
|
+
|
26
|
+
package.json: package.ls
|
27
|
+
$(LSC) --compile --json package.ls
|
28
|
+
|
29
|
+
.PHONY: build-browser test install loc clean
|
30
|
+
|
31
|
+
all: build
|
32
|
+
|
33
|
+
build: $(LIB) package.json
|
34
|
+
|
35
|
+
build-browser: prelude-browser.js prelude-browser-min.js
|
36
|
+
|
37
|
+
test: build
|
38
|
+
$(MOCHA) --reporter dot --ui tdd --compilers ls:$(LS)
|
39
|
+
|
40
|
+
dev-install:
|
41
|
+
npm install .
|
42
|
+
|
43
|
+
loc:
|
44
|
+
wc --lines src/*
|
45
|
+
|
46
|
+
clean:
|
47
|
+
rm --force ./*.js
|
48
|
+
rm --force --recursive lib
|
49
|
+
rm --force --recursive browser
|
50
|
+
rm --force package.json
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)
|
2
|
+
|
3
|
+
is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, <a href="http://livescript.net">LiveScript</a>.
|
4
|
+
|
5
|
+
See **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.
|
6
|
+
|
7
|
+
You can install via npm `npm install prelude-ls`
|
8
|
+
|
9
|
+
### Development
|
10
|
+
|
11
|
+
`make test` to test
|
12
|
+
|
13
|
+
`make build` to build `lib` from `src`
|
14
|
+
|
15
|
+
`make build-browser` to build browser versions
|
@@ -0,0 +1 @@
|
|
1
|
+
require=function(n,r,t){function e(t,i){if(!r[t]){if(!n[t]){var o=typeof require=="function"&&require;if(!i&&o)return o(t,!0);if(u)return u(t,!0);throw new Error("Cannot find module '"+t+"'")}var a=r[t]={exports:{}};n[t][0].call(a.exports,function(r){var u=n[t][1][r];return e(u?u:r)},a,a.exports)}return r[t].exports}var u=typeof require=="function"&&require;for(var i=0;i<t.length;i++)e(t[i]);return e}({"prelude-ls":[function(n,r,t){r.exports=n("bcmc1g")},{}],bcmc1g:[function(n,r,t){var e,u,i,o,a,c,f,l,s,h={}.toString;e=n("./Func.js");u=n("./List.js");i=n("./Obj.js");o=n("./Str.js");a=n("./Num.js");c=function(n){return n};f=p(function(n,r){return h.call(r).slice(8,-1)===n});l=p(function(n,r){var t,e=[];for(t=0;t<n;++t){e.push(r)}return e});o.empty=u.empty;o.slice=u.slice;o.take=u.take;o.drop=u.drop;o.splitAt=u.splitAt;o.takeWhile=u.takeWhile;o.dropWhile=u.dropWhile;o.span=u.span;o.breakStr=u.breakList;s={Func:e,List:u,Obj:i,Str:o,Num:a,id:c,isType:f,replicate:l};s.each=u.each;s.map=u.map;s.filter=u.filter;s.compact=u.compact;s.reject=u.reject;s.partition=u.partition;s.find=u.find;s.head=u.head;s.first=u.first;s.tail=u.tail;s.last=u.last;s.initial=u.initial;s.empty=u.empty;s.reverse=u.reverse;s.difference=u.difference;s.intersection=u.intersection;s.union=u.union;s.countBy=u.countBy;s.groupBy=u.groupBy;s.fold=u.fold;s.foldl=u.foldl;s.fold1=u.fold1;s.foldl1=u.foldl1;s.foldr=u.foldr;s.foldr1=u.foldr1;s.unfoldr=u.unfoldr;s.andList=u.andList;s.orList=u.orList;s.any=u.any;s.all=u.all;s.unique=u.unique;s.sort=u.sort;s.sortWith=u.sortWith;s.sortBy=u.sortBy;s.sum=u.sum;s.product=u.product;s.mean=u.mean;s.average=u.average;s.concat=u.concat;s.concatMap=u.concatMap;s.flatten=u.flatten;s.maximum=u.maximum;s.minimum=u.minimum;s.scan=u.scan;s.scanl=u.scanl;s.scan1=u.scan1;s.scanl1=u.scanl1;s.scanr=u.scanr;s.scanr1=u.scanr1;s.slice=u.slice;s.take=u.take;s.drop=u.drop;s.splitAt=u.splitAt;s.takeWhile=u.takeWhile;s.dropWhile=u.dropWhile;s.span=u.span;s.breakList=u.breakList;s.zip=u.zip;s.zipWith=u.zipWith;s.zipAll=u.zipAll;s.zipAllWith=u.zipAllWith;s.apply=e.apply;s.curry=e.curry;s.flip=e.flip;s.fix=e.fix;s.split=o.split;s.join=o.join;s.lines=o.lines;s.unlines=o.unlines;s.words=o.words;s.unwords=o.unwords;s.chars=o.chars;s.unchars=o.unchars;s.values=i.values;s.keys=i.keys;s.pairsToObj=i.pairsToObj;s.objToPairs=i.objToPairs;s.listsToObj=i.listsToObj;s.objToLists=i.objToLists;s.max=a.max;s.min=a.min;s.negate=a.negate;s.abs=a.abs;s.signum=a.signum;s.quot=a.quot;s.rem=a.rem;s.div=a.div;s.mod=a.mod;s.recip=a.recip;s.pi=a.pi;s.tau=a.tau;s.exp=a.exp;s.sqrt=a.sqrt;s.ln=a.ln;s.pow=a.pow;s.sin=a.sin;s.tan=a.tan;s.cos=a.cos;s.acos=a.acos;s.asin=a.asin;s.atan=a.atan;s.atan2=a.atan2;s.truncate=a.truncate;s.round=a.round;s.ceiling=a.ceiling;s.floor=a.floor;s.isItNaN=a.isItNaN;s.even=a.even;s.odd=a.odd;s.gcd=a.gcd;s.lcm=a.lcm;s.VERSION="1.0.3";r.exports=s;function p(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}},{"./Func.js":1,"./Obj.js":2,"./Num.js":3,"./List.js":4,"./Str.js":5}],1:[function(n,r,t){var e,u,i,o;e=function(n){return a(n)};u=a(function(n,r,t){return n(t,r)});i=function(n){return function(r,t){return function(){return n(r(r)).apply(null,arguments)}}(function(r,t){return function(){return n(r(r)).apply(null,arguments)}})};o=a(function(n,r){return n.apply(null,r)});r.exports={curry:e,flip:u,fix:i,apply:o};function a(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}},{}],2:[function(n,r,t){var e,u,i,o,a,c,f,l,s,h,p,g,v,m;e=function(n){var r,t,e=[];for(r in n){t=n[r];e.push(t)}return e};u=function(n){var r,t=[];for(r in n){t.push(r)}return t};i=function(n){var r,t,e,u={};for(r=0,t=n.length;r<t;++r){e=n[r];u[e[0]]=e[1]}return u};o=function(n){var r,t,e=[];for(r in n){t=n[r];e.push([r,t])}return e};a=d(function(n,r){var t,e,u,i,o={};for(t=0,e=n.length;t<e;++t){u=t;i=n[t];o[i]=r[u]}return o});c=function(n){var r,t,e,u;r=[];t=[];for(e in n){u=n[e];r.push(e);t.push(u)}return[r,t]};f=function(n){var r;for(r in n){return false}return true};l=d(function(n,r){var t,e;for(t in r){e=r[t];n(e)}return r});s=d(function(n,r){var t,e,u={};for(t in r){e=r[t];u[t]=n(e)}return u});h=d(function(n){var r,t,e={};for(r in n){t=n[r];if(t){e[r]=t}}return e});p=d(function(n,r){var t,e,u={};for(t in r){e=r[t];if(n(e)){u[t]=e}}return u});g=d(function(n,r){var t,e,u={};for(t in r){e=r[t];if(!n(e)){u[t]=e}}return u});v=d(function(n,r){var t,e,u,i;t={};e={};for(u in r){i=r[u];(n(i)?t:e)[u]=i}return[t,e]});m=d(function(n,r){var t,e;for(t in r){e=r[t];if(n(e)){return e}}});r.exports={values:e,keys:u,pairsToObj:i,objToPairs:o,listsToObj:a,objToLists:c,empty:f,each:l,map:s,filter:p,compact:h,reject:g,partition:v,find:m};function d(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}},{}],3:[function(n,r,t){var e,u,i,o,a,c,f,l,s,h,p,g,v,m,d,y,j,b,x,M,k,W,w,L,q,T,z,A,N,O,B,S;e=I(function(n,r){return n>r?n:r});u=I(function(n,r){return n<r?n:r});i=function(n){return-n};o=Math.abs;a=function(n){if(n<0){return-1}else if(n>0){return 1}else{return 0}};c=I(function(n,r){return~~(n/r)});f=I(function(n,r){return n%r});l=I(function(n,r){return Math.floor(n/r)});s=I(function(n,r){var t;return(n%(t=r)+t)%t});h=function(n){return 1/n};p=Math.PI;g=p*2;v=Math.exp;m=Math.sqrt;d=Math.log;y=I(function(n,r){return Math.pow(n,r)});j=Math.sin;b=Math.tan;x=Math.cos;M=Math.asin;k=Math.acos;W=Math.atan;w=I(function(n,r){return Math.atan2(n,r)});L=function(n){return~~n};q=Math.round;T=Math.ceil;z=Math.floor;A=function(n){return n!==n};N=function(n){return n%2===0};O=function(n){return n%2!==0};B=I(function(n,r){var t;n=Math.abs(n);r=Math.abs(r);while(r!==0){t=n%r;n=r;r=t}return n});S=I(function(n,r){return Math.abs(Math.floor(n/B(n,r)*r))});r.exports={max:e,min:u,negate:i,abs:o,signum:a,quot:c,rem:f,div:l,mod:s,recip:h,pi:p,tau:g,exp:v,sqrt:m,ln:d,pow:y,sin:j,tan:b,cos:x,acos:k,asin:M,atan:W,atan2:w,truncate:L,round:q,ceiling:T,floor:z,isItNaN:A,even:N,odd:O,gcd:B,lcm:S};function I(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}},{}],4:[function(n,r,t){var e,u,i,o,a,c,f,l,s,h,p,g,v,m,d,y,j,b,x,M,k,W,w,L,q,T,z,A,N,O,B,S,I,P,F,E,C,R,V,D,G,H,J,K,Q,U,X,Y,Z,$,_,nr,rr,tr,er,ur,ir,or,ar,cr,fr,lr={}.toString,sr=[].slice;e=hr(function(n,r){var t,e,u;for(t=0,e=r.length;t<e;++t){u=r[t];n(u)}return r});u=hr(function(n,r){var t,e,u,i=[];for(t=0,e=r.length;t<e;++t){u=r[t];i.push(n(u))}return i});i=hr(function(n){var r,t,e,u=[];for(r=0,t=n.length;r<t;++r){e=n[r];if(e){u.push(e)}}return u});o=hr(function(n,r){var t,e,u,i=[];for(t=0,e=r.length;t<e;++t){u=r[t];if(n(u)){i.push(u)}}return i});a=hr(function(n,r){var t,e,u,i=[];for(t=0,e=r.length;t<e;++t){u=r[t];if(!n(u)){i.push(u)}}return i});c=hr(function(n,r){var t,e,u,i,o;t=[];e=[];for(u=0,i=r.length;u<i;++u){o=r[u];(n(o)?t:e).push(o)}return[t,e]});f=hr(function(n,r){var t,e,u;for(t=0,e=r.length;t<e;++t){u=r[t];if(n(u)){return u}}});l=s=function(n){if(!n.length){return}return n[0]};h=function(n){if(!n.length){return}return n.slice(1)};p=function(n){if(!n.length){return}return n[n.length-1]};g=function(n){var r;r=n.length;if(!r){return}return n.slice(0,r-1)};v=function(n){return!n.length};m=function(n){return n.concat().reverse()};d=function(n){var r,t,e,u;r=[];for(t=0,e=n.length;t<e;++t){u=n[t];if(!pr(u,r)){r.push(u)}}return r};y=j=hr(function(n,r,t){var e,u,i;for(e=0,u=t.length;e<u;++e){i=t[e];r=n(r,i)}return r});b=x=hr(function(n,r){return y(n,r[0],r.slice(1))});M=hr(function(n,r,t){return y(n,r,t.concat().reverse())});k=hr(function(n,r){var t;t=r.concat().reverse();return y(n,t[0],t.slice(1))});W=hr(function(n,r){var t,e,u;t=[];e=r;while((u=n(e))!=null){t.push(u[0]);e=u[1]}return t});w=function(n){return[].concat.apply([],n)};L=hr(function(n,r){var t;return[].concat.apply([],function(){var e,u,i,o=[];for(e=0,i=(u=r).length;e<i;++e){t=u[e];o.push(n(t))}return o}())});q=hr(function(n){var r;return[].concat.apply([],function(){var t,e,u,i=[];for(t=0,u=(e=n).length;t<u;++t){r=e[t];if(lr.call(r).slice(8,-1)==="Array"){i.push(q(r))}else{i.push(r)}}return i}())});T=function(n){var r,t,e,u,i,o,a,c;r=sr.call(arguments,1);t=[];n:for(e=0,u=n.length;e<u;++e){i=n[e];for(o=0,a=r.length;o<a;++o){c=r[o];if(pr(i,c)){continue n}}t.push(i)}return t};z=function(n){var r,t,e,u,i,o,a,c;r=sr.call(arguments,1);t=[];n:for(e=0,u=n.length;e<u;++e){i=n[e];for(o=0,a=r.length;o<a;++o){c=r[o];if(!pr(i,c)){continue n}}t.push(i)}return t};A=function(){var n,r,t,e,u,i,o,a;n=sr.call(arguments);r=[];for(t=0,e=n.length;t<e;++t){u=n[t];for(i=0,o=u.length;i<o;++i){a=u[i];if(!pr(a,r)){r.push(a)}}}return r};N=hr(function(n,r){var t,e,u,i,o;t={};for(e=0,u=r.length;e<u;++e){i=r[e];o=n(i);if(o in t){t[o]+=1}else{t[o]=1}}return t});O=hr(function(n,r){var t,e,u,i,o;t={};for(e=0,u=r.length;e<u;++e){i=r[e];o=n(i);if(o in t){t[o].push(i)}else{t[o]=[i]}}return t});B=function(n){var r,t,e;for(r=0,t=n.length;r<t;++r){e=n[r];if(!e){return false}}return true};S=function(n){var r,t,e;for(r=0,t=n.length;r<t;++r){e=n[r];if(e){return true}}return false};I=hr(function(n,r){var t,e,u;for(t=0,e=r.length;t<e;++t){u=r[t];if(n(u)){return true}}return false});P=hr(function(n,r){var t,e,u;for(t=0,e=r.length;t<e;++t){u=r[t];if(!n(u)){return false}}return true});F=function(n){return n.concat().sort(function(n,r){if(n>r){return 1}else if(n<r){return-1}else{return 0}})};E=hr(function(n,r){if(!r.length){return[]}return r.concat().sort(n)});C=hr(function(n,r){if(!r.length){return[]}return r.concat().sort(function(r,t){if(n(r)>n(t)){return 1}else if(n(r)<n(t)){return-1}else{return 0}})});R=function(n){var r,t,e,u;r=0;for(t=0,e=n.length;t<e;++t){u=n[t];r+=u}return r};V=function(n){var r,t,e,u;r=1;for(t=0,e=n.length;t<e;++t){u=n[t];r*=u}return r};D=G=function(n){var r,t,e,u;r=0;t=n.length;for(e=0;e<t;++e){u=e;r+=n[u]}return r/t};H=function(n){var r,t,e,u,i;r=n[0];for(t=0,u=(e=n.slice(1)).length;t<u;++t){i=e[t];if(i>r){r=i}}return r};J=function(n){var r,t,e,u,i;r=n[0];for(t=0,u=(e=n.slice(1)).length;t<u;++t){i=e[t];if(i<r){r=i}}return r};K=Q=hr(function(n,r,t){var e,u;e=r;return[r].concat(function(){var r,i,o,a=[];for(r=0,o=(i=t).length;r<o;++r){u=i[r];a.push(e=n(e,u))}return a}())});U=X=hr(function(n,r){if(!r.length){return}return K(n,r[0],r.slice(1))});Y=hr(function(n,r,t){t=t.concat().reverse();return K(n,r,t).reverse()});Z=hr(function(n,r){if(!r.length){return}r=r.concat().reverse();return K(n,r[0],r.slice(1)).reverse()});$=hr(function(n,r,t){return t.slice(n,r)});_=hr(function(n,r){if(n<=0){return r.slice(0,0)}else if(!r.length){return r}else{return r.slice(0,n)}});nr=hr(function(n,r){if(n<=0||!r.length){return r}else{return r.slice(n)}});rr=hr(function(n,r){return[_(n,r),nr(n,r)]});tr=hr(function(n,r){var t,e;t=r.length;if(!t){return r}e=0;while(e<t&&n(r[e])){e+=1}return r.slice(0,e)});er=hr(function(n,r){var t,e;t=r.length;if(!t){return r}e=0;while(e<t&&n(r[e])){e+=1}return r.slice(e)});ur=hr(function(n,r){return[tr(n,r),er(n,r)]});ir=hr(function(n,r){return ur(gr([vr,n]),r)});or=hr(function(n,r){var t,e,u,i,o,a;t=[];e=r.length;for(u=0,i=n.length;u<i;++u){o=u;a=n[u];if(o===e){break}t.push([a,r[o]])}return t});ar=hr(function(n,r,t){var e,u,i,o,a,c;e=[];u=t.length;for(i=0,o=r.length;i<o;++i){a=i;c=r[i];if(a===u){break}e.push(n(c,t[a]))}return e});cr=function(){var n,r,t,e,u,i,o,a,c,f=[];n=sr.call(arguments);r=9e9;for(t=0,e=n.length;t<e;++t){u=n[t];r<=(i=u.length)||(r=i)}for(t=0;t<r;++t){o=t;a=[];for(c=0,e=n.length;c<e;++c){u=n[c];a.push(u[o])}f.push(a)}return f};fr=function(n){var r,t,e,u,i,o,a,c=[];r=sr.call(arguments,1);t=9e9;for(e=0,u=r.length;e<u;++e){i=r[e];t<=(o=i.length)||(t=o)}for(e=0;e<t;++e){a=e;c.push(n.apply(null,f()))}return c;function f(){var n,t,e,u=[];for(n=0,e=(t=r).length;n<e;++n){i=t[n];u.push(i[a])}return u}};r.exports={each:e,map:u,filter:o,compact:i,reject:a,partition:c,find:f,head:l,first:s,tail:h,last:p,initial:g,empty:v,reverse:m,difference:T,intersection:z,union:A,countBy:N,groupBy:O,fold:y,fold1:b,foldl:j,foldl1:x,foldr:M,foldr1:k,unfoldr:W,andList:B,orList:S,any:I,all:P,unique:d,sort:F,sortWith:E,sortBy:C,sum:R,product:V,mean:D,average:G,concat:w,concatMap:L,flatten:q,maximum:H,minimum:J,scan:K,scan1:U,scanl:Q,scanl1:X,scanr:Y,scanr1:Z,slice:$,take:_,drop:nr,splitAt:rr,takeWhile:tr,dropWhile:er,span:ur,breakList:ir,zip:or,zipWith:ar,zipAll:cr,zipAllWith:fr};function hr(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}function pr(n,r){var t=-1,e=r.length>>>0;while(++t<e)if(n===r[t]&&t in r)return true;return false}function gr(n){return function(){var r,t=arguments;for(r=n.length;r>0;--r){t=[n[r-1].apply(this,t)]}return t[0]}}function vr(n){return!n}},{}],5:[function(n,r,t){var e,u,i,o,a,c,f,l,s,h;e=p(function(n,r){return r.split(n)});u=p(function(n,r){return r.join(n)});i=function(n){if(!n.length){return[]}return n.split("\n")};o=function(n){return n.join("\n")};a=function(n){if(!n.length){return[]}return n.split(/[ ]+/)};c=function(n){return n.join(" ")};f=function(n){return n.split("")};l=function(n){return n.join("")};s=function(n){return n.split("").reverse().join("")};h=p(function(n,r){var t,e,u;e=[];for(u=0;u<n;++u){e.push(r)}t=e;return t.join("")});r.exports={split:e,join:u,lines:i,unlines:o,words:a,unwords:c,chars:f,unchars:l,reverse:s,repeat:h};function p(n,r){var t,e=function(u){return n.length>1?function(){var i=u?u.concat():[];t=r?t||this:this;return i.push.apply(i,arguments)<n.length&&arguments.length?e.call(t,i):n.apply(t,i)}:n};return e()}},{}]},{},[]);
|