@tinycld/bootstrap 1.0.1 → 1.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"link-package.js","sourceRoot":"","sources":["../src/link-package.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link-package.js","sourceRoot":"","sources":["../src/link-package.ts"],"names":[],"mappings":"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"}
package/dist/prompts.js CHANGED
@@ -165,9 +165,9 @@ async function resolveTarget(fromArgv, slug, skipPrompts) {
165
165
  return abs;
166
166
  }
167
167
  // No --target: pick a sensible default based on the cwd's existing layout.
168
- // If cwd already has a tinycld/ app shell child, attach the new package
169
- // alongside it as `<cwd>/<slug>`. Otherwise bootstrap a wrapper workspace
170
- // under `<cwd>/tinycld-<slug>/` and place the package inside it.
168
+ // If cwd is itself a workspace root, attach the new package as a direct
169
+ // child `<cwd>/<slug>`. Otherwise bootstrap a wrapper workspace under
170
+ // `<cwd>/tinycld-<slug>/` and place the package inside it.
171
171
  const layout = detectLayout(slug);
172
172
  const defaultAbs = layout.targetDir;
173
173
  const defaultDisplay = `./${relative(process.cwd(), defaultAbs) || slug}`;
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GACpB,MAAM,eAAe,CAAA;AAEtB,SAAS,QAAQ,CAAI,KAAiB;IAClC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,wBAAwB,CAAC,CAAA;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACrB,MAAM,CAAC,GAAG,CAAC,CAAA;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC3B,OAAO,IAAI;SACN,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC;QAC7B,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,SAAS,EAAE,YAAY;QACvB,WAAW;QACX,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC;QAC7B,MAAM,EAAE;YACJ,OAAO,EAAE,qBAAqB;YAC9B,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC;SAChC;KACJ,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;QACpC,SAAS,EAAE,IAAI,CAAC,WAAW;QAC3B,SAAS,EAAE,mBAAmB;QAC9B,WAAW;QACX,YAAY,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB;QACxD,MAAM,EAAE;YACJ,OAAO,EAAE,0BAA0B;YACnC,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB;SAC1D;KACJ,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAE5D,MAAM,OAAO,GAAY;QACrB,IAAI;QACJ,IAAI;QACJ,WAAW;QACX,MAAM;QACN,SAAS,EAAE,EAAE;KAChB,CAAA;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,GAAG,MAAM,aAAa,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,YAAY;YACvB,WAAW;YACX,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;SACnF,CAAC,CAAA;QAEF,OAAO,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QAEpE,OAAO,CAAC,WAAW,GAAG,MAAM,aAAa,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,SAAS,EAAE,gBAAgB;YAC3B,WAAW;YACX,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE;gBACJ,OAAO,EAAE,kDAAkD;gBAC3D,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE;aACnB;SACJ,CAAC,CAAA;QAEF,OAAO,CAAC,aAAa,GAAG,MAAM,WAAW,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,WAAW;YACX,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;SAClE,CAAC,CAAA;IACN,CAAC;IAED,OAAO,CAAC,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IAEvE,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAA4B,EAAE,WAAoB;IACzE,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,GAAG;YAAE,IAAI,CAAC,iBAAiB,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAA;QACnD,OAAO,QAAQ,CAAA;IACnB,CAAC;IACD,IAAI,WAAW;QAAE,IAAI,CAAC,qEAAqE,CAAC,CAAA;IAC5F,OAAO,QAAQ,CACX,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,4CAA4C;QACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,SAAS;KAChD,CAAC,CACL,CAAA;AACL,CAAC;AAgBD,KAAK,UAAU,aAAa,CAAC,EACzB,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,GACW;IACjB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QAChC,IAAI,GAAG;YAAE,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;QAChE,OAAO,SAAS,CAAA;IACpB,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;QACnC,IAAI,GAAG;YAAE,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;QAC5E,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,OAAO,QAAQ,CACX,MAAM,IAAI,CAAC;QACP,GAAG,MAAM;QACT,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS;KAC7C,CAAC,CACL,CAAA;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,QAA8C,EAC9C,WAAoB;IAEpB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,IAAI,WAAW;QAAE,OAAO,MAAM,CAAA;IAC9B,OAAO,QAAQ,CACX,MAAM,MAAM,CAAC;QACT,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE;YACL;gBACI,KAAK,EAAE,MAAe;gBACtB,KAAK,EAAE,iFAAiF;aAC3F;YACD;gBACI,KAAK,EAAE,eAAwB;gBAC/B,KAAK,EAAE,6EAA6E;aACvF;SACJ;KACJ,CAAC,CACL,CAAA;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAA4B,EAAE,WAAoB;IAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9C,IAAI,GAAG;YAAE,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAA;QAC1C,OAAO,QAAQ,CAAA;IACnB,CAAC;IACD,IAAI,WAAW;QAAE,OAAO,EAAE,CAAA;IAC1B,MAAM,GAAG,GAAG,QAAQ,CAChB,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,SAAS;KACpD,CAAC,CACL,CAAA;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AASD,KAAK,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAoB;IACzF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC7C,IAAI,WAAW;QAAE,OAAO,YAAY,CAAA;IACpC,OAAO,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAA4B,EAAE,IAAY,EAAE,WAAoB;IACzF,oEAAoE;IACpE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC7B,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,GAAG;YAAE,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;QACjD,OAAO,GAAG,CAAA;IACd,CAAC;IAED,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAA;IACnC,MAAM,cAAc,GAAG,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IAEzE,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,GAAG;YAAE,IAAI,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAA;QACzD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAChB,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;KAC9D,CAAC,CACL,CAAA;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EACH,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GACpB,MAAM,eAAe,CAAA;AAEtB,SAAS,QAAQ,CAAI,KAAiB;IAClC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,wBAAwB,CAAC,CAAA;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACrB,MAAM,CAAC,GAAG,CAAC,CAAA;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC3B,OAAO,IAAI;SACN,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAgB;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC;QAC7B,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,SAAS,EAAE,YAAY;QACvB,WAAW;QACX,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC;QAC7B,MAAM,EAAE;YACJ,OAAO,EAAE,qBAAqB;YAC9B,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC;SAChC;KACJ,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;QACpC,SAAS,EAAE,IAAI,CAAC,WAAW;QAC3B,SAAS,EAAE,mBAAmB;QAC9B,WAAW;QACX,YAAY,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB;QACxD,MAAM,EAAE;YACJ,OAAO,EAAE,0BAA0B;YACnC,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,wBAAwB;SAC1D;KACJ,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAE5D,MAAM,OAAO,GAAY;QACrB,IAAI;QACJ,IAAI;QACJ,WAAW;QACX,MAAM;QACN,SAAS,EAAE,EAAE;KAChB,CAAA;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,GAAG,MAAM,aAAa,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,SAAS,EAAE,YAAY;YACvB,WAAW;YACX,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;SACnF,CAAC,CAAA;QAEF,OAAO,CAAC,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QAEpE,OAAO,CAAC,WAAW,GAAG,MAAM,aAAa,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,SAAS,EAAE,gBAAgB;YAC3B,WAAW;YACX,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE;gBACJ,OAAO,EAAE,kDAAkD;gBAC3D,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE;aACnB;SACJ,CAAC,CAAA;QAEF,OAAO,CAAC,aAAa,GAAG,MAAM,WAAW,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,WAAW;YACX,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;SAClE,CAAC,CAAA;IACN,CAAC;IAED,OAAO,CAAC,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IAEvE,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAA4B,EAAE,WAAoB;IACzE,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,GAAG;YAAE,IAAI,CAAC,iBAAiB,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAA;QACnD,OAAO,QAAQ,CAAA;IACnB,CAAC;IACD,IAAI,WAAW;QAAE,IAAI,CAAC,qEAAqE,CAAC,CAAA;IAC5F,OAAO,QAAQ,CACX,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,4CAA4C;QACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,SAAS;KAChD,CAAC,CACL,CAAA;AACL,CAAC;AAgBD,KAAK,UAAU,aAAa,CAAC,EACzB,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,GACW;IACjB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QAChC,IAAI,GAAG;YAAE,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;QAChE,OAAO,SAAS,CAAA;IACpB,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;QACnC,IAAI,GAAG;YAAE,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;QAC5E,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,OAAO,QAAQ,CACX,MAAM,IAAI,CAAC;QACP,GAAG,MAAM;QACT,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS;KAC7C,CAAC,CACL,CAAA;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,QAA8C,EAC9C,WAAoB;IAEpB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,IAAI,WAAW;QAAE,OAAO,MAAM,CAAA;IAC9B,OAAO,QAAQ,CACX,MAAM,MAAM,CAAC;QACT,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE;YACL;gBACI,KAAK,EAAE,MAAe;gBACtB,KAAK,EAAE,iFAAiF;aAC3F;YACD;gBACI,KAAK,EAAE,eAAwB;gBAC/B,KAAK,EAAE,6EAA6E;aACvF;SACJ;KACJ,CAAC,CACL,CAAA;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAA4B,EAAE,WAAoB;IAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9C,IAAI,GAAG;YAAE,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAA;QAC1C,OAAO,QAAQ,CAAA;IACnB,CAAC;IACD,IAAI,WAAW;QAAE,OAAO,EAAE,CAAA;IAC1B,MAAM,GAAG,GAAG,QAAQ,CAChB,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,SAAS;KACpD,CAAC,CACL,CAAA;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AASD,KAAK,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAoB;IACzF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC7C,IAAI,WAAW;QAAE,OAAO,YAAY,CAAA;IACpC,OAAO,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAA4B,EAAE,IAAY,EAAE,WAAoB;IACzF,oEAAoE;IACpE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC7B,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,GAAG;YAAE,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;QACjD,OAAO,GAAG,CAAA;IACd,CAAC;IAED,2EAA2E;IAC3E,wEAAwE;IACxE,sEAAsE;IACtE,2DAA2D;IAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAA;IACnC,MAAM,cAAc,GAAG,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IAEzE,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,GAAG;YAAE,IAAI,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAA;QACzD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAChB,MAAM,IAAI,CAAC;QACP,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;KAC9D,CAAC,CACL,CAAA;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinycld/bootstrap",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "Scaffolder for @tinycld feature packages",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -17,7 +17,13 @@
17
17
  "./components/*": "./tinycld/{{PKG_SLUG}}/components/*.tsx"
18
18
  },
19
19
  "scripts": {
20
- "typecheck": "tsc --noEmit --skipLibCheck"
20
+ "typecheck": "tinycld-pkg typecheck",
21
+ "test": "tinycld-pkg test",
22
+ "test:e2e": "tinycld-pkg test:e2e",
23
+ "check": "tinycld-pkg check"
24
+ },
25
+ "devDependencies": {
26
+ "@tinycld/package-scripts": "*"
21
27
  },
22
28
  "peerDependencies": {
23
29
  "react": ">=19",
@@ -0,0 +1,20 @@
1
+ import path from 'node:path'
2
+ import { defineConfig } from '@playwright/test'
3
+ import appConfig from '../app/playwright.config'
4
+
5
+ // Package-scoped Playwright: inherit the app shell's webServer + browser config,
6
+ // then point testDir at THIS package's tests/e2e through the app shell's
7
+ // node_modules symlink. Routing via node_modules (not this repo's real path)
8
+ // keeps node resolution walking up into the app shell's install, so
9
+ // @playwright/test and other deps resolve there — not from a (nonexistent)
10
+ // local node_modules.
11
+ // The @tinycld/{{PKG_SLUG}} symlink lives in the workspace-root node_modules (deps
12
+ // hoist there in this layout). Routing testDir through it keeps node resolution
13
+ // walking up into the install where @playwright/test lives.
14
+ const WS_ROOT = path.resolve(import.meta.dirname, '..')
15
+ const TEST_DIR = path.join(WS_ROOT, 'node_modules', '@tinycld', '{{PKG_SLUG}}', 'tests', 'e2e')
16
+
17
+ export default defineConfig({
18
+ ...appConfig,
19
+ testDir: TEST_DIR,
20
+ })
@@ -3,8 +3,8 @@ module {{GO_MODULE}}
3
3
  go 1.25.0
4
4
 
5
5
  require (
6
- github.com/pocketbase/pocketbase v0.36.8
6
+ github.com/pocketbase/pocketbase v0.37.5
7
7
  tinycld.org/core v0.0.0
8
8
  )
9
9
 
10
- replace tinycld.org/core => ../../tinycld/packages/@tinycld/core/server
10
+ replace tinycld.org/core => ../../core/server
@@ -13,7 +13,12 @@
13
13
  "./hooks/*": "./tinycld/{{PKG_SLUG}}/hooks/*.ts"
14
14
  },
15
15
  "scripts": {
16
- "typecheck": "tsc --noEmit --skipLibCheck"
16
+ "typecheck": "tinycld-pkg typecheck",
17
+ "test": "tinycld-pkg test",
18
+ "check": "tinycld-pkg check"
19
+ },
20
+ "devDependencies": {
21
+ "@tinycld/package-scripts": "*"
17
22
  },
18
23
  "peerDependencies": {
19
24
  "react": ">=19",
@@ -7,53 +7,77 @@ on:
7
7
  branches: [main]
8
8
 
9
9
  env:
10
- APP_REPO: tinycld/tinycld
11
- APP_REF: main
10
+ PACKAGE: {{PKG_SLUG}}
11
+ TEST_USER_LOGIN: user@tinycld.org
12
+ TEST_USER_PW: TestUser1234!
13
+ ADMIN_USER_LOGIN: admin@tinycld.org
14
+ ADMIN_USER_PW: AdminPass1234!
12
15
 
13
16
  jobs:
14
- checks:
15
- name: Lint, typecheck, unit tests
17
+ check:
18
+ name: Typecheck & Unit
16
19
  runs-on: ubuntu-latest
17
20
  steps:
21
+ # 1. The workspace meta-repo becomes the job root.
18
22
  - uses: actions/checkout@v5
19
23
  with:
20
- path: {{PKG_SLUG}}
24
+ repository: tinycld/workspace
25
+ ref: main
26
+ path: ws
27
+ # 2. This PR's code, checked out into the member slot.
21
28
  - uses: actions/checkout@v5
22
29
  with:
23
- repository: ${{ env.APP_REPO }}
24
- ref: ${{ env.APP_REF }}
25
- path: tinycld
30
+ path: ws/${{ env.PACKAGE }}
26
31
  - uses: actions/setup-node@v5
27
32
  with:
28
- node-version-file: tinycld/.node-version
33
+ node-version-file: ws/.node-version
29
34
  cache: npm
30
- cache-dependency-path: tinycld/package-lock.json
31
-
32
- # The app shell bundles @tinycld/core at packages/@tinycld/core/. This
33
- # package's tsconfig path "@tinycld/core/*":
34
- # ["../tinycld/packages/@tinycld/core/*"] and its server go.mod replace
35
- # directive both point directly there.
36
- - name: Install app shell deps
37
- working-directory: tinycld
38
- run: npm ci
39
-
40
- - name: Link {{PKG_SLUG}} into tinycld app shell
41
- working-directory: tinycld
42
- run: npm run packages:link ../{{PKG_SLUG}}
43
-
44
- - name: Lint (biome lives in tinycld and lints linked {{PKG_SLUG}} via app rules)
45
- working-directory: tinycld
46
- run: npm run lint
47
-
48
- # Typecheck runs from inside tinycld so module resolution sees the
49
- # full app-shell tree (uniwind augments, expo types, etc) — running
50
- # tsc standalone in the package directory misses those.
51
- - name: Typecheck (full app shell, package included via link)
52
- working-directory: tinycld
53
- env:
54
- NODE_OPTIONS: --preserve-symlinks
55
- run: npm run typecheck
35
+ cache-dependency-path: ws/package-lock.json
36
+ - uses: actions/setup-go@v6
37
+ with:
38
+ go-version-file: ws/.go-version
39
+ # 3. Clone app + core (the PR's PACKAGE is already checked out into its
40
+ # slot; bootstrap --tooling skips dirs that already exist). A sibling
41
+ # only needs app + core + itself to typecheck + unit-test.
42
+ - name: Assemble workspace (app + core)
43
+ working-directory: ws
44
+ run: TINYCLD_REPO_BASE=https://github.com/tinycld npx @tinycld/bootstrap@latest --tooling
45
+ - name: Install (workspace root)
46
+ working-directory: ws
47
+ run: npm install
48
+ - name: Typecheck + unit
49
+ working-directory: ws/${{ env.PACKAGE }}
50
+ run: npx tinycld-pkg check
56
51
 
57
- - name: Run unit tests
58
- working-directory: {{PKG_SLUG}}
59
- run: npx vitest run
52
+ e2e:
53
+ name: E2E
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v5
57
+ with:
58
+ repository: tinycld/workspace
59
+ ref: main
60
+ path: ws
61
+ - uses: actions/checkout@v5
62
+ with:
63
+ path: ws/${{ env.PACKAGE }}
64
+ - uses: actions/setup-node@v5
65
+ with:
66
+ node-version-file: ws/.node-version
67
+ cache: npm
68
+ cache-dependency-path: ws/package-lock.json
69
+ - uses: actions/setup-go@v6
70
+ with:
71
+ go-version-file: ws/.go-version
72
+ - name: Assemble workspace (app + core)
73
+ working-directory: ws
74
+ run: TINYCLD_REPO_BASE=https://github.com/tinycld npx @tinycld/bootstrap@latest --tooling
75
+ - name: Install (workspace root)
76
+ working-directory: ws
77
+ run: npm install
78
+ - name: Install Playwright browsers
79
+ working-directory: ws/app
80
+ run: npx playwright install --with-deps chromium
81
+ - name: E2E
82
+ working-directory: ws/${{ env.PACKAGE }}
83
+ run: npx tinycld-pkg test:e2e
@@ -2,53 +2,64 @@
2
2
 
3
3
  {{PKG_DESCRIPTION}}
4
4
 
5
- Feature package for the [tinycld](https://github.com/tinycld/tinycld) ecosystem. Lives as a standalone git repo alongside the [`tinycld`](https://github.com/tinycld/tinycld) app shell and other sibling packages (`contacts`, `mail`, `calendar`, `drive`, `google-takeout-import`). The app shell bundles `@tinycld/core` inside it — there is no separate core repo to clone.
5
+ A feature package for the [tinycld](https://tinycld.org/) ecosystem. It lives in
6
+ its own git repo and is developed as a **workspace member** alongside the app
7
+ shell (`app`), `@tinycld/core` (its own standalone repo, cloned as a sibling —
8
+ not bundled), and the other feature packages.
6
9
 
7
10
  ## Development
8
11
 
12
+ The package is one member of a tinycld workspace. To work on it you need a
13
+ workspace root containing at least `app`, `core`, and this package as siblings,
14
+ linked by a single `npm install` at the root.
15
+
9
16
  ```sh
10
- # Clone the app shell and this package as siblings
11
- cd ~/code/tinycld
12
- git clone git@github.com:tinycld/tinycld.git
17
+ # In a fresh workspace directory, clone this package into a member slot…
13
18
  git clone git@github.com:tinycld/{{PKG_SLUG}}.git
14
19
 
15
- # Install deps in the app shell
16
- cd tinycld
17
- npm install
20
+ # …then pull in the rest of the workspace tooling (app + core + the root
21
+ # package.json / lockfile). bootstrap --tooling skips dirs that already exist.
22
+ npx @tinycld/bootstrap@latest --tooling
18
23
 
19
- # Link this package into the app shell
20
- npm run packages:link ../{{PKG_SLUG}}
24
+ # Link every member with one install at the WORKSPACE ROOT (never inside a
25
+ # member — siblings have no node_modules of their own; deps hoist to the root).
26
+ npm install
21
27
 
22
- # Run the full stack
23
- npm run start
28
+ # Run the full stack (Expo + PocketBase, single-port dev proxy) from the app.
29
+ cd app
30
+ npm run dev
24
31
  ```
25
32
 
26
- ## Standalone checks
33
+ ## Checks
27
34
 
28
- Lint and typecheck both run from the app shell — biome and TypeScript live
29
- there, and the app shell's tsconfig pulls in `expo`'s base config, `uniwind`
30
- type augments, and the live `~/types/pbSchema` generated from PocketBase,
31
- none of which a standalone invocation in this package can see. Biome's
32
- config lives in `tinycld/biome.json` and applies to every linked package
33
- (there is no `biome.json` in this repo).
35
+ All checks run **scoped to this member** through `tinycld-pkg`, which reuses the
36
+ app shell's biome config, tsconfig base, and vitest/playwright configs (so
37
+ `@tinycld/core/*`, uniwind augments, and PocketBase types all resolve):
34
38
 
35
39
  ```sh
36
- cd ../tinycld
37
- npm run packages:link ../{{PKG_SLUG}} # only needed once per checkout
38
- npm run lint # scans this package via the app's biome rules
39
- npm run typecheck # full app-shell tsc
40
+ cd {{PKG_SLUG}}
41
+ npx tinycld-pkg check # biome + typecheck
42
+ npx tinycld-pkg test # vitest unit tests
43
+ npx tinycld-pkg test:e2e # playwright e2e specs (full preset only — packages with screens)
40
44
  ```
41
45
 
46
+ There is no `biome.json` in this repo — biome lives only in the app shell and
47
+ `tinycld-pkg` points it at this member's source.
48
+
42
49
  ## CI
43
50
 
44
- `.github/workflows/ci.yml` runs lint, typecheck, and vitest on every push to
45
- `main` and every PR. It clones `tinycld/tinycld@main` into a sibling
46
- directory, installs the app shell's deps, links this package in, and runs
47
- the checks — exactly what a developer does locally.
51
+ `.github/workflows/ci.yml` runs typecheck, unit tests, and e2e on every push to
52
+ `main` and every PR. It checks out `tinycld/workspace` as the job root, drops
53
+ this PR's code into its member slot, assembles `app` + `core` via
54
+ `@tinycld/bootstrap --tooling`, installs at the workspace root, and runs
55
+ `tinycld-pkg check` / `tinycld-pkg test:e2e` — exactly what a developer runs
56
+ locally.
48
57
 
49
58
  ## Package anatomy
50
59
 
51
60
  - `manifest.ts` — the single source of truth for this package's capabilities
52
- - `package.json` — name, exports map, peer deps
53
- - `tsconfig.json` — typecheck config (lint config lives in the app shell's `biome.json`)
54
- - `tests/` — vitest unit tests
61
+ - `package.json` — name, exports map, `tinycld-pkg` scripts, peer deps
62
+ - `tsconfig.json` — extends the app shell's package tsconfig base
63
+ - `vitest.config.ts` (and `playwright.config.ts` — full preset only) — thin configs spreading the app's
64
+ - `tinycld/{{PKG_SLUG}}/` — the package's TypeScript surface (screens, collections, …)
65
+ - `tests/` — vitest unit tests (and Playwright e2e specs — full preset only)
@@ -1,22 +1,13 @@
1
1
  {
2
- "extends": "../tinycld/tsconfig.json",
2
+ "extends": "../app/tsconfig.package-base.json",
3
3
  "compilerOptions": {
4
4
  "baseUrl": ".",
5
- "rootDir": "..",
6
5
  "paths": {
7
6
  "~/tinycld/{{PKG_SLUG}}/*": ["./tinycld/{{PKG_SLUG}}/*"],
8
- "@tinycld/app-generated/*": ["../tinycld/lib/generated/*"],
9
- "@tinycld/core/*": ["../tinycld/packages/@tinycld/core/*"],
10
- "~/*": ["../tinycld/packages/@tinycld/core/*"]
11
- },
12
- "noEmit": true,
13
- "preserveSymlinks": false
7
+ "@tinycld/core/*": ["../core/*"],
8
+ "@tinycld/app-generated/*": ["../app/lib/generated/*"]
9
+ }
14
10
  },
15
- "include": [
16
- "**/*.ts",
17
- "**/*.tsx",
18
- "../tinycld/uniwind-types.d.ts",
19
- "../tinycld/expo-env.d.ts"
20
- ],
11
+ "include": ["tinycld/**/*.ts", "tinycld/**/*.tsx", "../app/uniwind-types.d.ts"],
21
12
  "exclude": ["node_modules", "server", "pb-migrations", "tests/**/*.spec.ts"]
22
13
  }
@@ -0,0 +1,16 @@
1
+ import path from 'node:path'
2
+ import { mergeConfig } from 'vitest/config'
3
+ import appConfig from '../app/vitest.config'
4
+
5
+ // Package-scoped vitest: inherit the app shell's canonical aliases (so
6
+ // @tinycld/core/* etc. resolve identically), then add this package's own
7
+ // `~/*` source alias and scope the run to this package's tests/.
8
+ export default mergeConfig(appConfig, {
9
+ resolve: {
10
+ alias: [{ find: /^~\/(.+)$/, replacement: path.resolve(__dirname, '$1') }],
11
+ },
12
+ test: {
13
+ root: __dirname,
14
+ include: ['tests/**/*.test.{ts,tsx}'],
15
+ },
16
+ })
@@ -0,0 +1 @@
1
+ 1.25.0
@@ -0,0 +1 @@
1
+ 25
@@ -0,0 +1,20 @@
1
+ // Test-only stub for expo-clipboard. The real package transitively
2
+ // imports expo-modules-core, which has too many side effects to load
3
+ // under a Node test environment (it touches several globals expected
4
+ // to be set up by Metro/RN). Tests get a minimal in-memory shim that
5
+ // records the last-written text and returns it on read.
6
+
7
+ let text = ''
8
+
9
+ export async function setStringAsync(s: string): Promise<void> {
10
+ text = s
11
+ }
12
+
13
+ export async function getStringAsync(): Promise<string> {
14
+ return text
15
+ }
16
+
17
+ // Test-only escape hatch: reset the in-memory clipboard between tests.
18
+ export function __resetClipboardTextForTest(): void {
19
+ text = ''
20
+ }
@@ -0,0 +1,48 @@
1
+ // Test-only stub for expo-router. The real package's CJS entry
2
+ // (build/index.js) does `require("./global")` at module top, which
3
+ // Node's CJS resolver can't satisfy when the calling file is reached
4
+ // through a sibling-symlink path (Vite SSR's preserveSymlinks=false
5
+ // means imports under packages/@tinycld/<sibling>/... resolve via the
6
+ // sibling's real filesystem location, where node_modules don't reach
7
+ // expo-router).
8
+ //
9
+ // Tests that need to load a real screen, hook, or side-effect module
10
+ // from a sibling package import this stub instead. It surfaces the
11
+ // minimal API actually used at module-top by sibling source — the
12
+ // `router` object plus a few component shells. Tests that care about
13
+ // hook behavior should still mock those hooks individually with
14
+ // vi.mock; this stub only exists so the module graph can finish
15
+ // loading.
16
+
17
+ import { vi } from 'vitest'
18
+
19
+ const noop = () => {}
20
+ const ComponentStub = () => null
21
+
22
+ export const router = {
23
+ push: vi.fn(noop),
24
+ replace: vi.fn(noop),
25
+ back: vi.fn(noop),
26
+ canGoBack: vi.fn(() => true),
27
+ setParams: vi.fn(noop),
28
+ navigate: vi.fn(noop),
29
+ dismissAll: vi.fn(noop),
30
+ dismiss: vi.fn(noop),
31
+ }
32
+
33
+ export const Link = ComponentStub
34
+ export const Stack = Object.assign(ComponentStub, { Screen: ComponentStub })
35
+ export const Tabs = Object.assign(ComponentStub, { Screen: ComponentStub })
36
+ export const Slot = ComponentStub
37
+ export const Redirect = ComponentStub
38
+ export const Drawer = Object.assign(ComponentStub, { Screen: ComponentStub })
39
+
40
+ export const useRouter = () => router
41
+ export const usePathname = () => '/'
42
+ export const useSegments = () => []
43
+ export const useLocalSearchParams = () => ({})
44
+ export const useGlobalSearchParams = () => ({})
45
+ export const useFocusEffect = (_cb: () => void) => {}
46
+ export const useNavigation = () => ({})
47
+ export const useRootNavigationState = () => ({ key: 'test' })
48
+ export const Href = undefined
@@ -0,0 +1,73 @@
1
+ // Test-only stub for `lucide-react-native`. The real bundle pulls
2
+ // in `react-native-svg`, whose source uses TypeScript syntax that
3
+ // Vitest's transformer doesn't apply to node_modules. We don't
4
+ // render icons in unit tests anyway — assertions about icon
5
+ // rendering belong in Playwright.
6
+ //
7
+ // Implemented as CJS (.cjs) so we can use a Proxy on module.exports.
8
+ // Any named-icon import (ExternalLink, AlertTriangle, …) yields the
9
+ // same harmless component stub. Tests that genuinely need a real
10
+ // icon should reach for vi.mock locally; this stub only exists so
11
+ // the module graph can finish loading from sibling source under
12
+ // packages/@tinycld/<sibling>/... where the real bundle would crash.
13
+ //
14
+ // Vitest's ES↔CJS interop reads named exports from Object.keys() on
15
+ // the CJS module.exports, so the Proxy's `get` trap alone isn't
16
+ // enough — ESM `import { Heading1 } from '...'` requires Heading1 to
17
+ // appear as an own property. We pre-populate the dictionary with
18
+ // every Lucide identifier referenced from the codebase so static
19
+ // imports resolve to the Stub function; the Proxy handles any
20
+ // additional dynamic lookups (a defensive fallback).
21
+
22
+ const Stub = () => null
23
+
24
+ // Lucide icon names referenced by import statements anywhere in the
25
+ // codebase. Add new names here when a new icon is imported. The list
26
+ // is overinclusive on purpose: a missing entry would surface as an
27
+ // `undefined` named import in tests that try to render the icon,
28
+ // which is harder to diagnose than an unused name.
29
+ const NAMES = [
30
+ 'AlertCircle', 'AlertTriangle', 'AlignCenter', 'AlignJustify', 'AlignLeft', 'AlignRight',
31
+ 'Archive', 'ArrowDown', 'ArrowDownToLine', 'ArrowLeft', 'ArrowRight', 'ArrowUp',
32
+ 'AtSign', 'Bell', 'BellOff', 'Bold', 'Book', 'BookOpen', 'Bot', 'Box', 'Calendar',
33
+ 'Camera', 'Check', 'CheckCircle', 'CheckSquare', 'ChevronDown', 'ChevronLeft',
34
+ 'ChevronRight', 'ChevronUp', 'Circle', 'Clipboard', 'Clock', 'Cloud', 'CloudOff',
35
+ 'Code', 'Code2', 'Columns', 'Copy', 'CornerDownLeft', 'Cpu', 'CreditCard', 'Crop',
36
+ 'Database', 'Download', 'Edit', 'Edit2', 'Edit3', 'ExternalLink', 'Eye', 'EyeOff',
37
+ 'File', 'FileText', 'Files', 'Filter', 'Flag', 'Folder', 'FolderOpen', 'Forward',
38
+ 'Globe', 'GraduationCap', 'Grid', 'HardDrive', 'Hash', 'Headphones', 'Heading1',
39
+ 'Heading2', 'Heading3', 'Heading4', 'Heading5', 'Heading6', 'HelpCircle', 'Highlighter',
40
+ 'Home', 'Image', 'Inbox', 'Info', 'Italic', 'Key', 'Keyboard', 'Languages', 'Layout',
41
+ 'Link', 'Link2', 'List', 'ListChecks', 'ListOrdered', 'Loader', 'Lock', 'LogIn',
42
+ 'LogOut', 'Mail', 'MailOpen', 'Map', 'Maximize', 'Maximize2', 'MenuIcon', 'Menu',
43
+ 'MessageCircle', 'MessageSquare', 'Mic', 'MicOff', 'Minimize', 'Minimize2', 'Minus',
44
+ 'MonitorSmartphone', 'MoreHorizontal', 'MoreVertical', 'Move', 'Music', 'Package',
45
+ 'Palette', 'Paperclip', 'Pause', 'Pencil', 'Phone', 'PieChart', 'Pin', 'PinOff',
46
+ 'Play', 'Plus', 'PlusCircle', 'Pointer', 'Power', 'Printer', 'Quote', 'RefreshCcw',
47
+ 'RefreshCw', 'Replace', 'ReplaceAll', 'Reply', 'ReplyAll', 'RotateCcw', 'Save', 'Search', 'Send', 'Server',
48
+ 'Settings', 'Settings2', 'Share', 'Share2', 'Shield', 'ShieldCheck', 'Shuffle',
49
+ 'Sidebar', 'Slack', 'SlidersHorizontal', 'Smartphone', 'Smile', 'Sparkles',
50
+ 'Speaker', 'Square', 'Star', 'Strikethrough', 'Subscript', 'Sun', 'Superscript',
51
+ 'Table', 'Tag', 'Terminal', 'TestTube', 'Trash', 'Trash2', 'TrendingDown',
52
+ 'TrendingUp', 'Triangle', 'Type', 'Underline', 'Undo', 'Unlock', 'Upload',
53
+ 'User', 'UserCheck', 'UserPlus', 'Users', 'Video', 'VideoOff', 'Volume', 'Volume2',
54
+ 'VolumeX', 'Wifi', 'WifiOff', 'WrapText', 'X', 'XCircle', 'XSquare', 'Zap',
55
+ 'ZoomIn', 'ZoomOut',
56
+ ]
57
+
58
+ const exports = { default: Stub }
59
+ for (const name of NAMES) {
60
+ exports[name] = Stub
61
+ }
62
+ exports.__esModule = true
63
+
64
+ module.exports = new Proxy(exports, {
65
+ get(target, prop) {
66
+ if (typeof prop === 'symbol') return Reflect.get(target, prop)
67
+ if (prop in target) return target[prop]
68
+ // Unknown icon name: return the Stub anyway so dynamic
69
+ // lookups don't crash. Static `import { Foo }` will already
70
+ // have been resolved against `target` above.
71
+ return Stub
72
+ },
73
+ })
@@ -0,0 +1,54 @@
1
+ import * as fs from 'node:fs'
2
+ import * as os from 'node:os'
3
+ import * as path from 'node:path'
4
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest'
5
+ import { getPackages, resetPackagesCache } from '../tinycld.packages'
6
+
7
+ // Build a fake workspace tree and point getPackages at it via TINYCLD_WS_ROOT.
8
+ function makeWorkspace(): string {
9
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), 'tcld-ws-'))
10
+ // core member: package.json name @tinycld/core, NO manifest.ts
11
+ fs.mkdirSync(path.join(root, 'core'), { recursive: true })
12
+ fs.writeFileSync(
13
+ path.join(root, 'core', 'package.json'),
14
+ JSON.stringify({ name: '@tinycld/core' })
15
+ )
16
+ // feature member: contacts with manifest.ts + named package.json
17
+ fs.mkdirSync(path.join(root, 'contacts'), { recursive: true })
18
+ fs.writeFileSync(path.join(root, 'contacts', 'manifest.ts'), 'export default {}')
19
+ fs.writeFileSync(
20
+ path.join(root, 'contacts', 'package.json'),
21
+ JSON.stringify({ name: '@tinycld/contacts' })
22
+ )
23
+ // app shell: package.json name "app", NO manifest.ts
24
+ fs.mkdirSync(path.join(root, 'app'), { recursive: true })
25
+ fs.writeFileSync(path.join(root, 'app', 'package.json'), JSON.stringify({ name: 'app' }))
26
+ return root
27
+ }
28
+
29
+ describe('getPackages (new layout)', () => {
30
+ let root: string
31
+ beforeEach(() => {
32
+ root = makeWorkspace()
33
+ process.env.TINYCLD_WS_ROOT = root
34
+ resetPackagesCache()
35
+ })
36
+ afterEach(() => {
37
+ delete process.env.TINYCLD_WS_ROOT
38
+ fs.rmSync(root, { recursive: true, force: true })
39
+ })
40
+
41
+ it('includes core (member named @tinycld/core, no manifest) plus feature members with a manifest.ts', () => {
42
+ const pkgs = getPackages()
43
+ expect(pkgs).toContain('@tinycld/core')
44
+ expect(pkgs).toContain('@tinycld/contacts')
45
+ })
46
+
47
+ it('excludes the app shell (named "app", no manifest.ts)', () => {
48
+ expect(getPackages()).not.toContain('app')
49
+ })
50
+
51
+ it('lists core first (stable order: core, then features sorted)', () => {
52
+ expect(getPackages()[0]).toBe('@tinycld/core')
53
+ })
54
+ })