mirror of
https://github.com/lowdefy/lowdefy.git
synced 2025-02-17 14:30:34 +08:00
feat(build): Add build icons.js.
This commit is contained in:
parent
d299a89a14
commit
e3b7eb7bf4
54
packages/build/src/build/buildIcons.js
Normal file
54
packages/build/src/build/buildIcons.js
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
Copyright 2020-2021 Lowdefy, Inc
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
const iconPackages = {
|
||||
'react-icons/ai': /"(Ai[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/bs': /"(Bs[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/bi': /"(Bi[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/di': /"(Di[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/fi': /"(Fi[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/fc': /"(Fc[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/fa': /"(Fa[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/gi': /"(Gi[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/go': /"(Go[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/gr': /"(Gr[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/hi': /"(Hi[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/im': /"(Im[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/io': /"(IoIos[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/io5': /"(Io[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/md': /"(Md[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/ri': /"(Ri[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/si': /"(Si[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/ti': /"(Ti[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/vsc': /"(Vsc[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/wi': /"(Wi[A-Z0-9]\w*)"/gm,
|
||||
'react-icons/cg': /"(Cg[A-Z0-9]\w*)"/gm,
|
||||
};
|
||||
|
||||
function buildIcons({ components }) {
|
||||
components.icons = [];
|
||||
Object.entries(iconPackages).forEach(([iconPackage, regex]) => {
|
||||
const icons = new Set();
|
||||
[...JSON.stringify(components.global || {}).matchAll(regex)].map((match) =>
|
||||
icons.add(match[1])
|
||||
);
|
||||
[...JSON.stringify(components.menus || []).matchAll(regex)].map((match) => icons.add(match[1]));
|
||||
[...JSON.stringify(components.pages || []).matchAll(regex)].map((match) => icons.add(match[1]));
|
||||
components.icons.push({ icons: [...icons], package: iconPackage });
|
||||
});
|
||||
}
|
||||
|
||||
export default buildIcons;
|
@ -20,7 +20,7 @@ const template = `{%- for block in blocks -%}
|
||||
import { {{ block.type }} } from '{{ block.package }}/blocks';
|
||||
{% endfor -%}
|
||||
export default {
|
||||
{%- for block in blocks -%}
|
||||
{% for block in blocks -%}
|
||||
{{ block.type }},
|
||||
{% endfor -%}
|
||||
};
|
||||
|
@ -20,7 +20,7 @@ const template = `{%- for connection in connections -%}
|
||||
import { {{ connection.type }} } from '{{ connection.package }}/connections';
|
||||
{% endfor -%}
|
||||
export default {
|
||||
{%- for connection in connections -%}
|
||||
{% for connection in connections -%}
|
||||
{{ connection.type }},
|
||||
{% endfor -%}
|
||||
};
|
||||
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
Copyright 2020-2021 Lowdefy, Inc
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { nunjucksFunction } from '@lowdefy/nunjucks';
|
||||
|
||||
const template = `{%- for package in packages -%}
|
||||
{%- for icon in package.icons -%}
|
||||
import { {{ icon }} } from '{{ package.package }}';
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
export default {
|
||||
{% for package in packages -%}
|
||||
{%- for icon in package.icons -%}
|
||||
{{ icon }},
|
||||
{% endfor -%}{%- endfor -%}
|
||||
};
|
||||
`;
|
||||
|
||||
async function writeIconImports({ components, context }) {
|
||||
const templateFn = nunjucksFunction(template);
|
||||
await context.writeBuildArtifact({
|
||||
filePath: 'plugins/icons.js',
|
||||
content: templateFn({ packages: components.icons }),
|
||||
});
|
||||
}
|
||||
|
||||
export default writeIconImports;
|
@ -25,6 +25,7 @@ import createWriteBuildArtifact from './utils/files/writeBuildArtifact.js';
|
||||
import addDefaultPages from './build/addDefaultPages/addDefaultPages.js';
|
||||
import buildAuth from './build/buildAuth/buildAuth.js';
|
||||
import buildConnections from './build/buildConnections.js';
|
||||
import buildIcons from './build/buildIcons.js';
|
||||
import buildMenu from './build/buildMenu.js';
|
||||
import buildPages from './build/buildPages/buildPages.js';
|
||||
import buildRefs from './build/buildRefs/buildRefs.js';
|
||||
@ -40,6 +41,7 @@ import writeConfig from './build/writeConfig.js';
|
||||
import writeConnectionImports from './build/writePluginImports/writeConnectionImports.js';
|
||||
import writeConnections from './build/writeConnections.js';
|
||||
import writeGlobal from './build/writeGlobal.js';
|
||||
import writeIconImports from './build/writePluginImports/writeIconImports.js';
|
||||
import writeMenus from './build/writeMenus.js';
|
||||
import writePages from './build/writePages.js';
|
||||
import writeRequests from './build/writeRequests.js';
|
||||
@ -91,6 +93,7 @@ async function build(options) {
|
||||
await buildAuth({ components, context });
|
||||
await buildConnections({ components, context });
|
||||
await buildPages({ components, context });
|
||||
await buildIcons({ components });
|
||||
await buildMenu({ components, context });
|
||||
await buildTypes({ components, context });
|
||||
await buildStyles({ components, context });
|
||||
@ -106,7 +109,7 @@ async function build(options) {
|
||||
await writeBlockImports({ components, context });
|
||||
await writeConnectionImports({ components, context });
|
||||
await writeStyleImports({ components, context });
|
||||
// TODO: write icons file
|
||||
await writeIconImports({ components, context });
|
||||
// TODO: add plugins to package.json
|
||||
} catch (error) {
|
||||
context.logger.error(error);
|
||||
|
Loading…
Reference in New Issue
Block a user