diff --git a/package.json b/package.json
index 067de67c..ea232fdf 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "nullstack",
- "version": "0.17.1",
- "description": "Full-stack Javascript Components for one-dev armies",
+ "version": "0.17.2",
+ "description": "Full Stack Javascript Components for one-dev armies",
"main": "nullstack.js",
"author": "Mortaro",
"repository": "github:nullstack/nullstack",
@@ -32,7 +32,7 @@
"css-loader": "6.7.1",
"dotenv": "8.6.0",
"eslint-plugin-jest": "^27.1.6",
- "eslint-plugin-nullstack": "^0.0.10",
+ "eslint-plugin-nullstack": "^0.0.11",
"express": "4.18.1",
"fs-extra": "10.1.0",
"mini-css-extract-plugin": "2.6.0",
diff --git a/tests/public/icon-144x000.png b/tests/public/icon-144x000.png
new file mode 100644
index 00000000..a87f2a70
Binary files /dev/null and b/tests/public/icon-144x000.png differ
diff --git a/tests/src/ContextProject.njs b/tests/src/ContextProject.njs
index 1e5c9acc..558841ed 100644
--- a/tests/src/ContextProject.njs
+++ b/tests/src/ContextProject.njs
@@ -10,6 +10,7 @@ class ContextProject extends Nullstack {
project.orientation = 'portrait'
project.scope = '/'
project.root = '/'
+ project.folderIcons = project.icons
project.icons = {
72: '/icon-72x72.png',
144: '/icon-144x144.png',
@@ -21,6 +22,7 @@ class ContextProject extends Nullstack {
}
render({ project }) {
+ const ignoredUnmatchedIcon = !Object.keys(project.folderIcons).find((key) => /icon-(\d+)x\1\.[a-zA-Z]+/.test(key))
return (
@@ -41,6 +43,7 @@ class ContextProject extends Nullstack {
+
)
}
diff --git a/tests/src/ContextProject.test.js b/tests/src/ContextProject.test.js
index 5f048221..d6b116d1 100644
--- a/tests/src/ContextProject.test.js
+++ b/tests/src/ContextProject.test.js
@@ -72,6 +72,11 @@ describe('ContextProject', () => {
expect(element).toBeTruthy()
})
+ test('icons that do not match the pattern are not loaded into icon key', async () => {
+ const element = await page.$('[data-ignored-unmatched-icon]')
+ expect(element).toBeTruthy()
+ })
+
test('icons accepts an object with sizes', async () => {
const element = await page.$('[data-icon-72="/icon-72x72.png"]')
expect(element).toBeTruthy()
diff --git a/tests/src/TypeScript.nts b/tests/src/TypeScript.nts
index f57b65a4..3761dba8 100644
--- a/tests/src/TypeScript.nts
+++ b/tests/src/TypeScript.nts
@@ -1,5 +1,4 @@
-import Nullstack from 'nullstack'
-import { NullstackClientContext } from 'nullstack/types/index.d.ts'
+import Nullstack, { NullstackClientContext } from 'nullstack'
interface TypeScriptClientContext extends NullstackClientContext {
value: number;
diff --git a/types/ClientContext.d.ts b/types/ClientContext.d.ts
index 4c416cf7..f780bb89 100644
--- a/types/ClientContext.d.ts
+++ b/types/ClientContext.d.ts
@@ -1,11 +1,11 @@
-import { NullstackEnvironment } from './Environment.d.ts'
-import { NullstackNode } from './JSX.d.ts'
-import { NullstackPage } from './Page.d.ts'
-import { NullstackParams } from './Params.d.ts'
-import { NullstackProject } from './Project.d.ts'
-import { NullstackRouter } from './Router.d.ts'
-import { NullstackSettings } from './Settings.d.ts'
-import { NullstackWorker } from './Worker.d.ts'
+import { NullstackEnvironment } from './Environment'
+import { NullstackNode } from './JSX'
+import { NullstackPage } from './Page'
+import { NullstackParams } from './Params'
+import { NullstackProject } from './Project'
+import { NullstackRouter } from './Router'
+import { NullstackSettings } from './Settings'
+import { NullstackWorker } from './Worker'
/**
* @see https://nullstack.app/context
diff --git a/types/JSX.d.ts b/types/JSX.d.ts
index 0a0a9442..00e0a51a 100644
--- a/types/JSX.d.ts
+++ b/types/JSX.d.ts
@@ -29,7 +29,7 @@
// Guilherme Correia
// TypeScript Version: 2.8
-import { NullstackClientContext } from './ClientContext.d.ts'
+import { NullstackClientContext } from './ClientContext'
type NativeDragEvent = globalThis.DragEvent
type NativeFocusEvent = globalThis.FocusEvent
diff --git a/types/Plugin.d.ts b/types/Plugin.d.ts
index a40b8534..bf680ac2 100644
--- a/types/Plugin.d.ts
+++ b/types/Plugin.d.ts
@@ -1,5 +1,5 @@
-import { NullstackClientContext } from './ClientContext.d.ts'
-import { AllHTMLAttributes, NullstackAttributes } from './JSX.d.ts'
+import { NullstackClientContext } from './ClientContext'
+import { AllHTMLAttributes, NullstackAttributes } from './JSX'
type NullstackPluginNode = {
type: string | boolean
diff --git a/types/ServerContext.d.ts b/types/ServerContext.d.ts
index 3184da6b..8ec90589 100644
--- a/types/ServerContext.d.ts
+++ b/types/ServerContext.d.ts
@@ -1,9 +1,9 @@
-import { NullstackEnvironment } from './Environment.d.ts'
-import { NullstackProject } from './Project.d.ts'
-import { NullstackSecrets } from './Secrets.d.ts'
-import { NullstackServer } from './Server.d.ts'
-import { NullstackSettings } from './Settings.d.ts'
-import { NullstackWorker } from './Worker.d.ts'
+import { NullstackEnvironment } from './Environment'
+import { NullstackProject } from './Project'
+import { NullstackSecrets } from './Secrets'
+import { NullstackServer } from './Server'
+import { NullstackSettings } from './Settings'
+import { NullstackWorker } from './Worker'
/**
* @see https://nullstack.app/context
diff --git a/types/index.d.ts b/types/index.d.ts
index 98488ac2..1a46f414 100644
--- a/types/index.d.ts
+++ b/types/index.d.ts
@@ -1,21 +1,21 @@
-import { NullstackClientContext } from './ClientContext.d.ts'
-import { NullstackNode } from './JSX.d.ts'
-import { NullstackPlugin } from './Plugin.d.ts'
-import { NullstackServerContext } from './ServerContext.d.ts'
-
-export * from './ClientContext.d.ts'
-export * from './Environment.d.ts'
-export * from './Page.d.ts'
-export * from './Params.d.ts'
-export * from './Plugin.d.ts'
-export * from './Project.d.ts'
-export * from './Router.d.ts'
-export * from './Secrets.d.ts'
-export * from './Server.d.ts'
-export * from './ServerContext.d.ts'
-export * from './Settings.d.ts'
-export * from './Worker.d.ts'
-export * from './JSX.d.ts'
+import { NullstackClientContext } from './ClientContext'
+import { NullstackNode } from './JSX'
+import { NullstackPlugin } from './Plugin'
+import { NullstackServerContext } from './ServerContext'
+
+export * from './ClientContext'
+export * from './Environment'
+export * from './Page'
+export * from './Params'
+export * from './Plugin'
+export * from './Project'
+export * from './Router'
+export * from './Secrets'
+export * from './Server'
+export * from './ServerContext'
+export * from './Settings'
+export * from './Worker'
+export * from './JSX'
/**
* Functional component
diff --git a/webpack.config.js b/webpack.config.js
index 99930167..105e390c 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -219,8 +219,9 @@ function server(env, argv) {
const icons = {}
const publicFiles = readdirSync(path.join(dir, 'public'))
const babel = argv.loader === 'babel'
+ const iconFileRegex = /icon-(\d+)x\1\.[a-zA-Z]+/
for (const file of publicFiles) {
- if (file.startsWith('icon-')) {
+ if (iconFileRegex.test(file)) {
const size = file.split('x')[1].split('.')[0]
icons[size] = `/${file}`
}