@fukict/basic 0.1.0 → 0.1.2

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.
Files changed (69) hide show
  1. package/README.md +510 -0
  2. package/dist/component-class/fukict.d.ts +7 -9
  3. package/dist/component-class/fukict.d.ts.map +1 -1
  4. package/dist/component-class/fukict.js +22 -20
  5. package/dist/component-class/fukict.js.map +1 -1
  6. package/dist/component-function/define.d.ts +1 -1
  7. package/dist/component-function/define.d.ts.map +1 -1
  8. package/dist/component-function/define.js +1 -4
  9. package/dist/component-function/define.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/metadata.d.ts +1 -1
  14. package/dist/metadata.js +1 -1
  15. package/dist/renderer/attributes.d.ts +2 -2
  16. package/dist/renderer/attributes.d.ts.map +1 -1
  17. package/dist/renderer/attributes.js +4 -14
  18. package/dist/renderer/attributes.js.map +1 -1
  19. package/dist/renderer/class-helpers.d.ts +19 -0
  20. package/dist/renderer/class-helpers.d.ts.map +1 -0
  21. package/dist/renderer/class-helpers.js +49 -0
  22. package/dist/renderer/class-helpers.js.map +1 -0
  23. package/dist/renderer/create.d.ts.map +1 -1
  24. package/dist/renderer/create.js +47 -43
  25. package/dist/renderer/create.js.map +1 -1
  26. package/dist/renderer/diff/class.d.ts +8 -1
  27. package/dist/renderer/diff/class.d.ts.map +1 -1
  28. package/dist/renderer/diff/class.js +14 -7
  29. package/dist/renderer/diff/class.js.map +1 -1
  30. package/dist/renderer/diff/element.d.ts.map +1 -1
  31. package/dist/renderer/diff/element.js +11 -7
  32. package/dist/renderer/diff/element.js.map +1 -1
  33. package/dist/renderer/diff/fragment.d.ts.map +1 -1
  34. package/dist/renderer/diff/fragment.js +6 -3
  35. package/dist/renderer/diff/fragment.js.map +1 -1
  36. package/dist/renderer/diff/function.d.ts.map +1 -1
  37. package/dist/renderer/diff/function.js +13 -12
  38. package/dist/renderer/diff/function.js.map +1 -1
  39. package/dist/renderer/diff/helpers.d.ts.map +1 -1
  40. package/dist/renderer/diff/helpers.js +13 -0
  41. package/dist/renderer/diff/helpers.js.map +1 -1
  42. package/dist/renderer/diff/index.d.ts.map +1 -1
  43. package/dist/renderer/diff/index.js +4 -0
  44. package/dist/renderer/diff/index.js.map +1 -1
  45. package/dist/renderer/diff/primitive.d.ts +12 -0
  46. package/dist/renderer/diff/primitive.d.ts.map +1 -0
  47. package/dist/renderer/diff/primitive.js +50 -0
  48. package/dist/renderer/diff/primitive.js.map +1 -0
  49. package/dist/renderer/mount.d.ts.map +1 -1
  50. package/dist/renderer/mount.js +30 -0
  51. package/dist/renderer/mount.js.map +1 -1
  52. package/dist/renderer/vnode-helpers.d.ts +44 -0
  53. package/dist/renderer/vnode-helpers.d.ts.map +1 -0
  54. package/dist/renderer/vnode-helpers.js +47 -0
  55. package/dist/renderer/vnode-helpers.js.map +1 -0
  56. package/dist/types/class.d.ts +25 -2
  57. package/dist/types/class.d.ts.map +1 -1
  58. package/dist/types/core.d.ts +27 -3
  59. package/dist/types/core.d.ts.map +1 -1
  60. package/dist/types/core.js +1 -0
  61. package/dist/types/core.js.map +1 -1
  62. package/dist/types/index.d.ts +2 -2
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/types/index.js.map +1 -1
  65. package/dist/vnode.d.ts +9 -3
  66. package/dist/vnode.d.ts.map +1 -1
  67. package/dist/vnode.js +71 -2
  68. package/dist/vnode.js.map +1 -1
  69. package/package.json +4 -1
package/dist/vnode.js CHANGED
@@ -5,6 +5,71 @@
5
5
  */
6
6
  import { Fukict } from './component-class/fukict.js';
7
7
  import { Fragment, VNodeType } from './types/index.js';
8
+ /**
9
+ * Create a PrimitiveVNode from a primitive value
10
+ */
11
+ export function createPrimitiveVNode(value) {
12
+ return {
13
+ __type__: VNodeType.Primitive,
14
+ type: 'primitive',
15
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
16
+ value,
17
+ props: null,
18
+ children: [],
19
+ };
20
+ }
21
+ /**
22
+ * Type guard for primitive values
23
+ */
24
+ function isPrimitiveValue(value) {
25
+ return (typeof value === 'string' ||
26
+ typeof value === 'number' ||
27
+ typeof value === 'boolean' ||
28
+ value === null ||
29
+ value === undefined);
30
+ }
31
+ /**
32
+ * Normalize a single child to VNode
33
+ * Converts primitive values to PrimitiveVNode
34
+ */
35
+ function normalizeChild(child) {
36
+ // Already a VNode
37
+ if (child && typeof child === 'object' && '__type__' in child) {
38
+ return child;
39
+ }
40
+ // Primitive values -> PrimitiveVNode
41
+ if (isPrimitiveValue(child)) {
42
+ // Type guard ensures child is PrimitiveValue
43
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
44
+ return createPrimitiveVNode(child);
45
+ }
46
+ // Arrays should be flattened before this point
47
+ if (Array.isArray(child)) {
48
+ console.warn('Nested array in normalizeChild, should be flattened first');
49
+ return null;
50
+ }
51
+ return null;
52
+ }
53
+ /**
54
+ * Flatten and normalize children array
55
+ * Converts all children to VNode instances
56
+ */
57
+ function normalizeChildren(children) {
58
+ const result = [];
59
+ for (const child of children) {
60
+ // Flatten nested arrays (from slots, map, etc.)
61
+ if (Array.isArray(child)) {
62
+ result.push(...normalizeChildren(child));
63
+ }
64
+ else {
65
+ const normalized = normalizeChild(child);
66
+ if (normalized !== null) {
67
+ result.push(normalized);
68
+ }
69
+ }
70
+ }
71
+ return result;
72
+ }
8
73
  /**
9
74
  * Detect VNode type at runtime (fallback if babel-plugin is not used)
10
75
  */
@@ -36,16 +101,20 @@ function detectVNodeType(type) {
36
101
  * The __type__ field should be added by babel-plugin at compile time.
37
102
  * If not present, we detect it at runtime (slower but works).
38
103
  *
104
+ * Children are normalized: all primitive values are wrapped in PrimitiveVNode.
105
+ *
39
106
  * @param type - Element tag name or component function
40
107
  * @param props - Properties (including on: prefixed events)
41
- * @param children - Child nodes
108
+ * @param children - Child nodes (accepts any type, will be normalized)
42
109
  * @returns VNode (plain structure, __type__ expected from babel-plugin)
43
110
  */
44
111
  export function hyperscript(type, props, children) {
112
+ // Normalize children to VNode[]
113
+ const normalizedChildren = normalizeChildren(children);
45
114
  const vnode = {
46
115
  type,
47
116
  props: props || {},
48
- children,
117
+ children: normalizedChildren,
49
118
  };
50
119
  // If __type__ not set by babel-plugin, detect it at runtime
51
120
  if (!('__type__' in vnode)) {
package/dist/vnode.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../src/vnode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,SAAS,eAAe,CAAC,IAAyC;IAChE,WAAW;IACX,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,WAAW;IACX,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,mCAAmC;QACnC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,YAAY,MAAM,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC,cAAc,CAAC;QAClC,CAAC;QAED,qBAAqB;QACrB,OAAO,SAAS,CAAC,iBAAiB,CAAC;IACrC,CAAC;IAED,sBAAsB;IACtB,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CACzB,IAAyC,EACzC,KAAiC,EACjC,QAAsB;IAEtB,MAAM,KAAK,GAAG;QACZ,IAAI;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,QAAQ;KACA,CAAC;IAEX,4DAA4D;IAC5D,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AAE7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../src/vnode.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fukict/basic",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Lightweight DOM rendering basic with extension mechanism",
5
5
  "keywords": [
6
6
  "fukict",
@@ -52,6 +52,9 @@
52
52
  "engines": {
53
53
  "node": ">=16.0.0"
54
54
  },
55
+ "publishConfig": {
56
+ "registry": "https://registry.npmjs.org/"
57
+ },
55
58
  "scripts": {
56
59
  "build": "tsx ../../scripts/build-package.ts --pkg-name basic --no-watch",
57
60
  "dev": "tsx ../../scripts/build-package.ts --pkg-name basic --watch",