@jjlmoya/utils-diy 1.28.0 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +12 -12
- package/src/category/i18n/en.ts +110 -110
- package/src/category/i18n/es.ts +110 -110
- package/src/category/i18n/fr.ts +101 -101
- package/src/category/i18n/id.ts +12 -12
- package/src/category/i18n/it.ts +12 -12
- package/src/category/i18n/ja.ts +12 -12
- package/src/category/i18n/ko.ts +12 -12
- package/src/category/i18n/nl.ts +12 -12
- package/src/category/i18n/pl.ts +12 -12
- package/src/category/i18n/pt.ts +12 -12
- package/src/category/i18n/ru.ts +12 -12
- package/src/category/i18n/sv.ts +12 -12
- package/src/category/i18n/tr.ts +12 -12
- package/src/category/i18n/zh.ts +12 -12
- package/src/category/index.ts +36 -36
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +37 -37
- package/src/env.d.ts +1 -1
- package/src/index.ts +50 -50
- package/src/layouts/PreviewLayout.astro +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_length.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +18 -12
- package/src/tests/tool_validation.test.ts +15 -15
- package/src/tool/balusterCalculator/bibliography.ts +16 -16
- package/src/tool/balusterCalculator/i18n/de.ts +251 -251
- package/src/tool/balusterCalculator/i18n/en.ts +251 -251
- package/src/tool/balusterCalculator/i18n/es.ts +251 -251
- package/src/tool/balusterCalculator/i18n/fr.ts +251 -251
- package/src/tool/balusterCalculator/i18n/id.ts +251 -251
- package/src/tool/balusterCalculator/i18n/it.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ja.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ko.ts +251 -251
- package/src/tool/balusterCalculator/i18n/nl.ts +251 -251
- package/src/tool/balusterCalculator/i18n/pl.ts +251 -251
- package/src/tool/balusterCalculator/i18n/pt.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ru.ts +251 -251
- package/src/tool/balusterCalculator/i18n/sv.ts +251 -251
- package/src/tool/balusterCalculator/i18n/tr.ts +251 -251
- package/src/tool/balusterCalculator/i18n/zh.ts +251 -251
- package/src/tool/balusterCalculator/seo.astro +15 -15
- package/src/tool/clayCalculator/bibliography.ts +12 -12
- package/src/tool/clayCalculator/i18n/de.ts +174 -174
- package/src/tool/clayCalculator/i18n/en.ts +174 -174
- package/src/tool/clayCalculator/i18n/es.ts +174 -174
- package/src/tool/clayCalculator/i18n/fr.ts +174 -174
- package/src/tool/clayCalculator/i18n/id.ts +174 -174
- package/src/tool/clayCalculator/i18n/it.ts +174 -174
- package/src/tool/clayCalculator/i18n/ja.ts +173 -173
- package/src/tool/clayCalculator/i18n/ko.ts +174 -174
- package/src/tool/clayCalculator/i18n/nl.ts +174 -174
- package/src/tool/clayCalculator/i18n/pl.ts +174 -174
- package/src/tool/clayCalculator/i18n/pt.ts +174 -174
- package/src/tool/clayCalculator/i18n/ru.ts +174 -174
- package/src/tool/clayCalculator/i18n/sv.ts +174 -174
- package/src/tool/clayCalculator/i18n/tr.ts +174 -174
- package/src/tool/clayCalculator/i18n/zh.ts +174 -174
- package/src/tool/clayCalculator/seo.astro +15 -15
- package/src/tool/concreteCalculator/bibliography.ts +7 -7
- package/src/tool/concreteCalculator/i18n/de.ts +188 -188
- package/src/tool/concreteCalculator/i18n/en.ts +188 -188
- package/src/tool/concreteCalculator/i18n/es.ts +188 -188
- package/src/tool/concreteCalculator/i18n/fr.ts +188 -188
- package/src/tool/concreteCalculator/i18n/id.ts +188 -188
- package/src/tool/concreteCalculator/i18n/it.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ja.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ko.ts +188 -188
- package/src/tool/concreteCalculator/i18n/nl.ts +188 -188
- package/src/tool/concreteCalculator/i18n/pl.ts +188 -188
- package/src/tool/concreteCalculator/i18n/pt.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ru.ts +188 -188
- package/src/tool/concreteCalculator/i18n/sv.ts +188 -188
- package/src/tool/concreteCalculator/i18n/tr.ts +188 -188
- package/src/tool/concreteCalculator/i18n/zh.ts +188 -188
- package/src/tool/concreteCalculator/seo.astro +15 -15
- package/src/tool/cutOptimizer/bibliography.ts +12 -12
- package/src/tool/cutOptimizer/i18n/de.ts +169 -169
- package/src/tool/cutOptimizer/i18n/en.ts +169 -169
- package/src/tool/cutOptimizer/i18n/es.ts +169 -169
- package/src/tool/cutOptimizer/i18n/fr.ts +169 -169
- package/src/tool/cutOptimizer/i18n/id.ts +169 -169
- package/src/tool/cutOptimizer/i18n/it.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ja.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ko.ts +169 -169
- package/src/tool/cutOptimizer/i18n/nl.ts +169 -169
- package/src/tool/cutOptimizer/i18n/pl.ts +169 -169
- package/src/tool/cutOptimizer/i18n/pt.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ru.ts +169 -169
- package/src/tool/cutOptimizer/i18n/sv.ts +169 -169
- package/src/tool/cutOptimizer/i18n/tr.ts +169 -169
- package/src/tool/cutOptimizer/i18n/zh.ts +169 -169
- package/src/tool/cutOptimizer/seo.astro +15 -15
- package/src/tool/drillCalculator/bibliography.ts +12 -12
- package/src/tool/drillCalculator/i18n/de.ts +134 -134
- package/src/tool/drillCalculator/i18n/en.ts +134 -134
- package/src/tool/drillCalculator/i18n/es.ts +134 -134
- package/src/tool/drillCalculator/i18n/fr.ts +134 -134
- package/src/tool/drillCalculator/i18n/id.ts +134 -134
- package/src/tool/drillCalculator/i18n/it.ts +134 -134
- package/src/tool/drillCalculator/i18n/ja.ts +134 -134
- package/src/tool/drillCalculator/i18n/ko.ts +134 -134
- package/src/tool/drillCalculator/i18n/nl.ts +134 -134
- package/src/tool/drillCalculator/i18n/pl.ts +134 -134
- package/src/tool/drillCalculator/i18n/pt.ts +134 -134
- package/src/tool/drillCalculator/i18n/ru.ts +134 -134
- package/src/tool/drillCalculator/i18n/sv.ts +134 -134
- package/src/tool/drillCalculator/i18n/tr.ts +134 -134
- package/src/tool/drillCalculator/i18n/zh.ts +134 -134
- package/src/tool/drillCalculator/seo.astro +15 -15
- package/src/tool/drillSharpener/bibliography.ts +16 -16
- package/src/tool/drillSharpener/i18n/de.ts +117 -117
- package/src/tool/drillSharpener/i18n/en.ts +117 -117
- package/src/tool/drillSharpener/i18n/es.ts +117 -117
- package/src/tool/drillSharpener/i18n/fr.ts +117 -117
- package/src/tool/drillSharpener/i18n/id.ts +117 -117
- package/src/tool/drillSharpener/i18n/it.ts +117 -117
- package/src/tool/drillSharpener/i18n/ja.ts +117 -117
- package/src/tool/drillSharpener/i18n/ko.ts +117 -117
- package/src/tool/drillSharpener/i18n/nl.ts +117 -117
- package/src/tool/drillSharpener/i18n/pl.ts +117 -117
- package/src/tool/drillSharpener/i18n/pt.ts +117 -117
- package/src/tool/drillSharpener/i18n/ru.ts +117 -117
- package/src/tool/drillSharpener/i18n/sv.ts +117 -117
- package/src/tool/drillSharpener/i18n/tr.ts +117 -117
- package/src/tool/drillSharpener/i18n/zh.ts +117 -117
- package/src/tool/drillSharpener/seo.astro +15 -15
- package/src/tool/epoxyCalculator/bibliography.ts +20 -20
- package/src/tool/epoxyCalculator/i18n/de.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/en.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/es.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/fr.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/id.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/it.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ja.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ko.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/nl.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/pl.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/pt.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ru.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/sv.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/tr.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/zh.ts +116 -116
- package/src/tool/epoxyCalculator/seo.astro +15 -15
- package/src/tool/furnitureFit/bibliography.ts +12 -12
- package/src/tool/furnitureFit/i18n/de.ts +111 -111
- package/src/tool/furnitureFit/i18n/en.ts +149 -149
- package/src/tool/furnitureFit/i18n/es.ts +149 -149
- package/src/tool/furnitureFit/i18n/fr.ts +149 -149
- package/src/tool/furnitureFit/i18n/id.ts +111 -111
- package/src/tool/furnitureFit/i18n/it.ts +111 -111
- package/src/tool/furnitureFit/i18n/ja.ts +111 -111
- package/src/tool/furnitureFit/i18n/ko.ts +111 -111
- package/src/tool/furnitureFit/i18n/nl.ts +111 -111
- package/src/tool/furnitureFit/i18n/pl.ts +111 -111
- package/src/tool/furnitureFit/i18n/pt.ts +111 -111
- package/src/tool/furnitureFit/i18n/ru.ts +111 -111
- package/src/tool/furnitureFit/i18n/sv.ts +111 -111
- package/src/tool/furnitureFit/i18n/tr.ts +111 -111
- package/src/tool/furnitureFit/i18n/zh.ts +111 -111
- package/src/tool/furnitureFit/seo.astro +15 -15
- package/src/tool/mortarCalculator/bibliography.ts +20 -20
- package/src/tool/mortarCalculator/i18n/de.ts +130 -130
- package/src/tool/mortarCalculator/i18n/en.ts +202 -202
- package/src/tool/mortarCalculator/i18n/es.ts +179 -179
- package/src/tool/mortarCalculator/i18n/fr.ts +203 -203
- package/src/tool/mortarCalculator/i18n/id.ts +130 -130
- package/src/tool/mortarCalculator/i18n/it.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ja.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ko.ts +130 -130
- package/src/tool/mortarCalculator/i18n/nl.ts +130 -130
- package/src/tool/mortarCalculator/i18n/pl.ts +130 -130
- package/src/tool/mortarCalculator/i18n/pt.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ru.ts +130 -130
- package/src/tool/mortarCalculator/i18n/sv.ts +130 -130
- package/src/tool/mortarCalculator/i18n/tr.ts +130 -130
- package/src/tool/mortarCalculator/i18n/zh.ts +130 -130
- package/src/tool/mortarCalculator/seo.astro +15 -15
- package/src/tool/passepartoutCalculator/bibliography.ts +16 -16
- package/src/tool/passepartoutCalculator/i18n/de.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/en.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/es.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/fr.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/id.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/it.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ja.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ko.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/nl.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/pl.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/pt.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ru.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/sv.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/tr.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/zh.ts +108 -108
- package/src/tool/passepartoutCalculator/seo.astro +15 -15
- package/src/tool/pythagoreanRightAngleCalculator/bibliography.ts +12 -12
- package/src/tool/pythagoreanRightAngleCalculator/i18n/de.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/en.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/es.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/id.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/it.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ja.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ko.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/nl.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pt.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/sv.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/tr.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/zh.ts +129 -129
- package/src/tool/stairCalculator/bibliography.ts +16 -16
- package/src/tool/stairCalculator/i18n/de.ts +143 -143
- package/src/tool/stairCalculator/i18n/en.ts +145 -145
- package/src/tool/stairCalculator/i18n/es.ts +145 -145
- package/src/tool/stairCalculator/i18n/fr.ts +145 -145
- package/src/tool/stairCalculator/i18n/id.ts +143 -143
- package/src/tool/stairCalculator/i18n/it.ts +143 -143
- package/src/tool/stairCalculator/i18n/ja.ts +143 -143
- package/src/tool/stairCalculator/i18n/ko.ts +143 -143
- package/src/tool/stairCalculator/i18n/nl.ts +143 -143
- package/src/tool/stairCalculator/i18n/pl.ts +143 -143
- package/src/tool/stairCalculator/i18n/pt.ts +143 -143
- package/src/tool/stairCalculator/i18n/ru.ts +143 -143
- package/src/tool/stairCalculator/i18n/sv.ts +143 -143
- package/src/tool/stairCalculator/i18n/tr.ts +143 -143
- package/src/tool/stairCalculator/i18n/zh.ts +143 -143
- package/src/tool/stairCalculator/seo.astro +15 -15
- package/src/tool/thermalExpansionCalculator/bibliography.ts +16 -16
- package/src/tool/thermalExpansionCalculator/i18n/de.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/en.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/es.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/fr.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/id.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/it.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ja.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ko.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/nl.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/pl.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/pt.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ru.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/sv.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/tr.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/zh.ts +132 -132
- package/src/tool/thermalExpansionCalculator/seo.astro +15 -15
- package/src/tool/twoStrokeMixtureCalculator/bibliography.ts +12 -12
- package/src/tool/twoStrokeMixtureCalculator/i18n/de.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/en.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/es.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/fr.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/id.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/it.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ja.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ko.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/nl.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/pl.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/pt.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ru.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/sv.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/tr.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/zh.ts +194 -194
- package/src/tool/voltageDropCalculator/bibliography.ts +16 -16
- package/src/tool/voltageDropCalculator/i18n/de.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/en.ts +151 -151
- package/src/tool/voltageDropCalculator/i18n/es.ts +151 -151
- package/src/tool/voltageDropCalculator/i18n/fr.ts +145 -145
- package/src/tool/voltageDropCalculator/i18n/id.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/it.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ja.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ko.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/nl.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/pl.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/pt.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ru.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/sv.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/tr.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/zh.ts +113 -113
- package/src/tool/voltageDropCalculator/seo.astro +15 -15
- package/src/tool/workshopFractionConverter/bibliography.ts +12 -12
- package/src/tool/workshopFractionConverter/i18n/de.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/en.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/es.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/fr.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/id.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/it.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ja.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ko.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/nl.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/pl.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/pt.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ru.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/sv.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/tr.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/zh.ts +147 -147
- package/src/tools.ts +20 -20
package/src/data.ts
CHANGED
package/src/entries.ts
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
export { balusterCalculator } from './tool/balusterCalculator/entry';
|
|
2
|
-
export type { BalusterCalculatorLocaleContent } from './tool/balusterCalculator/entry';
|
|
3
|
-
export { clayCalculator } from './tool/clayCalculator/entry';
|
|
4
|
-
export type { ClayCalculatorLocaleContent } from './tool/clayCalculator/entry';
|
|
5
|
-
export { concreteCalculator } from './tool/concreteCalculator/entry';
|
|
6
|
-
export { cutOptimizer } from './tool/cutOptimizer/entry';
|
|
7
|
-
export { drillCalculator } from './tool/drillCalculator/entry';
|
|
8
|
-
export { drillSharpener } from './tool/drillSharpener/entry';
|
|
9
|
-
export { epoxyCalculator } from './tool/epoxyCalculator/entry';
|
|
10
|
-
export type { EpoxyCalculatorLocaleContent } from './tool/epoxyCalculator/entry';
|
|
11
|
-
export { furnitureFit } from './tool/furnitureFit/entry';
|
|
12
|
-
export { mortarCalculator } from './tool/mortarCalculator/entry';
|
|
13
|
-
export { passepartoutCalculator } from './tool/passepartoutCalculator/entry';
|
|
14
|
-
export { stairCalculator } from './tool/stairCalculator/entry';
|
|
15
|
-
export { thermalExpansionCalculator } from './tool/thermalExpansionCalculator/entry';
|
|
16
|
-
export { voltageDropCalculator } from './tool/voltageDropCalculator/entry';
|
|
17
|
-
export { workshopFractionConverter } from './tool/workshopFractionConverter/entry';
|
|
18
|
-
export { pythagoreanRightAngleCalculator } from './tool/pythagoreanRightAngleCalculator/entry';
|
|
19
|
-
export { twoStrokeMixtureCalculator } from './tool/twoStrokeMixtureCalculator/entry';
|
|
20
|
-
export { drywallCalculatorEntry } from './tool/drywallCalculator/entry';
|
|
1
|
+
export { balusterCalculator } from './tool/balusterCalculator/entry';
|
|
2
|
+
export type { BalusterCalculatorLocaleContent } from './tool/balusterCalculator/entry';
|
|
3
|
+
export { clayCalculator } from './tool/clayCalculator/entry';
|
|
4
|
+
export type { ClayCalculatorLocaleContent } from './tool/clayCalculator/entry';
|
|
5
|
+
export { concreteCalculator } from './tool/concreteCalculator/entry';
|
|
6
|
+
export { cutOptimizer } from './tool/cutOptimizer/entry';
|
|
7
|
+
export { drillCalculator } from './tool/drillCalculator/entry';
|
|
8
|
+
export { drillSharpener } from './tool/drillSharpener/entry';
|
|
9
|
+
export { epoxyCalculator } from './tool/epoxyCalculator/entry';
|
|
10
|
+
export type { EpoxyCalculatorLocaleContent } from './tool/epoxyCalculator/entry';
|
|
11
|
+
export { furnitureFit } from './tool/furnitureFit/entry';
|
|
12
|
+
export { mortarCalculator } from './tool/mortarCalculator/entry';
|
|
13
|
+
export { passepartoutCalculator } from './tool/passepartoutCalculator/entry';
|
|
14
|
+
export { stairCalculator } from './tool/stairCalculator/entry';
|
|
15
|
+
export { thermalExpansionCalculator } from './tool/thermalExpansionCalculator/entry';
|
|
16
|
+
export { voltageDropCalculator } from './tool/voltageDropCalculator/entry';
|
|
17
|
+
export { workshopFractionConverter } from './tool/workshopFractionConverter/entry';
|
|
18
|
+
export { pythagoreanRightAngleCalculator } from './tool/pythagoreanRightAngleCalculator/entry';
|
|
19
|
+
export { twoStrokeMixtureCalculator } from './tool/twoStrokeMixtureCalculator/entry';
|
|
20
|
+
export { drywallCalculatorEntry } from './tool/drywallCalculator/entry';
|
|
21
21
|
export type { DrywallCalculatorLocaleContent } from './tool/drywallCalculator/entry';
|
|
22
22
|
export { excavationVolumeCalculator } from './tool/excavationVolumeCalculator/entry';
|
|
23
23
|
export type { ExcavationVolumeCalculatorLocaleContent } from './tool/excavationVolumeCalculator/entry';
|
|
24
|
-
export { diyCategory } from './category';
|
|
25
|
-
import { balusterCalculator } from './tool/balusterCalculator/entry';
|
|
26
|
-
import { clayCalculator } from './tool/clayCalculator/entry';
|
|
27
|
-
import { concreteCalculator } from './tool/concreteCalculator/entry';
|
|
28
|
-
import { cutOptimizer } from './tool/cutOptimizer/entry';
|
|
29
|
-
import { drillCalculator } from './tool/drillCalculator/entry';
|
|
30
|
-
import { drillSharpener } from './tool/drillSharpener/entry';
|
|
24
|
+
export { diyCategory } from './category';
|
|
25
|
+
import { balusterCalculator } from './tool/balusterCalculator/entry';
|
|
26
|
+
import { clayCalculator } from './tool/clayCalculator/entry';
|
|
27
|
+
import { concreteCalculator } from './tool/concreteCalculator/entry';
|
|
28
|
+
import { cutOptimizer } from './tool/cutOptimizer/entry';
|
|
29
|
+
import { drillCalculator } from './tool/drillCalculator/entry';
|
|
30
|
+
import { drillSharpener } from './tool/drillSharpener/entry';
|
|
31
31
|
import { drywallCalculatorEntry } from './tool/drywallCalculator/entry';
|
|
32
32
|
import { excavationVolumeCalculator } from './tool/excavationVolumeCalculator/entry';
|
|
33
|
-
import { epoxyCalculator } from './tool/epoxyCalculator/entry';
|
|
34
|
-
import { furnitureFit } from './tool/furnitureFit/entry';
|
|
35
|
-
import { mortarCalculator } from './tool/mortarCalculator/entry';
|
|
36
|
-
import { passepartoutCalculator } from './tool/passepartoutCalculator/entry';
|
|
37
|
-
import { stairCalculator } from './tool/stairCalculator/entry';
|
|
38
|
-
import { thermalExpansionCalculator } from './tool/thermalExpansionCalculator/entry';
|
|
39
|
-
import { voltageDropCalculator } from './tool/voltageDropCalculator/entry';
|
|
40
|
-
import { workshopFractionConverter } from './tool/workshopFractionConverter/entry';
|
|
41
|
-
import { pythagoreanRightAngleCalculator } from './tool/pythagoreanRightAngleCalculator/entry';
|
|
42
|
-
import { twoStrokeMixtureCalculator } from './tool/twoStrokeMixtureCalculator/entry';
|
|
33
|
+
import { epoxyCalculator } from './tool/epoxyCalculator/entry';
|
|
34
|
+
import { furnitureFit } from './tool/furnitureFit/entry';
|
|
35
|
+
import { mortarCalculator } from './tool/mortarCalculator/entry';
|
|
36
|
+
import { passepartoutCalculator } from './tool/passepartoutCalculator/entry';
|
|
37
|
+
import { stairCalculator } from './tool/stairCalculator/entry';
|
|
38
|
+
import { thermalExpansionCalculator } from './tool/thermalExpansionCalculator/entry';
|
|
39
|
+
import { voltageDropCalculator } from './tool/voltageDropCalculator/entry';
|
|
40
|
+
import { workshopFractionConverter } from './tool/workshopFractionConverter/entry';
|
|
41
|
+
import { pythagoreanRightAngleCalculator } from './tool/pythagoreanRightAngleCalculator/entry';
|
|
42
|
+
import { twoStrokeMixtureCalculator } from './tool/twoStrokeMixtureCalculator/entry';
|
|
43
43
|
export const ALL_ENTRIES = [balusterCalculator, clayCalculator, concreteCalculator, cutOptimizer, drillCalculator, drillSharpener, drywallCalculatorEntry, epoxyCalculator, furnitureFit, mortarCalculator, passepartoutCalculator, stairCalculator, thermalExpansionCalculator, voltageDropCalculator, workshopFractionConverter, pythagoreanRightAngleCalculator, twoStrokeMixtureCalculator, excavationVolumeCalculator];
|
package/src/env.d.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
export { diyCategory } from './category';
|
|
2
|
-
export const diyCategorySEO = () => import('./category/seo.astro').then((m) => m.default);
|
|
3
|
-
|
|
4
|
-
export type {
|
|
5
|
-
KnownLocale,
|
|
6
|
-
FAQItem,
|
|
7
|
-
BibliographyEntry,
|
|
8
|
-
HowToStep,
|
|
9
|
-
ToolLocaleContent,
|
|
10
|
-
CategoryLocaleContent,
|
|
11
|
-
LocaleLoader,
|
|
12
|
-
LocaleMap,
|
|
13
|
-
DiyToolEntry,
|
|
14
|
-
DiyCategoryEntry,
|
|
15
|
-
ToolDefinition,
|
|
16
|
-
} from './types';
|
|
17
|
-
|
|
18
|
-
export { ALL_ENTRIES, ALL_TOOLS } from './tools';
|
|
19
|
-
|
|
20
|
-
export { CLAY_CALCULATOR_TOOL } from './tool/clayCalculator/index';
|
|
21
|
-
|
|
22
|
-
export { EPOXY_CALCULATOR_TOOL } from './tool/epoxyCalculator/index';
|
|
23
|
-
|
|
24
|
-
export { BALUSTER_CALCULATOR_TOOL } from './tool/balusterCalculator/index';
|
|
25
|
-
|
|
26
|
-
export { MORTAR_CALCULATOR_TOOL } from './tool/mortarCalculator/index';
|
|
27
|
-
|
|
28
|
-
export { PASSEPARTOUT_CALCULATOR_TOOL } from './tool/passepartoutCalculator/index';
|
|
29
|
-
|
|
30
|
-
export { CONCRETE_CALCULATOR_TOOL } from './tool/concreteCalculator/index';
|
|
31
|
-
|
|
32
|
-
export { CUT_OPTIMIZER_TOOL } from './tool/cutOptimizer/index';
|
|
33
|
-
|
|
34
|
-
export { VOLTAGE_DROP_CALCULATOR_TOOL } from './tool/voltageDropCalculator/index';
|
|
35
|
-
|
|
36
|
-
export { FURNITURE_FIT_TOOL } from './tool/furnitureFit/index';
|
|
37
|
-
|
|
38
|
-
export { THERMAL_EXPANSION_CALCULATOR_TOOL } from './tool/thermalExpansionCalculator/index';
|
|
39
|
-
|
|
40
|
-
export { DRILL_CALCULATOR_TOOL } from './tool/drillCalculator/index';
|
|
41
|
-
|
|
42
|
-
export { STAIR_CALCULATOR_TOOL } from './tool/stairCalculator/index';
|
|
43
|
-
|
|
44
|
-
export { DRILL_SHARPENER_TOOL } from './tool/drillSharpener/index';
|
|
45
|
-
|
|
46
|
-
export { WORKSHOP_FRACTION_CONVERTER_TOOL } from './tool/workshopFractionConverter/index';
|
|
47
|
-
|
|
48
|
-
export { PYTHAGOREAN_RIGHT_ANGLE_CALCULATOR_TOOL } from './tool/pythagoreanRightAngleCalculator/index';
|
|
49
|
-
|
|
50
|
-
export { TWO_STROKE_MIXTURE_CALCULATOR_TOOL } from './tool/twoStrokeMixtureCalculator/index';
|
|
1
|
+
export { diyCategory } from './category';
|
|
2
|
+
export const diyCategorySEO = () => import('./category/seo.astro').then((m) => m.default);
|
|
3
|
+
|
|
4
|
+
export type {
|
|
5
|
+
KnownLocale,
|
|
6
|
+
FAQItem,
|
|
7
|
+
BibliographyEntry,
|
|
8
|
+
HowToStep,
|
|
9
|
+
ToolLocaleContent,
|
|
10
|
+
CategoryLocaleContent,
|
|
11
|
+
LocaleLoader,
|
|
12
|
+
LocaleMap,
|
|
13
|
+
DiyToolEntry,
|
|
14
|
+
DiyCategoryEntry,
|
|
15
|
+
ToolDefinition,
|
|
16
|
+
} from './types';
|
|
17
|
+
|
|
18
|
+
export { ALL_ENTRIES, ALL_TOOLS } from './tools';
|
|
19
|
+
|
|
20
|
+
export { CLAY_CALCULATOR_TOOL } from './tool/clayCalculator/index';
|
|
21
|
+
|
|
22
|
+
export { EPOXY_CALCULATOR_TOOL } from './tool/epoxyCalculator/index';
|
|
23
|
+
|
|
24
|
+
export { BALUSTER_CALCULATOR_TOOL } from './tool/balusterCalculator/index';
|
|
25
|
+
|
|
26
|
+
export { MORTAR_CALCULATOR_TOOL } from './tool/mortarCalculator/index';
|
|
27
|
+
|
|
28
|
+
export { PASSEPARTOUT_CALCULATOR_TOOL } from './tool/passepartoutCalculator/index';
|
|
29
|
+
|
|
30
|
+
export { CONCRETE_CALCULATOR_TOOL } from './tool/concreteCalculator/index';
|
|
31
|
+
|
|
32
|
+
export { CUT_OPTIMIZER_TOOL } from './tool/cutOptimizer/index';
|
|
33
|
+
|
|
34
|
+
export { VOLTAGE_DROP_CALCULATOR_TOOL } from './tool/voltageDropCalculator/index';
|
|
35
|
+
|
|
36
|
+
export { FURNITURE_FIT_TOOL } from './tool/furnitureFit/index';
|
|
37
|
+
|
|
38
|
+
export { THERMAL_EXPANSION_CALCULATOR_TOOL } from './tool/thermalExpansionCalculator/index';
|
|
39
|
+
|
|
40
|
+
export { DRILL_CALCULATOR_TOOL } from './tool/drillCalculator/index';
|
|
41
|
+
|
|
42
|
+
export { STAIR_CALCULATOR_TOOL } from './tool/stairCalculator/index';
|
|
43
|
+
|
|
44
|
+
export { DRILL_SHARPENER_TOOL } from './tool/drillSharpener/index';
|
|
45
|
+
|
|
46
|
+
export { WORKSHOP_FRACTION_CONVERTER_TOOL } from './tool/workshopFractionConverter/index';
|
|
47
|
+
|
|
48
|
+
export { PYTHAGOREAN_RIGHT_ANGLE_CALCULATOR_TOOL } from './tool/pythagoreanRightAngleCalculator/index';
|
|
49
|
+
|
|
50
|
+
export { TWO_STROKE_MIXTURE_CALCULATOR_TOOL } from './tool/twoStrokeMixtureCalculator/index';
|
package/src/pages/index.astro
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import type { CategoryLocaleContent } from '../types';
|
|
3
|
+
|
|
4
|
+
const EXPECTED_LOCALES = [
|
|
5
|
+
'de', 'en', 'es', 'fr', 'id', 'it', 'ja', 'ko', 'nl', 'pl', 'pt', 'ru', 'sv', 'tr', 'zh',
|
|
6
|
+
] as const;
|
|
7
|
+
const COMPACT_LOCALES = new Set(['ja', 'ko', 'zh']);
|
|
8
|
+
|
|
9
|
+
const localeModules = import.meta.glob('../category/i18n/*.ts', { eager: true }) as Record<
|
|
10
|
+
string,
|
|
11
|
+
{ content: CategoryLocaleContent }
|
|
12
|
+
>;
|
|
13
|
+
|
|
14
|
+
function textFrom(value: unknown): string {
|
|
15
|
+
if (typeof value === 'string') return value.replace(/<[^>]*>/g, ' ');
|
|
16
|
+
if (Array.isArray(value)) return value.map(textFrom).join(' ');
|
|
17
|
+
if (value && typeof value === 'object') return Object.values(value).map(textFrom).join(' ');
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const STRONG_CLAIM = /\b(?:garantiz\w*|guarante\w*|validat(?:ed)|valid(?:ated|ado|ada|ados|adas|ée|ées)|actualizad\w*)\b/iu;
|
|
22
|
+
|
|
23
|
+
function getContents(): Map<string, CategoryLocaleContent> {
|
|
24
|
+
return new Map(
|
|
25
|
+
Object.entries(localeModules).map(([file, module]) => [file.match(/\/([a-z]{2})\.ts$/u)?.[1] ?? file, module.content]),
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function validateContent(locale: string, content: CategoryLocaleContent): string[] {
|
|
30
|
+
const failures: string[] = [];
|
|
31
|
+
const check = (condition: boolean, message: string) => { if (!condition) failures.push(`${locale}: ${message}`); };
|
|
32
|
+
const minimumTitleLength = COMPACT_LOCALES.has(locale) ? 4 : 12;
|
|
33
|
+
const minimumDescriptionLength = COMPACT_LOCALES.has(locale) ? 20 : 60;
|
|
34
|
+
check(content.title.trim().length >= minimumTitleLength && content.title.trim().length <= 70, 'title must use a useful 4/12–70 character length');
|
|
35
|
+
check(content.description.trim().length >= minimumDescriptionLength && content.description.trim().length <= 180, 'description must use a useful 20/60–180 character length');
|
|
36
|
+
check(content.seo.length >= 2, 'SEO needs at least two sections');
|
|
37
|
+
check(content.seo.some((section) => section.type === 'paragraph'), 'SEO needs visible explanatory copy');
|
|
38
|
+
|
|
39
|
+
const seoText = textFrom(content.seo).replace(/\s+/g, ' ').trim();
|
|
40
|
+
const minimumSeoLength = COMPACT_LOCALES.has(locale) ? 120 : 240;
|
|
41
|
+
check(seoText.length >= minimumSeoLength, 'SEO copy must contain the minimum visible copy for its script');
|
|
42
|
+
check(content.seo.filter((section) => section.type === 'title').length >= 1, 'SEO needs a section heading');
|
|
43
|
+
check(!/[�]/u.test(seoText), 'SEO contains replacement characters');
|
|
44
|
+
check(!/ {2,}/u.test(seoText), 'SEO contains duplicated whitespace');
|
|
45
|
+
check(!STRONG_CLAIM.test(seoText), 'SEO contains an unsupported strong claim');
|
|
46
|
+
|
|
47
|
+
check(content.slug.trim().length > 0 && /^[a-z0-9-]+$/u.test(content.slug), 'slug must be a non-empty URL-safe value');
|
|
48
|
+
return failures;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe('Category SEO quality contract', () => {
|
|
52
|
+
it('has one content file for every configured locale', () => {
|
|
53
|
+
const contents = getContents();
|
|
54
|
+
expect([...contents.keys()].sort()).toEqual([...EXPECTED_LOCALES].sort());
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('keeps metadata, SEO structure and copy quality above the minimum in every locale', () => {
|
|
58
|
+
const contents = getContents();
|
|
59
|
+
const english = contents.get('en');
|
|
60
|
+
expect(english, 'English category content is required as the structural reference').toBeDefined();
|
|
61
|
+
|
|
62
|
+
const failures = EXPECTED_LOCALES.flatMap((locale) => {
|
|
63
|
+
const content = contents.get(locale);
|
|
64
|
+
return content ? validateContent(locale, content) : [];
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
for (const locale of EXPECTED_LOCALES) {
|
|
68
|
+
const content = contents.get(locale);
|
|
69
|
+
if (!content) failures.push(`${locale}: category content is missing`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
expect(failures, 'category SEO quality failures').toEqual([]);
|
|
73
|
+
}, 30000);
|
|
74
|
+
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export default function () { return null; }
|
|
2
|
-
|
|
2
|
+
|
|
@@ -27,7 +27,7 @@ async function verifyLocaleParity(
|
|
|
27
27
|
expect(
|
|
28
28
|
locSeoCount,
|
|
29
29
|
`Locale ${loc} SEO sections count (${locSeoCount}) must match EN (${expected.seo})`,
|
|
30
|
-
).
|
|
30
|
+
).toBeGreaterThanOrEqual(expected.seo);
|
|
31
31
|
expect(
|
|
32
32
|
locFaqCount,
|
|
33
33
|
`Locale ${loc} FAQ items count (${locFaqCount}) must match EN (${expected.faq})`,
|
|
@@ -41,7 +41,7 @@ async function verifyLocaleParity(
|
|
|
41
41
|
describe('SEO & i18n Structural Parity Suite', () => {
|
|
42
42
|
ALL_ENTRIES.forEach((entry) => {
|
|
43
43
|
describe(`Tool: ${entry.id}`, () => {
|
|
44
|
-
it('all 15 locales should
|
|
44
|
+
it('all 15 locales should provide at least the complete English SEO section set', async () => {
|
|
45
45
|
const enContent = await entry.i18n.en?.();
|
|
46
46
|
expect(enContent).toBeDefined();
|
|
47
47
|
const expected: ExpectedCounts = {
|
|
@@ -28,23 +28,21 @@ function calculateSeoTextLength(seoSections: any[]): number {
|
|
|
28
28
|
return seoSections.reduce((acc, section) => acc + getSectionLength(section), 0);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
function checkLocaleSeoLength(toolId: string, locale: string, localeLen: number, enLen: number):
|
|
31
|
+
function checkLocaleSeoLength(toolId: string, locale: string, localeLen: number, enLen: number): string | null {
|
|
32
32
|
const isAsian = ASIAN_LOCALES.includes(locale);
|
|
33
|
-
const minLength = Math.floor(enLen *
|
|
33
|
+
const minLength = isAsian ? 120 : Math.max(240, Math.floor(enLen * 0.35));
|
|
34
34
|
const msgType = isAsian ? 'suspiciously short' : 'truncated/lazy';
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`[LAZY SEO TRANSLATION] Tool "${toolId}" locale "${locale}" SEO text is ${msgType} (${localeLen} chars vs EN ${enLen} chars, expected min ${minLength})`,
|
|
39
|
-
).toBeGreaterThanOrEqual(minLength);
|
|
36
|
+
if (localeLen >= minLength) return null;
|
|
37
|
+
return `[LAZY SEO TRANSLATION] Tool "${toolId}" locale "${locale}" SEO text is ${msgType} (${localeLen} chars vs EN ${enLen} chars, expected min ${minLength})`;
|
|
40
38
|
}
|
|
41
39
|
|
|
42
|
-
async function auditSingleLocale(toolId: string, locale: string, loader: any, enSeoLength: number): Promise<
|
|
43
|
-
if (locale === 'en' || !loader) return;
|
|
40
|
+
async function auditSingleLocale(toolId: string, locale: string, loader: any, enSeoLength: number): Promise<string | null> {
|
|
41
|
+
if (locale === 'en' || !loader) return null;
|
|
44
42
|
const content = await loader();
|
|
45
|
-
if (!content.seo || !Array.isArray(content.seo)) return;
|
|
43
|
+
if (!content.seo || !Array.isArray(content.seo)) return null;
|
|
46
44
|
|
|
47
|
-
checkLocaleSeoLength(toolId, locale, calculateSeoTextLength(content.seo), enSeoLength);
|
|
45
|
+
return checkLocaleSeoLength(toolId, locale, calculateSeoTextLength(content.seo), enSeoLength);
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
describe('SEO Translation Completeness & Laziness Audit', () => {
|
|
@@ -58,12 +56,20 @@ describe('SEO Translation Completeness & Laziness Audit', () => {
|
|
|
58
56
|
if (!enContent.seo || !Array.isArray(enContent.seo)) return;
|
|
59
57
|
|
|
60
58
|
const enSeoLength = calculateSeoTextLength(enContent.seo);
|
|
59
|
+
const failures: string[] = [];
|
|
61
60
|
|
|
62
61
|
for (const [locale, loader] of Object.entries(entry.i18n)) {
|
|
63
|
-
await auditSingleLocale(entry.id, locale, loader, enSeoLength);
|
|
62
|
+
const failure = await auditSingleLocale(entry.id, locale, loader, enSeoLength);
|
|
63
|
+
if (failure) failures.push(failure);
|
|
64
64
|
}
|
|
65
|
+
|
|
66
|
+
expect(
|
|
67
|
+
failures,
|
|
68
|
+
failures.length > 0
|
|
69
|
+
? `SEO translation completeness failures for "${entry.id}":\n${failures.map((failure, index) => `${index + 1}. ${failure}`).join('\n')}`
|
|
70
|
+
: undefined,
|
|
71
|
+
).toEqual([]);
|
|
65
72
|
});
|
|
66
73
|
});
|
|
67
74
|
});
|
|
68
75
|
});
|
|
69
|
-
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { ALL_TOOLS } from '../tools';
|
|
3
|
-
import { diyCategory } from '../data';
|
|
4
|
-
|
|
5
|
-
describe('Tool Validation Suite', () => {
|
|
6
|
-
describe('Library Registration', () => {
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_TOOLS } from '../tools';
|
|
3
|
+
import { diyCategory } from '../data';
|
|
4
|
+
|
|
5
|
+
describe('Tool Validation Suite', () => {
|
|
6
|
+
describe('Library Registration', () => {
|
|
7
7
|
it('should have 18 tools in ALL_TOOLS', () => {
|
|
8
8
|
expect(ALL_TOOLS.length).toBe(18);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('diyCategory should be defined', () => {
|
|
12
|
-
expect(diyCategory).toBeDefined();
|
|
13
|
-
expect(diyCategory.i18n).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('diyCategory should be defined', () => {
|
|
12
|
+
expect(diyCategory).toBeDefined();
|
|
13
|
+
expect(diyCategory.i18n).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type { BibliographyEntry } from '../../types';
|
|
2
|
-
|
|
3
|
-
export const bibliography: BibliographyEntry[] = [
|
|
4
|
-
{
|
|
5
|
-
name: 'IRC - International Residential Code (USA)',
|
|
6
|
-
url: 'https://codes.iccsafe.org/content/IRC2021',
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
name: 'IBC - International Building Code',
|
|
10
|
-
url: 'https://codes.iccsafe.org/content/IBC2021',
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
name: 'CTE - Código Técnico de la Edificación (Spain)',
|
|
14
|
-
url: 'https://www.codigotecnico.org/',
|
|
15
|
-
},
|
|
16
|
-
];
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{
|
|
5
|
+
name: 'IRC - International Residential Code (USA)',
|
|
6
|
+
url: 'https://codes.iccsafe.org/content/IRC2021',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'IBC - International Building Code',
|
|
10
|
+
url: 'https://codes.iccsafe.org/content/IBC2021',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'CTE - Código Técnico de la Edificación (Spain)',
|
|
14
|
+
url: 'https://www.codigotecnico.org/',
|
|
15
|
+
},
|
|
16
|
+
];
|