mirror of
https://github.com/lowdefy/lowdefy.git
synced 2025-02-23 14:39:32 +08:00
commit
4dcd045f16
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';
|
import { {{ block.type }} } from '{{ block.package }}/blocks';
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
export default {
|
export default {
|
||||||
{%- for block in blocks -%}
|
{% for block in blocks -%}
|
||||||
{{ block.type }},
|
{{ block.type }},
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
};
|
};
|
||||||
|
@ -20,7 +20,7 @@ const template = `{%- for connection in connections -%}
|
|||||||
import { {{ connection.type }} } from '{{ connection.package }}/connections';
|
import { {{ connection.type }} } from '{{ connection.package }}/connections';
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
export default {
|
export default {
|
||||||
{%- for connection in connections -%}
|
{% for connection in connections -%}
|
||||||
{{ connection.type }},
|
{{ connection.type }},
|
||||||
{% endfor -%}
|
{% 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 addDefaultPages from './build/addDefaultPages/addDefaultPages.js';
|
||||||
import buildAuth from './build/buildAuth/buildAuth.js';
|
import buildAuth from './build/buildAuth/buildAuth.js';
|
||||||
import buildConnections from './build/buildConnections.js';
|
import buildConnections from './build/buildConnections.js';
|
||||||
|
import buildIcons from './build/buildIcons.js';
|
||||||
import buildMenu from './build/buildMenu.js';
|
import buildMenu from './build/buildMenu.js';
|
||||||
import buildPages from './build/buildPages/buildPages.js';
|
import buildPages from './build/buildPages/buildPages.js';
|
||||||
import buildRefs from './build/buildRefs/buildRefs.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 writeConnectionImports from './build/writePluginImports/writeConnectionImports.js';
|
||||||
import writeConnections from './build/writeConnections.js';
|
import writeConnections from './build/writeConnections.js';
|
||||||
import writeGlobal from './build/writeGlobal.js';
|
import writeGlobal from './build/writeGlobal.js';
|
||||||
|
import writeIconImports from './build/writePluginImports/writeIconImports.js';
|
||||||
import writeMenus from './build/writeMenus.js';
|
import writeMenus from './build/writeMenus.js';
|
||||||
import writePages from './build/writePages.js';
|
import writePages from './build/writePages.js';
|
||||||
import writeRequests from './build/writeRequests.js';
|
import writeRequests from './build/writeRequests.js';
|
||||||
@ -91,6 +93,7 @@ async function build(options) {
|
|||||||
await buildAuth({ components, context });
|
await buildAuth({ components, context });
|
||||||
await buildConnections({ components, context });
|
await buildConnections({ components, context });
|
||||||
await buildPages({ components, context });
|
await buildPages({ components, context });
|
||||||
|
await buildIcons({ components });
|
||||||
await buildMenu({ components, context });
|
await buildMenu({ components, context });
|
||||||
await buildTypes({ components, context });
|
await buildTypes({ components, context });
|
||||||
await buildStyles({ components, context });
|
await buildStyles({ components, context });
|
||||||
@ -106,7 +109,7 @@ async function build(options) {
|
|||||||
await writeBlockImports({ components, context });
|
await writeBlockImports({ components, context });
|
||||||
await writeConnectionImports({ components, context });
|
await writeConnectionImports({ components, context });
|
||||||
await writeStyleImports({ components, context });
|
await writeStyleImports({ components, context });
|
||||||
// TODO: write icons file
|
await writeIconImports({ components, context });
|
||||||
// TODO: add plugins to package.json
|
// TODO: add plugins to package.json
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
context.logger.error(error);
|
context.logger.error(error);
|
||||||
|
Loading…
Reference in New Issue
Block a user