-
Notifications
You must be signed in to change notification settings - Fork 0
/
assetmon.php
119 lines (88 loc) · 2.98 KB
/
assetmon.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/constants.php';
require __DIR__ . '/functions.php';
require __DIR__ . '/registry.functions.php';
$configfile = getcwd() . "/assetmon.json";
$configfile = sizeof($argv) > 1 ? $argv[1] : $configfile;
if (!file_exists($configfile))
die(sprintf("Config file (\"%s\") does not exist", $configfile));
else
$configfile = realpath($configfile);
$config = json_decode(file_get_contents($configfile), true);
$default_config = array(
'extensions' => array( 'css', 'js' ),
'directories' => array(),
'destination' => './',
'recursive' => true
);
# Check datatype config values
#
foreach (array_keys($default_config) as $key)
if ((isset($config[$key])
&& !(is_string($default_config[$key]) ? is_string($config[$key])
: (is_array($default_config[$key]) ? is_array($config[$key])
: (is_int($default_config[$key] ? is_int($config[$key]) : false)))))
|| !isset($config[$key]))
$config[$key] = $default_config[$key];
$config_destination = resolve_path($config['destination'], true);
if ($config_destination === false)
{
die(sprintf("{destination=%s} directive is not a valid directory", $config['destination']));
}
$config['destination'] = $config_destination;
# Filter directive {directories}
#
foreach (array_keys($config['directories']) as $key)
{
$dir = resolve_path($config['directories'][$key]);
if ($dir && is_dir($dir))
{
$config['directories'][$key] = $dir;
continue;
}
unset($config['directories'][$key]);
continue;
}
while (true) {
$files = array();
# Extract all files of the specified extensions
#
$extensions = implode('|', $config['extensions']);
foreach ($config['directories'] as $dir)
{
$files = array_merge($files, list_files($dir, sprintf('/\.(%s)$/i', $extensions)));
}
# Remove repeated files
#
$files = array_unique($files, SORT_STRING);
# Reset file registry
#
reset_registry();
# Iterate through each extension
#
foreach ($config['extensions'] as $ext) {
$arrayIterator = new ArrayIterator($files);
$regexIterator = new RegexIterator($arrayIterator, sprintf('/\.%s$/i', $ext));
foreach ($regexIterator as $file) {
if (!file_exists($file))
continue;
switch (register_file($file)) {
case REGISTRY_NEW_FILE: {
echo sprintf("[New] %s\n-- %s\n\n", date('H:i:s'), realpath($file));
}
case REGISTRY_MODIFIED_FILE: {
echo sprintf("[Modified] %s\n-- %s\n\n", date('H:i:s'), realpath($file));
}
}
}
}
$outputs = summarize_registry();
# Output these files respectively
#
foreach (array_keys($outputs) as $ext)
{
file_put_contents($config['destination'] . '/all.' . $ext, $outputs[$ext]);
}
sleep(1);
}