@tbsten/mir-core 0.0.2-alpha06 → 0.0.2-alpha08

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 (77) hide show
  1. package/dist/generated/validate-mirconfig.d.ts +9 -0
  2. package/dist/generated/validate-mirconfig.js +339 -0
  3. package/dist/generated/validate-mirconfig.js.map +1 -0
  4. package/dist/generated/validate-snippet.d.ts +9 -0
  5. package/dist/generated/validate-snippet.js +685 -0
  6. package/dist/generated/validate-snippet.js.map +1 -0
  7. package/dist/helpers/index.js +16 -0
  8. package/dist/helpers/index.js.map +1 -1
  9. package/dist/helpers/string-helpers.d.ts +16 -0
  10. package/dist/helpers/string-helpers.js +45 -2
  11. package/dist/helpers/string-helpers.js.map +1 -1
  12. package/dist/hooks.js +2 -2
  13. package/dist/hooks.js.map +1 -1
  14. package/dist/i18n/locales/en.js +6 -4
  15. package/dist/i18n/locales/en.js.map +1 -1
  16. package/dist/i18n/locales/ja.js +6 -4
  17. package/dist/i18n/locales/ja.js.map +1 -1
  18. package/dist/i18n/types.d.ts +4 -2
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.js +4 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/schema-validator.d.ts +9 -0
  23. package/dist/schema-validator.js +51 -0
  24. package/dist/schema-validator.js.map +1 -0
  25. package/dist/snippet-schema.d.ts +5 -0
  26. package/dist/snippet-schema.js +12 -49
  27. package/dist/snippet-schema.js.map +1 -1
  28. package/dist/template-engine.d.ts +5 -0
  29. package/dist/template-engine.js +12 -0
  30. package/dist/template-engine.js.map +1 -1
  31. package/package.json +6 -1
  32. package/dist/__tests__/__snapshots__/remote-registry-authorization.test.js.snap +0 -36
  33. package/dist/__tests__/errors.test.d.ts +0 -1
  34. package/dist/__tests__/errors.test.js +0 -51
  35. package/dist/__tests__/errors.test.js.map +0 -1
  36. package/dist/__tests__/helpers/string-helpers.test.d.ts +0 -1
  37. package/dist/__tests__/helpers/string-helpers.test.js +0 -61
  38. package/dist/__tests__/helpers/string-helpers.test.js.map +0 -1
  39. package/dist/__tests__/hooks.test.d.ts +0 -1
  40. package/dist/__tests__/hooks.test.js +0 -125
  41. package/dist/__tests__/hooks.test.js.map +0 -1
  42. package/dist/__tests__/i18n.test.d.ts +0 -1
  43. package/dist/__tests__/i18n.test.js +0 -51
  44. package/dist/__tests__/i18n.test.js.map +0 -1
  45. package/dist/__tests__/remote-registry-authorization.test.d.ts +0 -1
  46. package/dist/__tests__/remote-registry-authorization.test.js +0 -132
  47. package/dist/__tests__/remote-registry-authorization.test.js.map +0 -1
  48. package/dist/__tests__/remote-registry.test.d.ts +0 -1
  49. package/dist/__tests__/remote-registry.test.js +0 -251
  50. package/dist/__tests__/remote-registry.test.js.map +0 -1
  51. package/dist/__tests__/safe-yaml-parser.test.d.ts +0 -1
  52. package/dist/__tests__/safe-yaml-parser.test.js +0 -159
  53. package/dist/__tests__/safe-yaml-parser.test.js.map +0 -1
  54. package/dist/__tests__/snapshots/__snapshots__/error-messages.snapshot.test.js.snap +0 -27
  55. package/dist/__tests__/snapshots/__snapshots__/snippet-schema-output.snapshot.test.js.snap +0 -78
  56. package/dist/__tests__/snapshots/__snapshots__/template-output.snapshot.test.js.snap +0 -45
  57. package/dist/__tests__/snapshots/error-messages.snapshot.test.d.ts +0 -1
  58. package/dist/__tests__/snapshots/error-messages.snapshot.test.js +0 -52
  59. package/dist/__tests__/snapshots/error-messages.snapshot.test.js.map +0 -1
  60. package/dist/__tests__/snapshots/snippet-schema-output.snapshot.test.d.ts +0 -1
  61. package/dist/__tests__/snapshots/snippet-schema-output.snapshot.test.js +0 -93
  62. package/dist/__tests__/snapshots/snippet-schema-output.snapshot.test.js.map +0 -1
  63. package/dist/__tests__/snapshots/template-output.snapshot.test.d.ts +0 -1
  64. package/dist/__tests__/snapshots/template-output.snapshot.test.js +0 -60
  65. package/dist/__tests__/snapshots/template-output.snapshot.test.js.map +0 -1
  66. package/dist/__tests__/snippet-schema.test.d.ts +0 -1
  67. package/dist/__tests__/snippet-schema.test.js +0 -137
  68. package/dist/__tests__/snippet-schema.test.js.map +0 -1
  69. package/dist/__tests__/symlink-checker.test.d.ts +0 -1
  70. package/dist/__tests__/symlink-checker.test.js +0 -81
  71. package/dist/__tests__/symlink-checker.test.js.map +0 -1
  72. package/dist/__tests__/template-engine.test.d.ts +0 -1
  73. package/dist/__tests__/template-engine.test.js +0 -175
  74. package/dist/__tests__/template-engine.test.js.map +0 -1
  75. package/dist/__tests__/validate-name.test.d.ts +0 -1
  76. package/dist/__tests__/validate-name.test.js +0 -49
  77. package/dist/__tests__/validate-name.test.js.map +0 -1
@@ -1,93 +0,0 @@
1
- /**
2
- * mir-core: snippet スキーマ処理結果の snapshot テスト
3
- */
4
- import { describe, it, expect } from "vitest";
5
- import { parseSnippetYaml, serializeSnippetYaml } from "../../index.js";
6
- // TODO: 現時点では理想の挙動をテストケースとして記述。後で有効化する。
7
- describe("snippet スキーマ snapshot", () => {
8
- it("最小限の snippet 定義の YAML 出力", () => {
9
- const yaml = serializeSnippetYaml({ name: "minimal" });
10
- expect(yaml).toMatchSnapshot();
11
- });
12
- it("変数付き snippet 定義の YAML 出力", () => {
13
- const yaml = serializeSnippetYaml({
14
- name: "react-hook",
15
- description: "React カスタムフック雛形",
16
- variables: {
17
- name: {
18
- description: "フック名",
19
- schema: { type: "string" },
20
- },
21
- description: {
22
- description: "説明文",
23
- schema: { type: "string", default: "" },
24
- },
25
- },
26
- });
27
- expect(yaml).toMatchSnapshot();
28
- });
29
- it("hooks 付き snippet 定義の YAML 出力", () => {
30
- const yaml = serializeSnippetYaml({
31
- name: "with-hooks",
32
- hooks: {
33
- "before-install": [
34
- { echo: "インストールを開始します" },
35
- {
36
- input: {
37
- confirm: {
38
- description: "続行しますか?",
39
- "answer-to": "confirmed",
40
- schema: { type: "boolean", default: true },
41
- },
42
- },
43
- },
44
- ],
45
- "after-install": [
46
- { echo: "✅ インストール完了" },
47
- ],
48
- },
49
- });
50
- expect(yaml).toMatchSnapshot();
51
- });
52
- it("suggests 付き変数の YAML 出力", () => {
53
- const yaml = serializeSnippetYaml({
54
- name: "css-setup",
55
- variables: {
56
- framework: {
57
- description: "CSSフレームワーク",
58
- suggests: ["tailwind", "vanilla-extract", "css-modules"],
59
- schema: { type: "string", default: "tailwind" },
60
- },
61
- },
62
- });
63
- expect(yaml).toMatchSnapshot();
64
- });
65
- it("フル構成 YAML のパース → シリアライズ往復", () => {
66
- const input = `
67
- name: full-example
68
- description: フル構成のサンプル
69
- variables:
70
- name:
71
- description: コンポーネント名
72
- schema:
73
- type: string
74
- framework:
75
- description: フレームワーク
76
- suggests:
77
- - react
78
- - vue
79
- schema:
80
- type: string
81
- default: react
82
- hooks:
83
- before-install:
84
- - echo: "セットアップ中..."
85
- after-install:
86
- - echo: "完了: {{ name }}"
87
- `;
88
- const parsed = parseSnippetYaml(input);
89
- const serialized = serializeSnippetYaml(parsed);
90
- expect(serialized).toMatchSnapshot();
91
- });
92
- });
93
- //# sourceMappingURL=snippet-schema-output.snapshot.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snippet-schema-output.snapshot.test.js","sourceRoot":"","sources":["../../../src/__tests__/snapshots/snippet-schema-output.snapshot.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAExE,wCAAwC;AAExC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,oBAAoB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,oBAAoB,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B;gBACD,WAAW,EAAE;oBACX,WAAW,EAAE,KAAK;oBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;iBACxC;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,oBAAoB,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE;gBACL,gBAAgB,EAAE;oBAChB,EAAE,IAAI,EAAE,cAAc,EAAE;oBACxB;wBACE,KAAK,EAAE;4BACL,OAAO,EAAE;gCACP,WAAW,EAAE,SAAS;gCACtB,WAAW,EAAE,WAAW;gCACxB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;6BAC3C;yBACF;qBACF;iBACF;gBACD,eAAe,EAAE;oBACf,EAAE,IAAI,EAAE,YAAY,EAAE;iBACvB;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,oBAAoB,CAAC;YAChC,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,SAAS,EAAE;oBACT,WAAW,EAAE,YAAY;oBACzB,QAAQ,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC;oBACxD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBjB,CAAC;QACE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,60 +0,0 @@
1
- /**
2
- * mir-core: テンプレート展開結果の snapshot テスト
3
- */
4
- import { describe, it, expect } from "vitest";
5
- import { expandTemplate, expandPath } from "../../index.js";
6
- // TODO: 現時点では理想の挙動をテストケースとして記述。後で有効化する。
7
- describe("テンプレート展開結果 snapshot", () => {
8
- it("React コンポーネントテンプレート", () => {
9
- const template = `import React from "react";
10
-
11
- export interface {{ name }}Props {
12
- children?: React.ReactNode;
13
- }
14
-
15
- export function {{ name }}({ children }: {{ name }}Props) {
16
- return <div className="{{ name }}">{children}</div>;
17
- }`;
18
- const result = expandTemplate(template, { name: "Button" });
19
- expect(result).toMatchSnapshot();
20
- });
21
- it("React フックテンプレート", () => {
22
- const template = `import { useState, useCallback } from "react";
23
-
24
- /**
25
- * {{ description }}
26
- */
27
- export function {{ name }}() {
28
- const [state, setState] = useState(null);
29
- return { state, setState };
30
- }`;
31
- const result = expandTemplate(template, {
32
- name: "useAuth",
33
- description: "認証フック",
34
- });
35
- expect(result).toMatchSnapshot();
36
- });
37
- it("条件分岐付きテンプレート", () => {
38
- const template = `{{#if useTypescript}}
39
- import type { FC } from "react";
40
- {{else}}
41
- import React from "react";
42
- {{/if}}
43
-
44
- export const {{ name }} = () => {
45
- return <div>{{ name }}</div>;
46
- };`;
47
- expect(expandTemplate(template, { name: "App", useTypescript: true })).toMatchSnapshot();
48
- expect(expandTemplate(template, { name: "App", useTypescript: false })).toMatchSnapshot();
49
- });
50
- it("パス展開", () => {
51
- expect(expandPath("{{ dir }}/{{ name }}.ts", { dir: "hooks", name: "useAuth" })).toMatchSnapshot();
52
- });
53
- it("ネストしたディレクトリパス展開", () => {
54
- expect(expandPath("src/{{ module }}/{{ name }}/index.ts", {
55
- module: "features",
56
- name: "auth",
57
- })).toMatchSnapshot();
58
- });
59
- });
60
- //# sourceMappingURL=template-output.snapshot.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-output.snapshot.test.js","sourceRoot":"","sources":["../../../src/__tests__/snapshots/template-output.snapshot.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,wCAAwC;AAExC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,QAAQ,GAAG;;;;;;;;EAQnB,CAAC;QACC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,QAAQ,GAAG;;;;;;;;EAQnB,CAAC;QACC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE;YACtC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,QAAQ,GAAG;;;;;;;;GAQlB,CAAC;QACA,MAAM,CACJ,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC/D,CAAC,eAAe,EAAE,CAAC;QACpB,MAAM,CACJ,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAChE,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACd,MAAM,CACJ,UAAU,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CACzE,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CACJ,UAAU,CAAC,sCAAsC,EAAE;YACjD,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,MAAM;SACb,CAAC,CACH,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,137 +0,0 @@
1
- /**
2
- * mir-core: snippet-schema の unit テスト
3
- */
4
- import { describe, it, expect } from "vitest";
5
- import { parseSnippetYaml, serializeSnippetYaml, validateSnippetDefinition, ValidationError, } from "../index.js";
6
- // TODO: 現時点では理想の挙動をテストケースとして記述。後で有効化する。
7
- describe("parseSnippetYaml", () => {
8
- it("最小限の YAML をパースできる", () => {
9
- const def = parseSnippetYaml("name: my-snippet\n");
10
- expect(def.name).toBe("my-snippet");
11
- });
12
- it("変数付き YAML をパースできる", () => {
13
- const yaml = `
14
- name: react-hook
15
- description: React カスタムフック
16
- variables:
17
- name:
18
- description: フック名
19
- schema:
20
- type: string
21
- `;
22
- const def = parseSnippetYaml(yaml);
23
- expect(def.name).toBe("react-hook");
24
- expect(def.variables?.name?.description).toBe("フック名");
25
- expect(def.variables?.name?.schema?.type).toBe("string");
26
- });
27
- it("hooks 付き YAML をパースできる", () => {
28
- const yaml = `
29
- name: test-snippet
30
- hooks:
31
- before-install:
32
- - echo: "Installing..."
33
- after-install:
34
- - echo: "Done!"
35
- `;
36
- const def = parseSnippetYaml(yaml);
37
- expect(def.hooks?.["before-install"]).toHaveLength(1);
38
- expect(def.hooks?.["after-install"]).toHaveLength(1);
39
- });
40
- it("dependencies 付き YAML をパースできる", () => {
41
- const yaml = `
42
- name: react-component
43
- description: React component
44
- dependencies:
45
- - react-hook
46
- - typescript-setup
47
- `;
48
- const def = parseSnippetYaml(yaml);
49
- expect(def.dependencies).toEqual(["react-hook", "typescript-setup"]);
50
- });
51
- it("不正な YAML でエラー", () => {
52
- expect(() => parseSnippetYaml("not a yaml object: [")).toThrow();
53
- });
54
- it("name がない YAML でエラー", () => {
55
- expect(() => parseSnippetYaml("description: no name\n")).toThrow(ValidationError);
56
- });
57
- });
58
- describe("serializeSnippetYaml", () => {
59
- it("SnippetDefinition を YAML 文字列に変換する", () => {
60
- const yaml = serializeSnippetYaml({ name: "test" });
61
- expect(yaml).toContain("name: test");
62
- });
63
- it("パースと逆変換で元に戻る", () => {
64
- const original = { name: "test", description: "desc" };
65
- const yaml = serializeSnippetYaml(original);
66
- const parsed = parseSnippetYaml(yaml);
67
- expect(parsed.name).toBe(original.name);
68
- expect(parsed.description).toBe(original.description);
69
- });
70
- });
71
- describe("validateSnippetDefinition", () => {
72
- it("最小限の定義はバリデーション通過", () => {
73
- expect(() => validateSnippetDefinition({ name: "valid" })).not.toThrow();
74
- });
75
- it("name が空だとエラー", () => {
76
- expect(() => validateSnippetDefinition({ name: "" })).toThrow(ValidationError);
77
- });
78
- it("suggests が配列でないとエラー", () => {
79
- expect(() => validateSnippetDefinition({
80
- name: "test",
81
- variables: {
82
- key: { suggests: "not-array" },
83
- },
84
- })).toThrow(ValidationError);
85
- });
86
- it("schema.type が不正だとエラー", () => {
87
- expect(() => validateSnippetDefinition({
88
- name: "test",
89
- variables: {
90
- key: {
91
- schema: { type: "invalid" },
92
- },
93
- },
94
- })).toThrow(ValidationError);
95
- });
96
- it("正しい schema.type は通過 (string, number, boolean)", () => {
97
- expect(() => validateSnippetDefinition({
98
- name: "test",
99
- variables: {
100
- a: { schema: { type: "string" } },
101
- b: { schema: { type: "number" } },
102
- c: { schema: { type: "boolean" } },
103
- },
104
- })).not.toThrow();
105
- });
106
- it("dependencies が配列の場合は通過", () => {
107
- expect(() => validateSnippetDefinition({
108
- name: "react-component",
109
- dependencies: ["react-hook"],
110
- })).not.toThrow();
111
- });
112
- it("dependencies に複数要素を持つ場合は通過", () => {
113
- expect(() => validateSnippetDefinition({
114
- name: "test",
115
- dependencies: ["dep1", "dep2", "dep3"],
116
- })).not.toThrow();
117
- });
118
- it("dependencies が配列でないとエラー", () => {
119
- expect(() => validateSnippetDefinition({
120
- name: "test",
121
- dependencies: "not-array",
122
- })).toThrow(ValidationError);
123
- });
124
- it("dependencies の要素が文字列でないとエラー", () => {
125
- expect(() => validateSnippetDefinition({
126
- name: "test",
127
- dependencies: ["valid-dep", 123],
128
- })).toThrow(ValidationError);
129
- });
130
- it("dependencies の要素に不正な名前があるとエラー", () => {
131
- expect(() => validateSnippetDefinition({
132
- name: "test",
133
- dependencies: ["-invalid-dep-name"],
134
- })).toThrow(ValidationError);
135
- });
136
- });
137
- //# sourceMappingURL=snippet-schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snippet-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/snippet-schema.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,81 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import fs from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { isSymbolicLink, findSymlinksInDirectory } from "../lib/symlink-checker.js";
6
- let tmpDir;
7
- beforeEach(() => {
8
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "mir-symlink-test-"));
9
- });
10
- afterEach(() => {
11
- fs.rmSync(tmpDir, { recursive: true, force: true });
12
- });
13
- describe("isSymbolicLink", () => {
14
- it("通常のファイルに対して false を返す", () => {
15
- const filePath = path.join(tmpDir, "regular.txt");
16
- fs.writeFileSync(filePath, "content");
17
- expect(isSymbolicLink(filePath)).toBe(false);
18
- });
19
- it("ディレクトリに対して false を返す", () => {
20
- const dirPath = path.join(tmpDir, "subdir");
21
- fs.mkdirSync(dirPath);
22
- expect(isSymbolicLink(dirPath)).toBe(false);
23
- });
24
- it("シンボリックリンクに対して true を返す", () => {
25
- const targetPath = path.join(tmpDir, "target.txt");
26
- const linkPath = path.join(tmpDir, "link.txt");
27
- fs.writeFileSync(targetPath, "content");
28
- fs.symlinkSync(targetPath, linkPath);
29
- expect(isSymbolicLink(linkPath)).toBe(true);
30
- });
31
- it("存在しないパスに対して false を返す", () => {
32
- expect(isSymbolicLink(path.join(tmpDir, "nonexistent"))).toBe(false);
33
- });
34
- });
35
- describe("findSymlinksInDirectory", () => {
36
- it("シンボリックリンクがない場合 hasSymlinks=false を返す", () => {
37
- fs.writeFileSync(path.join(tmpDir, "index.ts"), "content");
38
- const result = findSymlinksInDirectory(tmpDir);
39
- expect(result.hasSymlinks).toBe(false);
40
- expect(result.symlinkPaths).toHaveLength(0);
41
- });
42
- it("シンボリックリンクを検出する", () => {
43
- const targetPath = path.join(tmpDir, "target.txt");
44
- const linkPath = path.join(tmpDir, "link.txt");
45
- fs.writeFileSync(targetPath, "content");
46
- fs.symlinkSync(targetPath, linkPath);
47
- const result = findSymlinksInDirectory(tmpDir);
48
- expect(result.hasSymlinks).toBe(true);
49
- expect(result.symlinkPaths).toContain("link.txt");
50
- });
51
- it("サブディレクトリ内のシンボリックリンクを検出する", () => {
52
- const subDir = path.join(tmpDir, "src");
53
- fs.mkdirSync(subDir);
54
- const targetPath = path.join(tmpDir, "target.txt");
55
- const linkPath = path.join(subDir, "link.txt");
56
- fs.writeFileSync(targetPath, "content");
57
- fs.symlinkSync(targetPath, linkPath);
58
- const result = findSymlinksInDirectory(tmpDir);
59
- expect(result.hasSymlinks).toBe(true);
60
- expect(result.symlinkPaths.some((p) => p.includes("link.txt"))).toBe(true);
61
- });
62
- it("複数のシンボリックリンクをすべて検出する", () => {
63
- const target1 = path.join(tmpDir, "target1.txt");
64
- const target2 = path.join(tmpDir, "target2.txt");
65
- const link1 = path.join(tmpDir, "link1.txt");
66
- const link2 = path.join(tmpDir, "link2.txt");
67
- fs.writeFileSync(target1, "content1");
68
- fs.writeFileSync(target2, "content2");
69
- fs.symlinkSync(target1, link1);
70
- fs.symlinkSync(target2, link2);
71
- const result = findSymlinksInDirectory(tmpDir);
72
- expect(result.hasSymlinks).toBe(true);
73
- expect(result.symlinkPaths).toHaveLength(2);
74
- });
75
- it("存在しないディレクトリに対して空の結果を返す", () => {
76
- const result = findSymlinksInDirectory(path.join(tmpDir, "nonexistent"));
77
- expect(result.hasSymlinks).toBe(false);
78
- expect(result.symlinkPaths).toHaveLength(0);
79
- });
80
- });
81
- //# sourceMappingURL=symlink-checker.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"symlink-checker.test.js","sourceRoot":"","sources":["../../src/__tests__/symlink-checker.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,175 +0,0 @@
1
- /**
2
- * mir-core: テンプレートエンジンの unit テスト
3
- */
4
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
- import fs from "node:fs";
6
- import os from "node:os";
7
- import path from "node:path";
8
- import { expandTemplate, expandPath, extractVariables, extractVariablesFromDirectory, } from "../index.js";
9
- // TODO: 現時点では理想の挙動をテストケースとして記述。後で有効化する。
10
- describe("expandTemplate", () => {
11
- it("変数を展開する", () => {
12
- expect(expandTemplate("Hello, {{ name }}!", { name: "World" })).toBe("Hello, World!");
13
- });
14
- it("複数変数を展開する", () => {
15
- const result = expandTemplate("{{ greeting }}, {{ name }}!", { greeting: "Hi", name: "User" });
16
- expect(result).toBe("Hi, User!");
17
- });
18
- it("変数が未定義の場合は空文字に展開", () => {
19
- expect(expandTemplate("Hello, {{ name }}!", {})).toBe("Hello, !");
20
- });
21
- it("変数を含まないテンプレートはそのまま返す", () => {
22
- expect(expandTemplate("plain text", {})).toBe("plain text");
23
- });
24
- it("空テンプレートは空文字を返す", () => {
25
- expect(expandTemplate("", {})).toBe("");
26
- });
27
- it("Handlebars の #if ブロックを展開する", () => {
28
- const template = "{{#if enabled}}ON{{else}}OFF{{/if}}";
29
- expect(expandTemplate(template, { enabled: true })).toBe("ON");
30
- expect(expandTemplate(template, { enabled: false })).toBe("OFF");
31
- });
32
- it("noEscape モードで HTML タグがエスケープされない", () => {
33
- expect(expandTemplate("{{ html }}", { html: "<div>test</div>" })).toBe("<div>test</div>");
34
- });
35
- });
36
- describe("expandPath", () => {
37
- it("パス内の変数を展開する", () => {
38
- expect(expandPath("{{ name }}.ts", { name: "useAuth" })).toBe("useAuth.ts");
39
- });
40
- it("ネストしたパスの変数を展開する", () => {
41
- const result = expandPath("{{ dir }}/{{ name }}.ts", {
42
- dir: "hooks",
43
- name: "useAuth",
44
- });
45
- expect(result).toMatch(/hooks[/\\]useAuth\.ts/);
46
- });
47
- it("パス区切りを正規化する", () => {
48
- const result = expandPath("a//b/c", {});
49
- expect(result).not.toContain("//");
50
- });
51
- });
52
- describe("extractVariables", () => {
53
- it("単一変数を抽出する", () => {
54
- expect(extractVariables("{{ name }}")).toContain("name");
55
- });
56
- it("複数変数を抽出する", () => {
57
- const vars = extractVariables("{{ name }} {{ description }}");
58
- expect(vars).toContain("name");
59
- expect(vars).toContain("description");
60
- });
61
- it("重複変数は1つにまとめる", () => {
62
- const vars = extractVariables("{{ name }} {{ name }}");
63
- expect(vars.filter((v) => v === "name")).toHaveLength(1);
64
- });
65
- it("変数がない場合は空配列", () => {
66
- expect(extractVariables("no variables")).toEqual([]);
67
- });
68
- it("#if ブロック内の変数を抽出する", () => {
69
- const vars = extractVariables("{{#if enabled}}{{ name }}{{/if}}");
70
- expect(vars).toContain("enabled");
71
- expect(vars).toContain("name");
72
- });
73
- });
74
- describe("expandTemplate with helpers", () => {
75
- it("lowercase ヘルパー", () => {
76
- expect(expandTemplate("{{lowercase name}}", { name: "HELLO" })).toBe("hello");
77
- });
78
- it("uppercase ヘルパー", () => {
79
- expect(expandTemplate("{{uppercase name}}", { name: "hello" })).toBe("HELLO");
80
- });
81
- it("replace ヘルパー", () => {
82
- expect(expandTemplate('{{replace package "/" "."}}', { package: "com/example/app" })).toBe("com.example.app");
83
- });
84
- it("camelCase ヘルパー", () => {
85
- expect(expandTemplate("{{camelCase name}}", { name: "my-component" })).toBe("myComponent");
86
- });
87
- it("pascalCase ヘルパー", () => {
88
- expect(expandTemplate("{{pascalCase name}}", { name: "my-component" })).toBe("MyComponent");
89
- });
90
- it("snakeCase ヘルパー", () => {
91
- expect(expandTemplate("{{snakeCase name}}", { name: "myComponent" })).toBe("my_component");
92
- });
93
- it("kebabCase ヘルパー", () => {
94
- expect(expandTemplate("{{kebabCase name}}", { name: "MyComponent" })).toBe("my-component");
95
- });
96
- it("capitalize ヘルパー", () => {
97
- expect(expandTemplate("{{capitalize name}}", { name: "hello" })).toBe("Hello");
98
- });
99
- it("uncapitalize ヘルパー", () => {
100
- expect(expandTemplate("{{uncapitalize name}}", { name: "Hello" })).toBe("hello");
101
- });
102
- it("trim ヘルパー", () => {
103
- expect(expandTemplate("{{trim name}}", { name: " hello " })).toBe("hello");
104
- });
105
- it("サブ式(ネスト): lowercase(replace(...))", () => {
106
- expect(expandTemplate('{{lowercase (replace name "/" ".")}}', {
107
- name: "COM/EXAMPLE/APP",
108
- })).toBe("com.example.app");
109
- });
110
- it("サブ式(ネスト): pascalCase(replace(...))", () => {
111
- expect(expandTemplate('{{pascalCase (replace pkg "/" "-")}}', {
112
- pkg: "my/cool/component",
113
- })).toBe("MyCoolComponent");
114
- });
115
- });
116
- describe("extractVariables with helpers", () => {
117
- it("ヘルパー名を変数に含めない", () => {
118
- const vars = extractVariables("{{lowercase name}}");
119
- expect(vars).toContain("name");
120
- expect(vars).not.toContain("lowercase");
121
- });
122
- it("replace ヘルパーで変数のみ抽出", () => {
123
- const vars = extractVariables('{{replace package "/" "."}}');
124
- expect(vars).toContain("package");
125
- expect(vars).not.toContain("replace");
126
- });
127
- it("サブ式でもヘルパー名を除外", () => {
128
- const vars = extractVariables('{{lowercase (replace name "/" ".")}}');
129
- expect(vars).toContain("name");
130
- expect(vars).not.toContain("lowercase");
131
- expect(vars).not.toContain("replace");
132
- });
133
- it("ヘルパーと通常変数が混在", () => {
134
- const vars = extractVariables("{{name}} {{lowercase title}}");
135
- expect(vars).toContain("name");
136
- expect(vars).toContain("title");
137
- expect(vars).not.toContain("lowercase");
138
- });
139
- it("組み込みヘルパー (if/each) も変数に含めない", () => {
140
- const vars = extractVariables("{{#if enabled}}{{name}}{{/if}}");
141
- expect(vars).toContain("enabled");
142
- expect(vars).toContain("name");
143
- expect(vars).not.toContain("if");
144
- });
145
- });
146
- describe("extractVariablesFromDirectory", () => {
147
- let tmpDir;
148
- beforeEach(() => {
149
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "mir-core-test-"));
150
- });
151
- afterEach(() => {
152
- fs.rmSync(tmpDir, { recursive: true, force: true });
153
- });
154
- it("ファイル内容から変数を抽出する", () => {
155
- fs.writeFileSync(path.join(tmpDir, "index.ts"), "export {{ name }}", "utf-8");
156
- const vars = extractVariablesFromDirectory(tmpDir);
157
- expect(vars).toContain("name");
158
- });
159
- it("ファイル名から変数を抽出する", () => {
160
- fs.writeFileSync(path.join(tmpDir, "{{ name }}.ts"), "content", "utf-8");
161
- const vars = extractVariablesFromDirectory(tmpDir);
162
- expect(vars).toContain("name");
163
- });
164
- it("サブディレクトリ名から変数を抽出する", () => {
165
- const subDir = path.join(tmpDir, "{{ module }}");
166
- fs.mkdirSync(subDir, { recursive: true });
167
- fs.writeFileSync(path.join(subDir, "index.ts"), "export {}", "utf-8");
168
- const vars = extractVariablesFromDirectory(tmpDir);
169
- expect(vars).toContain("module");
170
- });
171
- it("存在しないディレクトリは空配列", () => {
172
- expect(extractVariablesFromDirectory("/nonexistent")).toEqual([]);
173
- });
174
- });
175
- //# sourceMappingURL=template-engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-engine.test.js","sourceRoot":"","sources":["../../src/__tests__/template-engine.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};